diff --git a/docker-compose.yaml b/docker-compose.yaml index 9efeef2..42be633 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,6 +15,8 @@ services: JWT_SECRET: ${JWT_SECRET} LOG_FILE: ${LOG_FILE} PORT: ${BACKEND_PORT} + GMAIL_USER: ${GMAIL_USER} + GMAIL_PASSWORD: ${GMAIL_PASSWORD} volumes: - ./backend/logs:/var/log/freetube - ./backend:/app @@ -44,7 +46,21 @@ services: - ./nginx/nginx-selfsigned.key:/etc/nginx/ssl/nginx-selfsigned.key depends_on: - resit_backend + + mailpit: + image: axllent/mailpit:latest + ports: + - "8025:8025" # Web UI + - "1025:1025" # SMTP + volumes: + - mailpit-data:/data + environment: + # set where to store the database + MP_DATABASE: /data/mailpit.db + restart: unless-stopped volumes: db_data: + driver: local + mailpit-data: driver: local \ No newline at end of file diff --git a/frontend/src/contexts/AuthContext.jsx b/frontend/src/contexts/AuthContext.jsx index 087df4d..2bbf860 100644 --- a/frontend/src/contexts/AuthContext.jsx +++ b/frontend/src/contexts/AuthContext.jsx @@ -74,8 +74,8 @@ export const AuthProvider = ({ children }) => { throw new Error(data.message || 'Erreur lors de la création du compte'); } - // After successful registration, log the user in - await login(username, password); + // // After successful registration, log the user in + // await login(username, password); return data; } catch (error) { diff --git a/frontend/src/modals/EmailVerificationModal.jsx b/frontend/src/modals/EmailVerificationModal.jsx new file mode 100644 index 0000000..269ec7b --- /dev/null +++ b/frontend/src/modals/EmailVerificationModal.jsx @@ -0,0 +1,26 @@ +import React, { useState } from 'react'; + +export default function EmailVerificationModal({ isOpen, onSubmit, onClose }) { + + const [verificationCode, setVerificationCode] = useState(''); + + return isOpen && ( +
+
+

Vérification de l'email

+

Un email de vérification a été envoyé à votre adresse email. Veuillez vérifier votre boîte de réception.

+ setVerificationCode(e.target.value)} + /> + +
+
+ ); +} \ No newline at end of file diff --git a/frontend/src/pages/Register.jsx b/frontend/src/pages/Register.jsx index 16b7d95..0ca5ff8 100644 --- a/frontend/src/pages/Register.jsx +++ b/frontend/src/pages/Register.jsx @@ -2,6 +2,8 @@ import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import Navbar from '../components/Navbar'; +import EmailVerificationModal from '../modals/EmailVerificationModal'; +import { verifyEmail } from '../services/user.service'; export default function Register() { const [formData, setFormData] = useState({ @@ -17,6 +19,7 @@ export default function Register() { const [alerts, setAlerts] = useState([]); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); + const [isEmailVerificationModalOpen, setEmailVerificationModalOpen] = useState(false); const navigate = useNavigate(); const { register } = useAuth(); @@ -63,7 +66,7 @@ export default function Register() { try { await register(formData.email, formData.username, formData.password, formData.profile); - navigate('/'); + setEmailVerificationModalOpen(true); } catch (err) { addAlert('error', 'Erreur lors de la création du compte'); } finally { @@ -71,6 +74,20 @@ export default function Register() { } }; + const onVerificationSubmit = async (token) => { + + console.log("Submitting email verification with token:", token); + + const response = await verifyEmail(formData.email, token, addAlert); + + if (response) { + // Email verified successfully + setEmailVerificationModalOpen(false); + navigate('/login'); + } + + } + const addAlert = (type, message) => { const newAlert = { type, message, id: Date.now() }; // Add unique ID setAlerts([...alerts, newAlert]); @@ -229,6 +246,7 @@ export default function Register() { + setEmailVerificationModalOpen(false)} /> ); } diff --git a/frontend/src/services/user.service.js b/frontend/src/services/user.service.js index fe642f1..59486ca 100644 --- a/frontend/src/services/user.service.js +++ b/frontend/src/services/user.service.js @@ -100,4 +100,26 @@ export async function updateUser(userId, token, userData, addAlert) { console.error("Error updating user:", error); addAlert('error', "Erreur lors de la mise à jour des données de l'utilisateur."); } +} + +export async function verifyEmail(email, token, addAlert) { + try { + const response = await fetch('/api/users/verify-email', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ email, token }) + }); + + if (!response.ok) { + throw new Error("Failed to verify email"); + } + + const data = await response.json(); + return true; + } catch (error) { + console.error("Error verifying email:", error); + addAlert('error', "Erreur lors de la vérification de l'email."); + } } \ No newline at end of file