|
1 | 1 | import json
|
| 2 | +from datetime import datetime, timedelta |
2 | 3 |
|
3 |
| -from fastapi import APIRouter, BackgroundTasks, Depends, status |
| 4 | +from fastapi import APIRouter, Depends, status |
4 | 5 | from fastapi.responses import JSONResponse
|
5 | 6 | from sqlmodel.ext.asyncio.session import AsyncSession
|
6 | 7 |
|
| 8 | +from pkg.config import Config |
7 | 9 | from pkg.db import get_session
|
8 | 10 | from pkg.errors import UserAlreadyExists
|
| 11 | +from pkg.mail import send_email |
9 | 12 |
|
10 | 13 | from .schemas import UserCreateResponseSchema, UserCreateSchema
|
11 | 14 | from .service import UserService
|
| 15 | +from .utils import generate_url_safe_token |
12 | 16 |
|
13 | 17 | auth_router = APIRouter()
|
14 | 18 | user_service = UserService()
|
|
17 | 21 | @auth_router.post("/register", status_code=status.HTTP_201_CREATED)
|
18 | 22 | async def register_user(
|
19 | 23 | user_data: UserCreateSchema,
|
20 |
| - background_tasks: BackgroundTasks, |
21 | 24 | session: AsyncSession = Depends(get_session),
|
22 | 25 | ):
|
23 | 26 | if await user_service.user_exists(user_data.email, session):
|
24 | 27 | raise UserAlreadyExists
|
25 | 28 |
|
26 | 29 | user = await user_service.create_user(user_data, session)
|
27 | 30 |
|
| 31 | + user_activation_token = generate_url_safe_token( |
| 32 | + { |
| 33 | + "user_uid": str(user.uid), |
| 34 | + "expires_at": (datetime.now() + timedelta(minutes=15)).timestamp(), |
| 35 | + } |
| 36 | + ) |
| 37 | + user_activation_link = ( |
| 38 | + f"http://{Config.DOMAIN}/auth/activate/{user_activation_token}" |
| 39 | + ) |
| 40 | + |
| 41 | + await send_email( |
| 42 | + [user.email], |
| 43 | + "Activate your account", |
| 44 | + "auth/activation_email.html", |
| 45 | + {"first_name": user.first_name, "activation_link": user_activation_link}, |
| 46 | + ) |
| 47 | + |
28 | 48 | return JSONResponse(
|
29 | 49 | status_code=status.HTTP_201_CREATED,
|
30 | 50 | content={
|
|
0 commit comments