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
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 = ?
""",
+1 -1
View File
@@ -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()
+5 -2
View File
@@ -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",
}