File size: 3,542 Bytes
763951b
 
8d3bed9
325f578
44372ef
325f578
 
8338c06
325f578
9731a64
 
10b597c
 
46a06f8
325f578
10b597c
625461f
e3afd2e
625461f
 
46a06f8
10b597c
625461f
 
 
 
 
10511db
 
 
 
 
 
325f578
44372ef
 
 
e3afd2e
 
 
 
a3ea3d6
4da28a8
 
069ccc6
 
 
 
4da28a8
 
069ccc6
1b226ae
ebf7b24
4da28a8
473df3a
 
 
 
44372ef
 
8338c06
 
 
 
 
 
 
 
 
 
 
c209774
325f578
c209774
325f578
c209774
673cb74
c209774
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#main.py

from fastapi import FastAPI, Form, Depends, HTTPException, APIRouter
from fastapi.requests import Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from sqlalchemy.orm import Session
from auth import verify_token, oauth2_scheme, auth_views, register, UserCreate, verify_email
from database import get_db, get_user_by_email
#import auth
#import tts

app = FastAPI()
#router = APIRouter()
templates = Jinja2Templates(directory="templates")

# Include the authentication router with the prefix '/auth'
#app.include_router(auth.router, prefix="")

# Include the TTS router with the prefix '/tts'
#app.include_router(tts.router, prefix="/tts")

# Dependency for verifying the user's token
def get_current_user(token: str = Depends(verify_token)):
    if not token:
        raise HTTPException(status_code=401, detail="Token not valid")
    return token
# Route for the landing page
@app.get("/", response_class=HTMLResponse)
async def landing(request: Request):
    return templates.TemplateResponse("landing.html", {"request": request})

# Your other routes and app configuration go here

@app.get("/login", response_class=HTMLResponse)
async def login(request: Request):
    return templates.TemplateResponse("login.html", {"request": request})
@app.get("/register", response_class=HTMLResponse)
async def register_get(request: Request):
    return templates.TemplateResponse("register.html", {"request": request})

@app.post("/register", response_class=HTMLResponse)
async def register_post(
    request: Request,
    username: str = Form(...),
    email: str = Form(...),
    password: str = Form(...),
    confirm_password: str = Form(...),
    db: Session = Depends(get_db)
):
    user = UserCreate(username=username, email=email, password=password, confirm_password=confirm_password)
    registered_user = register(user, db)
    return RedirectResponse("/registration_successful")
    
@app.get("/registration_successful", response_class=HTMLResponse)
async def registration_successful(request: Request):
    return templates.TemplateResponse("registration_successful.html", {"request": request})


@app.get("/verify/{verification_token}", response_class=HTMLResponse)
async def verify_email(verification_token: str, request: Request, db: Session = Depends(get_db)):
    # Perform email verification
    verification_result = verify_email(verification_token, db)
    
    # Handle a successful verification
    if "message" in verification_result:
        # Redirect the user to the protected area
        return RedirectResponse("/protected")

    # Handle any other cases, such as errors
    return HTTPException(status_code=400, detail="Verification failed")

# User authentication (protected route)
@app.get("/protected", response_model=str)
async def protected_route(request: Request, token: str = Depends(oauth2_scheme), db: Session = Depends(get_db)):
    # Verify the access token
    user = verify_token(token, my_secret_key, "HS256")
    if user is None:
        raise HTTPException(status_code=401, detail="Invalid or expired token")

    # Check if the user exists in the database
    db_user = get_user_by_email(db, user)  # Modify this to match your database query

    if db_user is None:
        raise HTTPException(status_code=401, detail="User not found in the database")

    # The user exists in the database, and you can render the protected route template
    return templates.TemplateResponse("protected.html", {"request": request, "user": db_user.username})