- itsm/ -> workspace/guardia-itsm/ - manager/ -> workspace/guardia-manager/ - app/ -> workspace/guardia-messenger/ - manual/ -> workspace/guardia-docs/ workspace/zioinfo-web/ unchanged. git mv preserves full commit history. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
22 lines
913 B
Python
22 lines
913 B
Python
import os
|
|
from fastapi import Depends, HTTPException
|
|
from fastapi.security import OAuth2PasswordBearer
|
|
from jose import JWTError, jwt
|
|
|
|
SECRET = os.environ.get("GUARDIA_JWT_SECRET", "guardia-jwt-secret-2026-change-me!")
|
|
ALGORITHM = "HS256"
|
|
oauth2 = OAuth2PasswordBearer(tokenUrl="/guardia-api/api/auth/login", auto_error=False)
|
|
|
|
async def verify_token(token: str = Depends(oauth2)) -> dict:
|
|
if not token:
|
|
raise HTTPException(status_code=401, detail="인증이 필요합니다.")
|
|
try:
|
|
return jwt.decode(token, SECRET, algorithms=[ALGORITHM])
|
|
except JWTError:
|
|
raise HTTPException(status_code=401, detail="유효하지 않은 토큰입니다.")
|
|
|
|
async def require_admin(payload: dict = Depends(verify_token)) -> dict:
|
|
if payload.get("role") not in ("admin",):
|
|
raise HTTPException(status_code=403, detail="관리자 권한이 필요합니다.")
|
|
return payload
|