SplatNet-Backend/routes/me.py

45 lines
No EOL
1.6 KiB
Python

from fastapi import APIRouter, Request, Depends, HTTPException
from sqlalchemy.orm import Session as DBSession
from database import SessionLocal, User, Session as UserSession
from services import auth
from config import cipher
router = APIRouter()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@router.get("/me")
async def get_my_profile(request: Request, db: DBSession = Depends(get_db)):
session_id = request.cookies.get("session_id")
if not session_id:
raise HTTPException(status_code=401, detail="No active session")
db_session = db.query(UserSession).filter(UserSession.id == session_id).first()
if not db_session:
raise HTTPException(status_code=401, detail="Invalid session")
user = db.query(User).filter(User.username == db_session.username).first()
if not user or not user.spfn_pass_enc:
raise HTTPException(status_code=401, detail="Credentials not found. Please re-login.")
try:
decrypted_pass = cipher.decrypt(user.spfn_pass_enc.encode()).decode()
token_data = auth.get_token(user.username, decrypted_pass)
if not token_data or "token" not in token_data:
raise HTTPException(status_code=401, detail="External authentication failed")
profile_data = auth.get_profile(token_data["token"])
if not profile_data:
raise HTTPException(status_code=404, detail="Profile not found")
return profile_data
except Exception as e:
print(f"Error fetching profile: {e}")
raise HTTPException(status_code=500, detail="Internal server error")