33from typing import Dict , Any
44
55from fastapi import APIRouter , Depends , HTTPException
6+ from starlette .requests import Request
67from starlette .responses import JSONResponse , Response
78
89from app import container
910from app .models .requests import ExchangeRequest , RidExchangeRequest , RidReceiveRequest
1011from app .personal_id import PersonalId
11- from app .rid import ALLOWED_BY_RID_USAGE , REQUIRED_MIN_USAGE , USAGE_RANK
12+ from app .rid import ALLOWED_BY_RID_USAGE , REQUIRED_MIN_USAGE , USAGE_RANK , RidUsage
1213from app .services .key_resolver import KeyResolver
14+ from app .services .mtls_service import MtlsService
1315from app .services .oprf .jwe_token import BlindJwe
1416from app .services .org_service import OrgService
1517from app .services .pseudonym_service import PseudonymService , PseudonymType
@@ -181,9 +183,11 @@ def exchange_rid(
181183@router .post ("/exchange/pseudonym" , summary = "Exchange pseudonym" )
182184def exchange_pseudonym (
183185 req : ExchangeRequest ,
186+ request : Request ,
184187 key_resolver : KeyResolver = Depends (container .get_key_resolver ),
185188 pseudonym_service : PseudonymService = Depends (container .get_pseudonym_service ),
186189 org_service : OrgService = Depends (container .get_org_service ),
190+ mtls_service : MtlsService = Depends (container .get_mtls_service ),
187191) -> Response :
188192 if not req .recipientOrganization .startswith ("ura:" ):
189193 raise InvalidURA (req .recipientOrganization )
@@ -201,6 +205,13 @@ def exchange_pseudonym(
201205 )
202206 subject = "pseudonym:irreversible:" + res
203207 elif req .pseudonymType == PseudonymType .Reversible :
208+ source_org = mtls_service .get_org_from_request (request )
209+ if source_org .max_rid_usage == RidUsage .IrreversiblePseudonym :
210+ raise HTTPException (
211+ status_code = 400 ,
212+ detail = "Source organization is not allowed to exchange reversible pseudonyms." ,
213+ )
214+
204215 res = pseudonym_service .exchange_reversible_pseudonym (
205216 personal_id = req .personalId ,
206217 recipient_organization = recipient_organization ,
0 commit comments