jebin2's picture
refactor
bcc8074
"""
Auth Service - Authentication layer for API Gateway
Provides plug-and-play authentication with:
- Google OAuth integration
- JWT token management
- Request middleware for auth validation
- URL-based route configuration
Usage:
# In app.py startup
from services.auth_service import register_auth_service
register_auth_service(
required_urls=["/api/*", "/admin/*"],
public_urls=["/", "/health", "/auth/*"],
jwt_secret=os.getenv("JWT_SECRET"),
google_client_id=os.getenv("GOOGLE_CLIENT_ID")
)
# In routers
from fastapi import Request
@router.get("/protected")
async def protected_route(request: Request):
user = request.state.user # Populated by AuthMiddleware
return {"user_id": user.id}
"""
from services.auth_service.config import AuthServiceConfig
from services.auth_service.middleware import AuthMiddleware
from services.auth_service.google_provider import (
GoogleAuthService,
GoogleUserInfo,
verify_google_token,
GoogleAuthError,
InvalidTokenError as GoogleInvalidTokenError,
)
from services.auth_service.jwt_provider import (
JWTService,
TokenPayload,
create_access_token,
verify_access_token,
JWTError,
TokenExpiredError,
InvalidTokenError,
)
def register_auth_service(
required_urls: list = None,
optional_urls: list = None,
public_urls: list = None,
jwt_secret: str = None,
jwt_algorithm: str = "HS256",
jwt_expiry_hours: int = 24,
google_client_id: str = None,
admin_emails: list = None,
) -> None:
"""
Register the auth service with application configuration.
Args:
required_urls: URLs that REQUIRE authentication
optional_urls: URLs where authentication is optional
public_urls: URLs that don't need authentication
jwt_secret: Secret key for JWT signing
jwt_algorithm: JWT algorithm (default: HS256)
jwt_expiry_hours: Token expiry in hours (default: 24)
google_client_id: Google OAuth Client ID
admin_emails: List of admin email addresses
"""
AuthServiceConfig.register(
required_urls=required_urls or [],
optional_urls=optional_urls or [],
public_urls=public_urls or [],
jwt_secret=jwt_secret,
jwt_algorithm=jwt_algorithm,
jwt_expiry_hours=jwt_expiry_hours,
google_client_id=google_client_id,
admin_emails=admin_emails or [],
)
__all__ = [
# Registration
'register_auth_service',
'AuthServiceConfig',
'AuthMiddleware',
# Google OAuth
'GoogleAuthService',
'GoogleUserInfo',
'verify_google_token',
'GoogleAuthError',
'GoogleInvalidTokenError',
# JWT
'JWTService',
'TokenPayload',
'create_access_token',
'verify_access_token',
'JWTError',
'TokenExpiredError',
'InvalidTokenError',
]