Skip to content

Commit 9d9218c

Browse files
fix: don't use group or platform mapping
1 parent f966774 commit 9d9218c

File tree

1 file changed

+64
-67
lines changed

1 file changed

+64
-67
lines changed

routers/admin.py

Lines changed: 64 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -93,22 +93,37 @@ def strip_reason(cls, value: str | None) -> str | None:
9393
return stripped or None
9494

9595

96-
def _resolve_platform(service_id: str) -> PlatformEnum | None:
97-
if service_id in PLATFORM_MAPPING:
98-
return PLATFORM_MAPPING[service_id]["enum"]
99-
for data in PLATFORM_MAPPING.values():
100-
if data["enum"].value == service_id:
101-
return data["enum"]
102-
return None
96+
def _get_platform_or_404(*, platform_id: str, db_session: Session) -> Platform:
97+
try:
98+
platform_enum = PlatformEnum(platform_id)
99+
except ValueError as exc:
100+
raise HTTPException(
101+
status_code=404,
102+
detail=f"Platform '{platform_id}' is not recognised",
103+
) from exc
103104

105+
platform = db_session.get(Platform, platform_enum)
106+
if platform is None:
107+
raise HTTPException(
108+
status_code=404,
109+
detail=f"Platform '{platform_id}' is not configured",
110+
)
111+
return platform
104112

105-
def _resolve_group(service_id: str) -> GroupEnum | None:
106-
if service_id in GROUP_MAPPING:
107-
return GROUP_MAPPING[service_id]["enum"]
108-
for data in GROUP_MAPPING.values():
109-
if data["enum"].value == service_id:
110-
return data["enum"]
111-
return None
113+
114+
def _get_group_or_404(*, group_identifier: str, db_session: Session) -> BiocommonsGroup:
115+
if group_identifier in GROUP_MAPPING:
116+
group_id = GROUP_MAPPING[group_identifier]["enum"].value
117+
else:
118+
group_id = group_identifier
119+
120+
group = db_session.get(BiocommonsGroup, group_id)
121+
if group is None:
122+
raise HTTPException(
123+
status_code=404,
124+
detail=f"Group '{group_identifier}' is not configured",
125+
)
126+
return group
112127

113128

114129
def _get_admin_db_user(*, user_id: str, db_session: Session) -> BiocommonsUser:
@@ -159,19 +174,12 @@ def _membership_response() -> dict[str, object]:
159174

160175

161176
def _assert_platform_admin_permissions(
162-
*, admin_user: SessionUser, platform: PlatformEnum, db_session: Session
177+
*, admin_user: SessionUser, platform: Platform
163178
) -> None:
164-
platform_record = db_session.get(Platform, platform)
165-
if platform_record is None:
166-
raise HTTPException(
167-
status_code=404,
168-
detail=f"Platform '{platform.value}' is not configured",
169-
)
170-
171-
allowed_roles = {role.name for role in platform_record.admin_roles}
179+
allowed_roles = {role.name for role in platform.admin_roles}
172180
if not allowed_roles:
173181
logger.warning(
174-
"Platform %s has no admin roles configured", platform_record.id.value
182+
"Platform %s has no admin roles configured", platform.id.value
175183
)
176184

