Spaces:
Sleeping
Sleeping
Download auth.py from Nisha56/editify-backend: direct link, hf CLI and curl.
- Browser
- Download file 2.61 kB
-
https://huggingface.co/spaces/Nisha56/editify-backend/resolve/main/auth.py
- Command line
-
hf download hf://spaces/Nisha56/editify-backend/auth.py
-
curl -L -o auth.py https://huggingface.co/spaces/Nisha56/editify-backend/resolve/main/auth.py
2.61 kB
| from fastapi import APIRouter, Depends, HTTPException, status | |
| from fastapi.responses import JSONResponse | |
| from sqlalchemy.orm import Session | |
| from database import get_db | |
| from models import User | |
| from auth_utils import hash_password, verify_password, create_token, get_current_user | |
| router = APIRouter(prefix="/auth", tags=["auth"]) | |
| def signup(request: dict, db: Session = Depends(get_db)): | |
| email = request.get("email", "").strip().lower() | |
| password = request.get("password", "") | |
| name = request.get("name", "").strip() | |
| if not email or not password or not name: | |
| raise HTTPException(400, "Email, password and name are required") | |
| if len(password) < 6: | |
| raise HTTPException(400, "Password must be at least 6 characters") | |
| if db.query(User).filter(User.email == email).first(): | |
| raise HTTPException(400, "Email already registered") | |
| user = User( | |
| email = email, | |
| name = name, | |
| password_hash = hash_password(password), | |
| ) | |
| db.add(user) | |
| db.commit() | |
| db.refresh(user) | |
| token = create_token(user.id, user.email) | |
| return JSONResponse({ | |
| "token": token, | |
| "user": { | |
| "id": user.id, | |
| "email": user.email, | |
| "name": user.name, | |
| } | |
| }) | |
| def login(request: dict, db: Session = Depends(get_db)): | |
| email = request.get("email", "").strip().lower() | |
| password = request.get("password", "") | |
| if not email or not password: | |
| raise HTTPException(400, "Email and password are required") | |
| user = db.query(User).filter(User.email == email).first() | |
| if not user or not verify_password(password, user.password_hash): | |
| raise HTTPException(401, "Invalid email or password") | |
| token = create_token(user.id, user.email) | |
| return JSONResponse({ | |
| "token": token, | |
| "user": { | |
| "id": user.id, | |
| "email": user.email, | |
| "name": user.name, | |
| } | |
| }) | |
| def get_me( | |
| current_user: User = Depends(get_current_user), | |
| db: Session = Depends(get_db), | |
| ): | |
| from models import Project | |
| from sqlalchemy import func as sqlfunc | |
| project_count = db.query(sqlfunc.count(Project.id)).filter( | |
| Project.user_id == current_user.id | |
| ).scalar() | |
| return JSONResponse({ | |
| "id": current_user.id, | |
| "email": current_user.email, | |
| "name": current_user.name, | |
| "project_count": project_count, | |
| "joined": current_user.created_at.strftime("%B %Y"), | |
| }) |