58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
from typing import List, Optional, Dict, Any
|
|
from pydantic import BaseModel, Field
|
|
from enum import Enum
|
|
|
|
|
|
class CapabilityTier(str, Enum):
|
|
ADMIN = "admin"
|
|
EDITOR = "editor"
|
|
VIEWER = "viewer"
|
|
|
|
|
|
class UserSession(BaseModel):
|
|
id: str
|
|
username: str
|
|
name: str
|
|
email: Optional[str] = None
|
|
auth_provider: str = "local" # "local" or "keycloak"
|
|
raw_roles: List[str] = Field(default_factory=list)
|
|
raw_groups: List[str] = Field(default_factory=list)
|
|
capability: str = "viewer" # "admin", "editor", "viewer"
|
|
can_edit: bool = False
|
|
can_deploy: bool = False
|
|
is_admin: bool = False
|
|
is_readonly: bool = True
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str
|
|
password: str
|
|
|
|
|
|
class SSOCallbackRequest(BaseModel):
|
|
code: str
|
|
redirect_uri: str
|
|
code_verifier: Optional[str] = None
|
|
|
|
|
|
class SSOTokenVerifyRequest(BaseModel):
|
|
access_token: str
|
|
|
|
|
|
class TokenResponse(BaseModel):
|
|
access_token: str
|
|
token_type: str = "Bearer"
|
|
expires_in: int = 86400
|
|
user: UserSession
|
|
|
|
|
|
class RBACSettingsSchema(BaseModel):
|
|
editor_roles: List[str] = Field(default_factory=list)
|
|
editor_groups: List[str] = Field(default_factory=list)
|
|
viewer_roles: List[str] = Field(default_factory=list)
|
|
viewer_groups: List[str] = Field(default_factory=list)
|
|
admin_roles: List[str] = Field(default_factory=list)
|
|
admin_groups: List[str] = Field(default_factory=list)
|
|
updated_at: Optional[str] = None
|
|
updated_by: Optional[str] = None
|