LinkDesk/backend/schemas/api_key.py

50 lines
1.2 KiB
Python

from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime
from models.api_key import APIKeyScope
class APIKeyCreate(BaseModel):
name: str
scopes: List[APIKeyScope]
expires_at: Optional[datetime] = None
user_id: Optional[int] = None # Only admins can specify this
class APIKeyResponse(BaseModel):
id: int
user_id: int
name: str
scopes: List[str]
is_active: bool
expires_at: Optional[datetime]
last_used_at: Optional[datetime]
created_at: datetime
user_email: Optional[str] = None # Include user email for admin view
class Config:
from_attributes = True
class APIKeyWithToken(BaseModel):
api_key: APIKeyResponse
token: str # The actual API key token (only returned on creation)
class APIKeyUpdate(BaseModel):
name: Optional[str] = None
scopes: Optional[List[APIKeyScope]] = None
is_active: Optional[bool] = None
expires_at: Optional[datetime] = None
class APIKeyUsageLog(BaseModel):
api_key_id: int
endpoint: str
method: str
timestamp: datetime
ip_address: Optional[str] = None
user_agent: Optional[str] = None
class Config:
from_attributes = True