Spaces:
Configuration error
Configuration error
| """ | |
| Authentication dependencies for Analytics Microservice. | |
| Validates JWT tokens issued by the Auth microservice. | |
| """ | |
| from typing import Optional | |
| from fastapi import Depends, HTTPException, status | |
| from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials | |
| from jose import JWTError, jwt | |
| from pydantic import BaseModel | |
| from app.core.config import settings | |
| security = HTTPBearer() | |
| class TokenUser(BaseModel): | |
| user_id: str | |
| username: str | |
| role_id: str | |
| merchant_id: str | |
| merchant_type: Optional[str] = None | |
| metadata: Optional[dict] = None | |
| def has_role(self, *roles: str) -> bool: | |
| return self.role_id in roles | |
| def is_admin(self) -> bool: | |
| return "admin" in self.role_id.lower() | |
| def is_super_admin(self) -> bool: | |
| return "super_admin" in self.role_id.lower() | |
| async def get_current_user( | |
| credentials: HTTPAuthorizationCredentials = Depends(security), | |
| ) -> TokenUser: | |
| credentials_exception = HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail="Could not validate credentials", | |
| headers={"WWW-Authenticate": "Bearer"}, | |
| ) | |
| try: | |
| payload = jwt.decode( | |
| credentials.credentials, | |
| settings.SECRET_KEY, | |
| algorithms=[settings.ALGORITHM], | |
| ) | |
| user_id: str = payload.get("user_id") or payload.get("sub") | |
| if not user_id: | |
| raise credentials_exception | |
| return TokenUser( | |
| user_id=user_id, | |
| username=payload.get("username", ""), | |
| role_id=payload.get("role_id", ""), | |
| merchant_id=payload.get("merchant_id", ""), | |
| merchant_type=payload.get("merchant_type"), | |
| metadata=payload.get("metadata"), | |
| ) | |
| except JWTError: | |
| raise credentials_exception | |