142 lines
4.3 KiB
Python
142 lines
4.3 KiB
Python
"""
|
|
User 모듈 커스텀 예외 정의
|
|
|
|
인증 및 사용자 관련 에러를 처리하기 위한 예외 클래스들입니다.
|
|
"""
|
|
|
|
from fastapi import HTTPException, status
|
|
|
|
|
|
class AuthException(HTTPException):
|
|
"""인증 관련 기본 예외"""
|
|
|
|
def __init__(
|
|
self,
|
|
status_code: int,
|
|
code: str,
|
|
message: str,
|
|
):
|
|
super().__init__(
|
|
status_code=status_code,
|
|
detail={"code": code, "message": message},
|
|
)
|
|
|
|
|
|
# =============================================================================
|
|
# 카카오 OAuth 관련 예외
|
|
# =============================================================================
|
|
class InvalidAuthCodeError(AuthException):
|
|
"""유효하지 않은 인가 코드"""
|
|
|
|
def __init__(self, message: str = "유효하지 않은 인가 코드입니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
code="INVALID_CODE",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class KakaoAuthFailedError(AuthException):
|
|
"""카카오 인증 실패"""
|
|
|
|
def __init__(self, message: str = "카카오 인증에 실패했습니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
code="KAKAO_AUTH_FAILED",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class KakaoAPIError(AuthException):
|
|
"""카카오 API 호출 오류"""
|
|
|
|
def __init__(self, message: str = "카카오 API 호출 중 오류가 발생했습니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
code="KAKAO_API_ERROR",
|
|
message=message,
|
|
)
|
|
|
|
|
|
# =============================================================================
|
|
# JWT 토큰 관련 예외
|
|
# =============================================================================
|
|
class TokenExpiredError(AuthException):
|
|
"""토큰 만료"""
|
|
|
|
def __init__(self, message: str = "토큰이 만료되었습니다. 다시 로그인해주세요."):
|
|
super().__init__(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
code="TOKEN_EXPIRED",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class InvalidTokenError(AuthException):
|
|
"""유효하지 않은 토큰"""
|
|
|
|
def __init__(self, message: str = "유효하지 않은 토큰입니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
code="INVALID_TOKEN",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class TokenRevokedError(AuthException):
|
|
"""취소된 토큰"""
|
|
|
|
def __init__(self, message: str = "취소된 토큰입니다. 다시 로그인해주세요."):
|
|
super().__init__(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
code="TOKEN_REVOKED",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class MissingTokenError(AuthException):
|
|
"""토큰 누락"""
|
|
|
|
def __init__(self, message: str = "인증 토큰이 필요합니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
code="MISSING_TOKEN",
|
|
message=message,
|
|
)
|
|
|
|
|
|
# =============================================================================
|
|
# 사용자 관련 예외
|
|
# =============================================================================
|
|
class UserNotFoundError(AuthException):
|
|
"""사용자 없음"""
|
|
|
|
def __init__(self, message: str = "가입되지 않은 사용자 입니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
code="USER_NOT_FOUND",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class UserInactiveError(AuthException):
|
|
"""비활성화된 계정"""
|
|
|
|
def __init__(self, message: str = "활성화 상태가 아닌 사용자 입니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_403_FORBIDDEN,
|
|
code="USER_INACTIVE",
|
|
message=message,
|
|
)
|
|
|
|
|
|
class AdminRequiredError(AuthException):
|
|
"""관리자 권한 필요"""
|
|
|
|
def __init__(self, message: str = "관리자 권한이 필요합니다."):
|
|
super().__init__(
|
|
status_code=status.HTTP_403_FORBIDDEN,
|
|
code="ADMIN_REQUIRED",
|
|
message=message,
|
|
)
|