Initial commit - cleaned repository
This commit is contained in:
142
services/oauth/backend/database.py
Normal file
142
services/oauth/backend/database.py
Normal file
@ -0,0 +1,142 @@
|
||||
from motor.motor_asyncio import AsyncIOMotorClient
|
||||
from beanie import init_beanie
|
||||
import os
|
||||
from models import OAuthApplication, AuthorizationCode, AccessToken, OAuthScope, UserConsent
|
||||
|
||||
async def init_db():
|
||||
client = AsyncIOMotorClient(os.getenv("MONGODB_URL", "mongodb://mongodb:27017"))
|
||||
database = client[os.getenv("OAUTH_DB_NAME", "oauth_db")]
|
||||
|
||||
await init_beanie(
|
||||
database=database,
|
||||
document_models=[
|
||||
OAuthApplication,
|
||||
AuthorizationCode,
|
||||
AccessToken,
|
||||
OAuthScope,
|
||||
UserConsent
|
||||
]
|
||||
)
|
||||
|
||||
# 기본 스코프 생성
|
||||
await create_default_scopes()
|
||||
|
||||
async def create_default_scopes():
|
||||
"""기본 OAuth 스코프 생성"""
|
||||
default_scopes = [
|
||||
# 기본 인증 스코프
|
||||
{
|
||||
"name": "openid",
|
||||
"display_name": "OpenID Connect",
|
||||
"description": "기본 사용자 인증 정보",
|
||||
"is_default": True,
|
||||
"requires_approval": False
|
||||
},
|
||||
{
|
||||
"name": "profile",
|
||||
"display_name": "프로필 정보",
|
||||
"description": "이름, 프로필 이미지, 기본 정보 접근",
|
||||
"is_default": True,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "email",
|
||||
"display_name": "이메일 주소",
|
||||
"description": "이메일 주소 및 인증 상태 확인",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "picture",
|
||||
"display_name": "프로필 사진",
|
||||
"description": "프로필 사진 및 썸네일 접근",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
|
||||
# 사용자 데이터 접근 스코프
|
||||
{
|
||||
"name": "user:read",
|
||||
"display_name": "사용자 정보 읽기",
|
||||
"description": "사용자 프로필 및 설정 읽기",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "user:write",
|
||||
"display_name": "사용자 정보 수정",
|
||||
"description": "사용자 프로필 및 설정 수정",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
|
||||
# 애플리케이션 관리 스코프
|
||||
{
|
||||
"name": "app:read",
|
||||
"display_name": "애플리케이션 정보 읽기",
|
||||
"description": "OAuth 애플리케이션 정보 조회",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "app:write",
|
||||
"display_name": "애플리케이션 관리",
|
||||
"description": "OAuth 애플리케이션 생성 및 수정",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
|
||||
# 조직/팀 관련 스코프
|
||||
{
|
||||
"name": "org:read",
|
||||
"display_name": "조직 정보 읽기",
|
||||
"description": "소속 조직 및 팀 정보 조회",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "org:write",
|
||||
"display_name": "조직 관리",
|
||||
"description": "조직 설정 및 멤버 관리",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
|
||||
# API 접근 스코프
|
||||
{
|
||||
"name": "api:read",
|
||||
"display_name": "API 데이터 읽기",
|
||||
"description": "API를 통한 데이터 조회",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "api:write",
|
||||
"display_name": "API 데이터 쓰기",
|
||||
"description": "API를 통한 데이터 생성/수정/삭제",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
|
||||
# 특수 스코프
|
||||
{
|
||||
"name": "offline_access",
|
||||
"display_name": "오프라인 액세스",
|
||||
"description": "리프레시 토큰 발급 (장기 액세스)",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
},
|
||||
{
|
||||
"name": "admin",
|
||||
"display_name": "관리자 권한",
|
||||
"description": "전체 시스템 관리 권한",
|
||||
"is_default": False,
|
||||
"requires_approval": True
|
||||
}
|
||||
]
|
||||
|
||||
for scope_data in default_scopes:
|
||||
existing = await OAuthScope.find_one(OAuthScope.name == scope_data["name"])
|
||||
if not existing:
|
||||
scope = OAuthScope(**scope_data)
|
||||
await scope.create()
|
||||
Reference in New Issue
Block a user