Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # root/backend/api/routers/routes.py
- import json
- from fastapi import APIRouter, HTTPException, Depends, status
- from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer
- from sqlalchemy.orm import Session
- import bcrypt
- from api.models.models import UserBase, User
- from api.validation.account_validation import (
- validate_email,
- validate_password,
- is_name_not_in_password,
- validate_universal_phone_number,
- hash_password
- )
- from main import get_db, generate_session_token, oauth2_scheme
- router = APIRouter()
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
- @router.get("/")
- async def root():
- text = [
- "Embark on a journey into the future of technology through our diverse range of mobile, desktop,",
- "and web applications meticulously crafted to simplify and enrich your daily life. Immerse yourself",
- "in the convenience of our mobile applications, offering innovative tools for on-the-go efficiency.",
- "Elevate your productivity with our desktop applications, providing powerful features to streamline",
- "your work seamlessly. Experience seamless online interactions with our web applications, designed",
- "to bring ease and efficiency to your digital experiences. Our mission is to seamlessly integrate",
- "technology into your lifestyle, making tasks easier, interactions more enjoyable, and connections",
- "more meaningful. Step into a world where technology enhances every aspect of your life,",
- "simplifying your tasks and enriching your digital journey."
- ]
- return { "message": "Welcome To Mek's Hub!", "description": " ".join(text) }
- @router.get("/logged_in_links/")
- async def get_logged_in_links():
- with open("./api/routers/route_paths.json", 'r', encoding="utf-8-sig") as f:
- data = json.load(f)
- return { "navLinks": data[0] }
- @router.get("/logged_out_links/")
- async def get_logged_out_links():
- with open("./api/routers/route_paths.json", 'r', encoding="utf-8-sig") as f:
- data = json.load(f)
- return { "navLinks": data[1] }
- @router.post("/create_account/")
- async def create_new_user(user: UserBase, db: Session = Depends(get_db)):
- if not validate_email(user.email_address):
- raise HTTPException(status_code=400, detail="Not A Valid Email")
- if not validate_password(user.password):
- raise HTTPException(status_code=400, detail="Not A Valid Password")
- if not is_name_not_in_password(user.first_name, user.last_name, user.password):
- raise HTTPException(status_code=400, detail="Name Cannot Be In Password")
- if not validate_universal_phone_number(user.phone_number):
- raise HTTPException(status_code=400, detail="Invalid Phone Number")
- query = db.query(User.id).filter(User.email_address == user.email_address)
- user_exists = db.query(query.exists()).scalar()
- if user_exists:
- raise HTTPException(status_code=409, detail="User Already Exists")
- user.password = hash_password(user.password)
- user = User(**user.model_dump())
- db.add(user)
- db.commit()
- db.refresh(user)
- return user
- @router.post("/login/")
- async def login(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
- user = db.query(User).filter(User.username == form_data.username).first()
- if not user:
- raise HTTPException(status_code=400, detail="Incorrect Username/Password")
- if not bcrypt.checkpw(form_data.password.encode("utf-8"), user.password):
- raise HTTPException(status_code=400, detail="Incorrect Username/Password")
- session_token = generate_session_token(user.id)
- return { "access_token": session_token, "token_type": "bearer" }
- @router.get("/user/")
- async def get_user_data(db: Session = Depends(get_db), token: str = Depends(oauth2_scheme)):
- session = db.query(Session).filter(Session.token == token).first()
- if not session:
- raise HTTPException(status_code=401, detail="Invalid session token")
- user = db.query(User).filter(User.id == session.user_id).first()
- if not user:
- raise HTTPException(status_code=404, detail="User not found")
- return {
- "userName": user.username,
- "loggedIn": True
- }
Advertisement
Add Comment
Please, Sign In to add comment