177185
user_roles = set(admin_user.access_token.biocommons_roles or [])
@@ -183,19 +191,12 @@ def _assert_platform_admin_permissions(
183191

184192

185193
def _assert_group_admin_permissions(
186-
*, admin_user: SessionUser, group_id: str, db_session: Session
194+
*, admin_user: SessionUser, group: BiocommonsGroup
187195
) -> None:
188-
group_record = db_session.get(BiocommonsGroup, group_id)
189-
if group_record is None:
190-
raise HTTPException(
191-
status_code=404,
192-
detail=f"Group '{group_id}' is not configured",
193-
)
196+
if not group.admin_roles:
197+
logger.warning("Group %s has no admin roles configured", group.group_id)
194198

195-
if not group_record.admin_roles:
196-
logger.warning("Group %s has no admin roles configured", group_id)
197-
198-
if not group_record.user_is_admin(admin_user):
199+
if not group.user_is_admin(admin_user):
199200
raise HTTPException(
200201
status_code=403,
201202
detail="You do not have permission to manage this group.",
@@ -252,14 +253,14 @@ def _revoke_platform_membership(
252253
def _approve_group_membership(
253254
*,
254255
user_id: str,
255-
group_id: str,
256+
group: BiocommonsGroup,
256257
admin_record: BiocommonsUser,
257258
client: Auth0Client,
258259
db_session: Session,
259260
) -> None:
260261
membership = _get_group_membership_or_404(
261262
user_id=user_id,
262-
group_id=group_id,
263+
group_id=group.group_id,
263264
db_session=db_session,
264265
)
265266
membership.approval_status = ApprovalStatusEnum.APPROVED
@@ -269,20 +270,20 @@ def _approve_group_membership(
269270
membership.grant_auth0_role(auth0_client=client)
270271
membership.save(session=db_session, commit=True)
271272
db_session.refresh(membership)
272-
logger.info("Approved group %s for user %s", group_id, user_id)
273+
logger.info("Approved group %s for user %s", group.group_id, user_id)
273274

274275

275276
def _revoke_group_membership(
276277
*,
277278
user_id: str,
278-
group_id: str,
279+
group: BiocommonsGroup,
279280
reason: str | None,
280281
admin_record: BiocommonsUser,
281282
db_session: Session,
282283
) -> None:
283284
membership = _get_group_membership_or_404(
284285
user_id=user_id,
285-
group_id=group_id,
286+
group_id=group.group_id,
286287
db_session=db_session,
287288
)
288289
membership.approval_status = ApprovalStatusEnum.REVOKED
@@ -291,21 +292,21 @@ def _revoke_group_membership(
291292
membership.updated_by = admin_record
292293
membership.save(session=db_session, commit=True)
293294
db_session.refresh(membership)
294-
logger.info("Revoked group %s for user %s", group_id, user_id)
295+
logger.info("Revoked group %s for user %s", group.group_id, user_id)
295296

296297

297-
def _parse_platform_or_404(platform_id: str) -> PlatformEnum:
298-
platform = _resolve_platform(platform_id)
299-
if platform is None:
300-
raise HTTPException(status_code=404, detail=f"Platform '{platform_id}' not recognised")
301-
return platform
298+
def _parse_platform_or_404(
299+
platform_id: str,
300+
db_session: Session,
301+
) -> Platform:
302+
return _get_platform_or_404(platform_id=platform_id, db_session=db_session)
302303

303304

304-
def _parse_group_or_404(group_id: str) -> GroupEnum:
305-
group = _resolve_group(group_id)
306-
if group is None:
307-
raise HTTPException(status_code=404, detail=f"Group '{group_id}' not recognised")
308-
return group
305+
def _parse_group_or_404(
306+
group_id: str,
307+
db_session: Session,
308+
) -> BiocommonsGroup:
309+
return _get_group_or_404(group_identifier=group_id, db_session=db_session)
309310

310311

311312
@router.get("/filters")
@@ -513,19 +514,18 @@ def approve_platform_membership(user_id: Annotated[str, UserIdParam],
513514
client: Annotated[Auth0Client, Depends(get_auth0_client)],
514515
approving_user: Annotated[SessionUser, Depends(get_current_user)],
515516
db_session: Annotated[Session, Depends(get_db_session)]):
516-
platform = _parse_platform_or_404(platform_id)
517+
platform_record = _parse_platform_or_404(platform_id, db_session=db_session)
517518
_assert_platform_admin_permissions(
518519
admin_user=approving_user,
519-
platform=platform,
520-
db_session=db_session,
520+
platform=platform_record,
521521
)
522522
admin_record = _get_admin_db_user(
523523
user_id=approving_user.access_token.sub,
524524
db_session=db_session,
525525
)
526526
_approve_platform_membership(
527527
user_id=user_id,
528-
platform=platform,
528+
platform=platform_record.id,
529529
admin_record=admin_record,
530530
db_session=db_session,
531531
)
@@ -539,19 +539,18 @@ def revoke_platform_membership(user_id: Annotated[str, UserIdParam],
539539
client: Annotated[Auth0Client, Depends(get_auth0_client)],
540540
revoking_user: Annotated[SessionUser, Depends(get_current_user)],
541541
db_session: Annotated[Session, Depends(get_db_session)]):
542-
platform = _parse_platform_or_404(platform_id)
542+
platform_record = _parse_platform_or_404(platform_id, db_session=db_session)
543543
_assert_platform_admin_permissions(
544544
admin_user=revoking_user,
545-
platform=platform,
546-
db_session=db_session,
545+
platform=platform_record,
547546
)
548547
admin_record = _get_admin_db_user(
549548
user_id=revoking_user.access_token.sub,
550549
db_session=db_session,
551550
)
552551
_revoke_platform_membership(
553552
user_id=user_id,
554-
platform=platform,
553+
platform=platform_record.id,
555554
reason=payload.reason,
556555
admin_record=admin_record,
557556
db_session=db_session,
@@ -565,19 +564,18 @@ def approve_group_membership(user_id: Annotated[str, UserIdParam],
565564
client: Annotated[Auth0Client, Depends(get_auth0_client)],
566565
approving_user: Annotated[SessionUser, Depends(get_current_user)],
567566
db_session: Annotated[Session, Depends(get_db_session)]):
568-
group = _parse_group_or_404(group_id)
567+
group_record = _parse_group_or_404(group_id, db_session=db_session)
569568
_assert_group_admin_permissions(
570569
admin_user=approving_user,
571-
group_id=group.value,
572-
db_session=db_session,
570+
group=group_record,
573571
)
574572
admin_record = _get_admin_db_user(
575573
user_id=approving_user.access_token.sub,
576574
db_session=db_session,
577575
)
578576
_approve_group_membership(
579577
user_id=user_id,
580-
group_id=group.value,
578+
group=group_record,
581579
admin_record=admin_record,
582580
client=client,
583581
db_session=db_session,
@@ -592,19 +590,18 @@ def revoke_group_membership(user_id: Annotated[str, UserIdParam],
592590
client: Annotated[Auth0Client, Depends(get_auth0_client)],
593591
revoking_user: Annotated[SessionUser, Depends(get_current_user)],
594592
db_session: Annotated[Session, Depends(get_db_session)]):
595-
group = _parse_group_or_404(group_id)
593+
group_record = _parse_group_or_404(group_id, db_session=db_session)
596594
_assert_group_admin_permissions(
597595
admin_user=revoking_user,
598-
group_id=group.value,
599-
db_session=db_session,
596+
group=group_record,
600597
)
601598
admin_record = _get_admin_db_user(
602599
user_id=revoking_user.access_token.sub,
603600
db_session=db_session,
604601
)
605602
_revoke_group_membership(
606603
user_id=user_id,
607-
group_id=group.value,
604+
group=group_record,
608605
reason=payload.reason,
609606
admin_record=admin_record,
610607
db_session=db_session,

0 commit comments

Comments
 (0)