1414from fhir .resources .R4B .immunization import Immunization
1515from boto3 import client as boto3_client
1616
17- from authorization import Authorization , EndpointOperation , UnknownPermission
17+ from authorization import Authorization , UnknownPermission
1818from cache import Cache
1919from fhir_repository import ImmunizationRepository , create_table
2020from fhir_service import FhirService , UpdateOutcome , get_service_url
@@ -80,7 +80,7 @@ def __init__(
8080 def get_immunization_by_identifier (self , aws_event ) -> dict :
8181 try :
8282 if aws_event .get ("headers" ):
83- if response := self .authorize_request (EndpointOperation . SEARCH , aws_event ):
83+ if response := self .authorize_request (aws_event ):
8484 return response
8585 query_params = aws_event .get ("queryStringParameters" , {})
8686 else :
@@ -121,7 +121,7 @@ def get_immunization_by_identifier(self, aws_event) -> dict:
121121 return self .create_response (403 , unauthorized .to_operation_outcome ())
122122
123123 def get_immunization_by_id (self , aws_event ) -> dict :
124- if response := self .authorize_request (EndpointOperation . READ , aws_event ):
124+ if response := self .authorize_request (aws_event ):
125125 return response
126126
127127 imms_id = aws_event ["pathParameters" ]["id" ]
@@ -166,7 +166,7 @@ def get_immunization_by_id(self, aws_event) -> dict:
166166 def create_immunization (self , aws_event ):
167167 try :
168168 if aws_event .get ("headers" ):
169- if response := self .authorize_request (EndpointOperation . CREATE , aws_event ):
169+ if response := self .authorize_request (aws_event ):
170170 return response
171171 else :
172172 raise UnauthorizedError ()
@@ -210,7 +210,7 @@ def create_immunization(self, aws_event):
210210 def update_immunization (self , aws_event ):
211211 try :
212212 if aws_event .get ("headers" ):
213- if response := self .authorize_request (EndpointOperation . UPDATE , aws_event ):
213+ if response := self .authorize_request (aws_event ):
214214 return response
215215 imms_id = aws_event ["pathParameters" ]["id" ]
216216 else :
@@ -372,7 +372,7 @@ def update_immunization(self, aws_event):
372372 def delete_immunization (self , aws_event ):
373373 try :
374374 if aws_event .get ("headers" ):
375- if response := self .authorize_request (EndpointOperation . DELETE , aws_event ):
375+ if response := self .authorize_request (aws_event ):
376376 return response
377377 imms_id = aws_event ["pathParameters" ]["id" ]
378378 else :
@@ -403,7 +403,7 @@ def delete_immunization(self, aws_event):
403403 return self .create_response (403 , unauthorized .to_operation_outcome ())
404404
405405 def search_immunizations (self , aws_event : APIGatewayProxyEventV1 ) -> dict :
406- if response := self .authorize_request (EndpointOperation . SEARCH , aws_event ):
406+ if response := self .authorize_request (aws_event ):
407407 return response
408408
409409 try :
@@ -430,7 +430,9 @@ def search_immunizations(self, aws_event: APIGatewayProxyEventV1) -> dict:
430430 try :
431431 checker = VaccinePermissionChecker (imms_vax_type_perms )
432432 vax_type_perms = checker .expanded_permissions
433- vax_type_perm = self ._new_vaccine_request (search_params .immunization_targets , "search" , vax_type_perms )
433+ operation_code = VaccinePermissionChecker .mapped_operations .get ("search" )
434+ vax_type_perm = [ vaccine_type for vaccine_type in search_params .immunization_targets
435+ if f"{ vaccine_type .lower ()} .{ operation_code } " in vax_type_perms ]
434436 if not vax_type_perm :
435437 raise UnauthorizedVaxError
436438 except UnauthorizedVaxError as unauthorized :
@@ -541,19 +543,19 @@ def _create_bad_request(self, message):
541543 )
542544 return self .create_response (400 , error )
543545
544- def authorize_request (self , operation : EndpointOperation , aws_event : dict ) -> Optional [dict ]:
546+
547+ def authorize_request (self , aws_event : dict ) -> Optional [dict ]:
545548 try :
546- self .authorizer .authorize (operation , aws_event )
549+ self .authorizer .authorize (aws_event )
547550 except UnauthorizedError as e :
548551 return self .create_response (403 , e .to_operation_outcome ())
549552 except UnknownPermission :
550- # TODO: I think when AuthenticationType is not present, then we don't get below message. Double check again
551553 id_error = create_operation_outcome (
552- resource_id = str (uuid .uuid4 ()),
553- severity = Severity .error ,
554- code = Code .server_error ,
555- diagnostics = "application includes invalid authorization values" ,
556- )
554+ resource_id = str (uuid .uuid4 ()),
555+ severity = Severity .error ,
556+ code = Code .server_error ,
557+ diagnostics = "Application includes invalid authorization values" ,
558+ )
557559 return self .create_response (500 , id_error )
558560
559561 def fetch_identifier_system_and_element (self , event : dict ):
@@ -663,37 +665,6 @@ def create_response(status_code, body=None, headers=None):
663665 ** ({"body" : body } if body else {}),
664666 }
665667
666- @staticmethod
667- def _vaccine_permission (vaccine_type , operation ) -> set :
668-
669- operation = mappedOperation .mapped_operations .get (operation .lower ())
670- if not operation :
671- raise ValueError (f"Unsupported operation: { operation } " )
672-
673- vaccine_permission = set ()
674- if isinstance (vaccine_type , list ):
675- for x in vaccine_type :
676- vaccine_permission .add (str .lower (f"{ x } .{ operation } " ))
677- return vaccine_permission
678- else :
679- vaccine_permission .add (str .lower (f"{ vaccine_type } .{ operation } " ))
680- return vaccine_permission
681-
682- @staticmethod
683- def _new_vaccine_request (vaccine_type , operation , vaccine_type_permissions : None ) -> Optional [list ]:
684-
685- operation = VaccinePermissionChecker .mapped_operations .get (operation .lower ())
686- vaccine_permission = list ()
687- if isinstance (vaccine_type , list ):
688- for x in vaccine_type :
689- vaccs_prms = set ()
690- vaccs_prms .add (str .lower (f"{ x } .{ operation } " ))
691- if vaccs_prms .issubset (vaccine_type_permissions ):
692- vaccine_permission .append (x )
693- return vaccine_permission
694- else :
695- return vaccine_permission
696-
697668 @staticmethod
698669 def _identify_supplier_system (aws_event ):
699670 supplier_system = aws_event ["headers" ]["SupplierSystem" ]
0 commit comments