diff --git a/src/iam/service.py b/src/iam/service.py index 056b39c..e3c8740 100644 --- a/src/iam/service.py +++ b/src/iam/service.py @@ -7,21 +7,19 @@ Exports: from typing import Annotated from datetime import datetime, timedelta, timezone +from fastapi import Request, Depends -from src.service.models import Service from src.database import db_dependency from src.exceptions import UnauthorizedException from src.utils import send_email, generate_jwt - -from src.iam.schemas import IAMCAoRRequest from src.iam.models import Group - -from fastapi import Request, Depends +from src.service.models import Service +from src.service.schemas import HasServiceName def valid_service_key( - db: db_dependency, request: Request, request_model: IAMCAoRRequest + db: db_dependency, request: Request, request_model: HasServiceName ) -> bool: rn = request_model.rn api_key = request.headers.get("X-API-Key", None) diff --git a/src/schemas.py b/src/schemas.py index cb2e742..30f4f90 100644 --- a/src/schemas.py +++ b/src/schemas.py @@ -14,13 +14,6 @@ class CustomBaseModel(BaseModel): pass -class ResourceName(CustomBaseModel): - service: str - organisation: str - resource: str - instance: Optional[str] = None - - ### Mixins ### class OrgIDMixin(CustomBaseModel): organisation_id: int = Field(gt=0) @@ -42,6 +35,10 @@ class UserIDMixin(CustomBaseModel): user_id: int = Field(gt=0) +class ServiceNameMixin(CustomBaseModel): + service: str + + class OrgSummary(CustomBaseModel): id: int name: str @@ -60,3 +57,9 @@ class UserSummary(CustomBaseModel): class ServiceSummary(CustomBaseModel): id: int name: str + + +class ResourceName(ServiceNameMixin): + organisation: str + resource: str + instance: Optional[str] = None diff --git a/src/service/schemas.py b/src/service/schemas.py index 71bb215..27d0483 100644 --- a/src/service/schemas.py +++ b/src/service/schemas.py @@ -6,9 +6,36 @@ Models follow the nomenclature of: - Models: "" ie "ServiceGetServiceResponse" """ -from pydantic import Field +from typing import Generic, TypeVar +from pydantic import Field, ConfigDict -from src.schemas import CustomBaseModel, ServiceIDMixin, ServiceSummary +from src.schemas import ( + CustomBaseModel, + ServiceIDMixin, + ServiceSummary, + ServiceNameMixin, +) + + +T = TypeVar("T", bound=ServiceNameMixin) + + +class HasServiceName(CustomBaseModel, Generic[T]): + rn: T + + +class PermissionResponseSchema(CustomBaseModel): + model_config = ConfigDict(from_attributes=True, extra="ignore") + + id: int + service_name: str + resource: str + action: str + + +class PermissionRequestSchema(CustomBaseModel): + resource: str + action: str class ServiceWithKeySchema(ServiceSummary):