Update 2025-04-24_11:44:19
This commit is contained in:
40
register.py
Normal file
40
register.py
Normal file
@ -0,0 +1,40 @@
|
||||
# register.py — user registration and magic link sender
|
||||
|
||||
from fastapi import APIRouter, Form, Request, HTTPException, Depends
|
||||
from sqlmodel import Session, select
|
||||
from models import User, UserQuota
|
||||
from database import get_db
|
||||
import uuid
|
||||
import smtplib
|
||||
from email.message import EmailMessage
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
MAGIC_FROM = "noreply@dicta2stream.net"
|
||||
MAGIC_DOMAIN = "https://dicta2stream.net"
|
||||
|
||||
@router.post("/register")
|
||||
def register(request: Request, email: str = Form(...), user: str = Form(...), db: Session = Depends(get_db)):
|
||||
if db.get(User, email):
|
||||
raise HTTPException(status_code=400, detail="Email already registered")
|
||||
|
||||
token = str(uuid.uuid4())
|
||||
db.add(User(email=email, username=user, token=token, confirmed=False, ip=request.client.host))
|
||||
db.add(UserQuota(uid=user))
|
||||
db.commit()
|
||||
|
||||
msg = EmailMessage()
|
||||
msg["From"] = MAGIC_FROM
|
||||
msg["To"] = email
|
||||
msg["Subject"] = "Your magic login link"
|
||||
msg.set_content(
|
||||
f"Hello {user},\n\nClick to confirm your account:\n{MAGIC_DOMAIN}/?token={token}\n\nThis link is valid for one-time login."
|
||||
)
|
||||
|
||||
try:
|
||||
with smtplib.SMTP("localhost") as smtp:
|
||||
smtp.send_message(msg)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Email failed: {e}")
|
||||
|
||||
return { "message": "Confirmation sent" }
|
Reference in New Issue
Block a user