Files
marianesaldana 80dbd947e5 Initial commit
2026-05-23 08:59:34 -06:00

77 lines
2.3 KiB
Python

from datetime import datetime, timedelta
from typing import Optional
from jose import JWTError, jwt
from passlib.context import CryptContext
from sqlalchemy.orm import Session
from ..models.user import User
from ..config import settings
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def hash_password(password: str) -> str:
return pwd_context.hash(password)
def verify_password(plain: str, hashed: str) -> bool:
return pwd_context.verify(plain, hashed)
def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -> str:
to_encode = data.copy()
expire = datetime.utcnow() + (expires_delta or timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES))
to_encode["exp"] = expire
return jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
def decode_token(token: str) -> Optional[dict]:
try:
return jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])
except JWTError:
return None
def get_user_by_email(db: Session, email: str) -> Optional[User]:
return db.query(User).filter(User.email == email).first()
def get_user_by_id(db: Session, user_id: int) -> Optional[User]:
return db.query(User).filter(User.id == user_id).first()
def create_user(db: Session, full_name: str, email: Optional[str], phone: Optional[str], password: str) -> User:
user = User(
full_name=full_name,
email=email,
phone=phone,
hashed_password=hash_password(password),
)
db.add(user)
db.commit()
db.refresh(user)
return user
def get_or_create_oauth_user(db: Session, provider: str, oauth_id: str, email: Optional[str], full_name: Optional[str]) -> User:
user = db.query(User).filter(User.oauth_provider == provider, User.oauth_id == oauth_id).first()
if user:
return user
if email:
user = db.query(User).filter(User.email == email).first()
if user:
user.oauth_provider = provider
user.oauth_id = oauth_id
db.commit()
db.refresh(user)
return user
user = User(
full_name=full_name or "Usuario",
email=email,
oauth_provider=provider,
oauth_id=oauth_id,
)
db.add(user)
db.commit()
db.refresh(user)
return user