@@ -54,7 +54,8 @@ def set_defaults(validator, properties, instance, schema):
5454 for error in validate_properties (
5555 validator , properties , instance , schema ,
5656 ):
57- yield error
57+ # Difficult to unit test
58+ yield error # pragma: no cover
5859
5960 return validators .extend (
6061 validator_class , {"properties" : set_defaults },
@@ -76,8 +77,6 @@ def wrapper(func):
7677 @wraps (func )
7778 async def wrapped (* args ):
7879 request = args [- 1 ]
79- if not isinstance (request , web .Request ):
80- raise BeaconBadRequest (request , request .host , "invalid request" , "This does not seem a valid HTTP Request." )
8180 try :
8281 _ , obj = await parse_request_object (request )
8382 except Exception :
@@ -121,7 +120,21 @@ def token_scheme_check(token, scheme, obj, host):
121120 raise BeaconUnauthorised (obj , host , "invalid_token" , 'Invalid token scheme, Bearer required.' )
122121
123122 if token is None :
124- raise BeaconUnauthorised (obj , host , "invalid_token" , 'Token cannot be empty.' )
123+ # Might never happen
124+ raise BeaconUnauthorised (obj , host , "invalid_token" , 'Token cannot be empty.' ) # pragma: no cover
125+
126+
127+ def verify_aud_claim ():
128+ """Verify audience claim."""
129+ aud = []
130+ verify_aud = OAUTH2_CONFIG .verify_aud # Option to skip verification of `aud` claim
131+ if verify_aud :
132+ aud = os .environ .get ('JWT_AUD' , OAUTH2_CONFIG .audience ) # List of intended audiences of token
133+ # if verify_aud is set to True, we expect that a desired aud is then supplied.
134+ # However, if verify_aud=True and no aud is supplied, we use aud=[None] which will fail for
135+ # all tokens as a security measure. If aud=[], all tokens will pass (as is the default value).
136+ aud = aud .split (',' ) if aud is not None else [None ]
137+ return verify_aud , aud
125138
126139
127140def token_auth ():
@@ -132,8 +145,6 @@ def token_auth():
132145 """
133146 @web .middleware
134147 async def token_middleware (request , handler ):
135- if not isinstance (request , web .Request ):
136- raise BeaconBadRequest (request , request .host , "invalid request" , "This does not seem a valid HTTP Request." )
137148 if request .path in ['/query' ] and 'Authorization' in request .headers :
138149 _ , obj = await parse_request_object (request )
139150 try :
@@ -147,14 +158,7 @@ async def token_middleware(request, handler):
147158
148159 # Token decoding parameters
149160 key = await get_key () # JWK used to decode token with
150- aud = []
151- verify_aud = OAUTH2_CONFIG .verify_aud # Option to skip verification of `aud` claim
152- if verify_aud :
153- aud = os .environ .get ('JWT_AUD' , OAUTH2_CONFIG .audience ) # List of intended audiences of token
154- # if verify_aud is set to True, we expect that a desired aud is then supplied.
155- # However, if verify_aud=True and no aud is supplied, we use aud=[None] which will fail for
156- # all tokens as a security measure. If aud=[], all tokens will pass (as is the default value).
157- aud = aud .split (',' ) if aud is not None else [None ]
161+ verify_aud , aud = verify_aud_claim ()
158162 # Prepare JWTClaims validation
159163 # can be populated with claims that are required to be present in the payload of the token
160164 claims_options = {
@@ -195,14 +199,15 @@ async def token_middleware(request, handler):
195199 # currently if a token is valid that means request is authenticated
196200 "authenticated" : True }
197201 return await handler (request )
202+ # Testing the exceptions is done in integration tests
198203 except MissingClaimError as e :
199- raise BeaconUnauthorised (obj , request .host , "invalid_token" , f'Missing claim(s): { e } ' )
204+ raise BeaconUnauthorised (obj , request .host , "invalid_token" , f'Missing claim(s): { e } ' ) # pragma: no cover
200205 except ExpiredTokenError as e :
201- raise BeaconUnauthorised (obj , request .host , "invalid_token" , f'Expired signature: { e } ' )
206+ raise BeaconUnauthorised (obj , request .host , "invalid_token" , f'Expired signature: { e } ' ) # pragma: no cover
202207 except InvalidClaimError as e :
203- raise BeaconForbidden (obj , request .host , f'Token info not corresponding with claim: { e } ' )
208+ raise BeaconForbidden (obj , request .host , f'Token info not corresponding with claim: { e } ' ) # pragma: no cover
204209 except InvalidTokenError as e :
205- raise BeaconUnauthorised (obj , request .host , "invalid_token" , f'Invalid authorization token: { e } ' )
210+ raise BeaconUnauthorised (obj , request .host , "invalid_token" , f'Invalid authorization token: { e } ' ) # pragma: no cover
206211 else :
207212 request ["token" ] = {"bona_fide_status" : False ,
208213 "permissions" : None ,
0 commit comments