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