update emails and verifing

This commit is contained in:
ben
2026-08-18 11:44:09 +02:00
parent 953c371e48
commit 49e0ea5734
3 changed files with 32 additions and 13 deletions
+26 -10
View File
@@ -1,12 +1,12 @@
from database import execute, fetch_one from database import execute, fetch_one
import bcrypt import bcrypt
from jose import jwt, JWTError from jose import jwt
from datetime import datetime, timedelta from datetime import datetime, timedelta
from fastapi import Header, HTTPException
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
from fastapi import Depends, HTTPException from fastapi import Depends
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from email_service import create_verification, send_verification_email
security = HTTPBearer() security = HTTPBearer()
load_dotenv() load_dotenv()
@@ -30,7 +30,7 @@ def create_token(user_id):
return token return token
def create_user(username, password): def create_user(username, password, email):
password_hash = bcrypt.hashpw( password_hash = bcrypt.hashpw(
password.encode(), password.encode(),
@@ -39,15 +39,30 @@ def create_user(username, password):
user_id = execute( user_id = execute(
""" """
INSERT INTO users (username, password_hash) INSERT INTO users (
VALUES (?, ?) 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 return user_id
def verify_user(username, password): def verify_user(username, password):
user = fetch_one( user = fetch_one(
@@ -80,10 +95,11 @@ def get_current_user(
return payload["user_id"] return payload["user_id"]
def get_user(user_id): def get_user(user_id):
return fetch_one( return fetch_one(
""" """
SELECT id, username SELECT id, username, email, email_verified
FROM users FROM users
WHERE id = ? WHERE id = ?
""", """,
+1 -1
View File
@@ -239,7 +239,7 @@ def send_verification_email(email: str, token: str):
raise RuntimeError("SMTP configuration is incomplete") raise RuntimeError("SMTP configuration is incomplete")
verification_url = ( verification_url = (
f"https://jouwdomein.nl/verify-email?token={token}" f"https://ben.de-roo.org/verify-email?token={token}"
) )
message = EmailMessage() message = EmailMessage()
+5 -2
View File
@@ -82,6 +82,7 @@ class Login(BaseModel):
class UserCreate(BaseModel): class UserCreate(BaseModel):
username: str username: str
password: str password: str
email: EmailStr
class EventCreate(BaseModel): class EventCreate(BaseModel):
@@ -173,24 +174,26 @@ def database_status(
@app.post( @app.post(
"/create-user", "/create-user",
summary="Create a 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): def api_create_user(user: UserCreate):
try: try:
user_id = create_user( user_id = create_user(
user.username, user.username,
user.password, user.password,
user.email,
) )
except sqlite3.IntegrityError: except sqlite3.IntegrityError:
raise HTTPException( raise HTTPException(
status_code=409, status_code=409,
detail="username already exists", detail="username or email already exists",
) )
return { return {
"status": "created", "status": "created",
"user_id": user_id, "user_id": user_id,
"email_verification": "sent",
} }