forked from sr2/cloud-api
132 lines
2.6 KiB
Python
132 lines
2.6 KiB
Python
"""
|
|
Pydantic models for the IAM module
|
|
|
|
Models follow the nomenclature of:
|
|
- Sub-models: "<Resource><Opt:>Schema"
|
|
- Models: "<Module><Method><Resource><Opt:Resource><Direction>" ie "IAMGetGroupPermissionsResponse"
|
|
"""
|
|
|
|
from typing import Optional, Annotated
|
|
|
|
from pydantic import EmailStr, ConfigDict, Field
|
|
|
|
from src.schemas import (
|
|
CustomBaseModel,
|
|
ResourceName,
|
|
ServiceIDMixin,
|
|
OrgIDMixin,
|
|
UserIDMixin,
|
|
PermIDMixin,
|
|
GroupIDMixin,
|
|
GroupSummary,
|
|
OrgSummary,
|
|
UserSummary,
|
|
)
|
|
|
|
|
|
class UserSchema(CustomBaseModel):
|
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
|
|
|
id: int
|
|
first_name: str
|
|
last_name: str
|
|
email: EmailStr
|
|
|
|
|
|
class PermissionSchema(CustomBaseModel):
|
|
model_config = ConfigDict(from_attributes=True, extra="ignore")
|
|
|
|
id: int
|
|
service_name: str
|
|
resource: str
|
|
action: str
|
|
|
|
|
|
class GroupSchema(CustomBaseModel):
|
|
id: int
|
|
name: str
|
|
|
|
|
|
class IAMCAoRRequest(CustomBaseModel):
|
|
action: str
|
|
rn: ResourceName
|
|
|
|
|
|
class IAMGetGroupPermissionsResponse(CustomBaseModel):
|
|
organisation: OrgSummary
|
|
group: GroupSummary
|
|
permissions: list[PermissionSchema]
|
|
|
|
|
|
class IAMGetGroupUsersResponse(CustomBaseModel):
|
|
organisation: OrgSummary
|
|
group: GroupSummary
|
|
users: list[UserSummary]
|
|
|
|
|
|
class IAMPostGroupRequest(OrgIDMixin):
|
|
name: str = Field(min_length=3)
|
|
|
|
|
|
class IAMPostGroupResponse(CustomBaseModel):
|
|
group: GroupSchema
|
|
|
|
|
|
class IAMPutGroupPermissionRequest(GroupIDMixin, PermIDMixin, OrgIDMixin):
|
|
pass
|
|
|
|
|
|
class IAMPutGroupPermissionResponse(CustomBaseModel):
|
|
organisation: OrgSummary
|
|
group: GroupSummary
|
|
permissions: list[PermissionSchema]
|
|
|
|
|
|
class IAMPutGroupUserRequest(GroupIDMixin, UserIDMixin, OrgIDMixin):
|
|
pass
|
|
|
|
|
|
class IAMPutGroupUserResponse(CustomBaseModel):
|
|
group: GroupSchema
|
|
users: list[UserSchema]
|
|
|
|
|
|
class IAMDeleteGroupPermissionResponse(CustomBaseModel):
|
|
group: GroupSchema
|
|
permissions: list[PermissionSchema]
|
|
|
|
|
|
class IAMDeleteGroupUserResponse(CustomBaseModel):
|
|
group: GroupSchema
|
|
users: list[UserSchema]
|
|
|
|
|
|
class IAMGetPermissionsResponse(CustomBaseModel):
|
|
permissions: list[PermissionSchema]
|
|
|
|
|
|
class IAMPostPermissionRequest(ServiceIDMixin):
|
|
resource: str
|
|
action: str
|
|
|
|
|
|
class IAMPostPermissionResponse(CustomBaseModel):
|
|
permission: PermissionSchema
|
|
|
|
|
|
class IAMGetPermissionsSearchRequest(OrgIDMixin):
|
|
service_id: Annotated[int | None, Field(gt=0)] = None
|
|
resource: Optional[str] = None
|
|
action: Optional[str] = None
|
|
|
|
|
|
class IAMGetPermissionsSearchResponse(CustomBaseModel):
|
|
permissions: list[PermissionSchema]
|
|
|
|
|
|
class IAMPutGroupInvitationRequest(OrgIDMixin, GroupIDMixin):
|
|
user_email: EmailStr
|
|
|
|
|
|
class IAMPutGroupInvitationAcceptRequest(CustomBaseModel):
|
|
jwt: str
|