From 49e0ea5734ed3feb554e51dfdafcde8e1fe3648c Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 18 Aug 2026 11:44:09 +0200 Subject: [PATCH] update emails and verifing --- backend/auth.py | 36 ++++++++++++++++++++++++++---------- backend/email_service.py | 2 +- backend/main.py | 7 +++++-- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/backend/auth.py b/backend/auth.py index eaa270a..7d15238 100644 --- a/backend/auth.py +++ b/backend/auth.py @@ -1,12 +1,12 @@ from database import execute, fetch_one import bcrypt -from jose import jwt, JWTError +from jose import jwt from datetime import datetime, timedelta -from fastapi import Header, HTTPException from dotenv import load_dotenv -import os -from fastapi import Depends, HTTPException +import os +from fastapi import Depends from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials +from email_service import create_verification, send_verification_email security = HTTPBearer() load_dotenv() @@ -30,7 +30,7 @@ def create_token(user_id): return token -def create_user(username, password): +def create_user(username, password, email): password_hash = bcrypt.hashpw( password.encode(), @@ -39,15 +39,30 @@ def create_user(username, password): user_id = execute( """ - INSERT INTO users (username, password_hash) - VALUES (?, ?) + INSERT INTO users ( + username, + password_hash, + email, + email_verified + ) + VALUES (?, ?, ?, 0) """, - (username, password_hash) + ( + username, + password_hash, + email, + ) + ) + + token = create_verification(user_id) + + send_verification_email( + email, + token, ) return user_id - def verify_user(username, password): user = fetch_one( @@ -80,10 +95,11 @@ def get_current_user( return payload["user_id"] + def get_user(user_id): return fetch_one( """ - SELECT id, username + SELECT id, username, email, email_verified FROM users WHERE id = ? """, diff --git a/backend/email_service.py b/backend/email_service.py index 2f4cac7..ca411cd 100644 --- a/backend/email_service.py +++ b/backend/email_service.py @@ -239,7 +239,7 @@ def send_verification_email(email: str, token: str): raise RuntimeError("SMTP configuration is incomplete") verification_url = ( - f"https://jouwdomein.nl/verify-email?token={token}" + f"https://ben.de-roo.org/verify-email?token={token}" ) message = EmailMessage() diff --git a/backend/main.py b/backend/main.py index 966f96b..acf1e93 100644 --- a/backend/main.py +++ b/backend/main.py @@ -82,6 +82,7 @@ class Login(BaseModel): class UserCreate(BaseModel): username: str password: str + email: EmailStr class EventCreate(BaseModel): @@ -173,24 +174,26 @@ def database_status( @app.post( "/create-user", summary="Create a user", - description="Creates a new user account. The username must be unique.", + description="Creates a new user account and sends an email verification link. Usernames should be unique", ) def api_create_user(user: UserCreate): try: user_id = create_user( user.username, user.password, + user.email, ) except sqlite3.IntegrityError: raise HTTPException( status_code=409, - detail="username already exists", + detail="username or email already exists", ) return { "status": "created", "user_id": user_id, + "email_verification": "sent", }