1
1
import contextlib
2
2
import json
3
3
import uuid
4
+ from collections .abc import Mapping
4
5
from enum import Enum
5
- from typing import Any , Dict , List , Mapping , Optional , Tuple , TypedDict , Union
6
+ from typing import Any , Optional , TypedDict , Union
6
7
from urllib .parse import urlencode , urlsplit , urlunsplit
7
8
8
9
import httpx
@@ -87,11 +88,11 @@ class FiefAccessTokenInfo(TypedDict):
87
88
88
89
id : uuid .UUID
89
90
"""ID of the user."""
90
- scope : List [str ]
91
+ scope : list [str ]
91
92
"""List of granted scopes for this access token."""
92
93
acr : FiefACR
93
94
"""Level of Authentication Context class Reference."""
94
- permissions : List [str ]
95
+ permissions : list [str ]
95
96
"""List of [granted permissions](https://docs.fief.dev/getting-started/access-control/) for this user."""
96
97
access_token : str
97
98
"""Access token you can use to call the Fief API."""
@@ -128,7 +129,7 @@ class FiefUserInfo(TypedDict):
128
129
"""
129
130
ID of the [tenant](https://docs.fief.dev/getting-started/tenants/) associated to the user.
130
131
"""
131
- fields : Dict [str , Any ]
132
+ fields : dict [str , Any ]
132
133
"""
133
134
[User fields](https://docs.fief.dev/getting-started/user-fields/) values for this user, indexed by their slug.
134
135
"""
@@ -192,7 +193,7 @@ class BaseFief:
192
193
encryption_key : Optional [jwk .JWK ] = None
193
194
""""""
194
195
195
- _openid_configuration : Optional [Dict [str , Any ]] = None
196
+ _openid_configuration : Optional [dict [str , Any ]] = None
196
197
_jwks : Optional [jwk .JWKSet ] = None
197
198
198
199
_verify : VerifyTypes
@@ -236,7 +237,7 @@ def __init__(
236
237
237
238
def _get_endpoint_url (
238
239
self ,
239
- openid_configuration : Dict [str , Any ],
240
+ openid_configuration : dict [str , Any ],
240
241
field : str ,
241
242
* ,
242
243
absolute : bool = False ,
@@ -261,11 +262,11 @@ def _get_endpoint_url(
261
262
262
263
def _auth_url (
263
264
self ,
264
- openid_configuration : Dict [str , Any ],
265
+ openid_configuration : dict [str , Any ],
265
266
redirect_uri : str ,
266
267
* ,
267
268
state : Optional [str ] = None ,
268
- scope : Optional [List [str ]] = None ,
269
+ scope : Optional [list [str ]] = None ,
269
270
code_challenge : Optional [str ] = None ,
270
271
code_challenge_method : Optional [str ] = None ,
271
272
lang : Optional [str ] = None ,
@@ -303,9 +304,9 @@ def _validate_access_token(
303
304
access_token : str ,
304
305
jwks : jwk .JWKSet ,
305
306
* ,
306
- required_scope : Optional [List [str ]] = None ,
307
+ required_scope : Optional [list [str ]] = None ,
307
308
required_acr : Optional [FiefACR ] = None ,
308
- required_permissions : Optional [List [str ]] = None ,
309
+ required_permissions : Optional [list [str ]] = None ,
309
310
) -> FiefAccessTokenInfo :
310
311
try :
311
312
decoded_token = jwt .JWT (jwt = access_token , algs = ["RS256" ], key = jwks )
@@ -325,7 +326,7 @@ def _validate_access_token(
325
326
if acr < required_acr :
326
327
raise FiefAccessTokenACRTooLow ()
327
328
328
- permissions : List [str ] = claims ["permissions" ]
329
+ permissions : list [str ] = claims ["permissions" ]
329
330
if required_permissions is not None :
330
331
for required_permission in required_permissions :
331
332
if required_permission not in permissions :
@@ -406,7 +407,7 @@ def _get_auth_refresh_token_request(
406
407
* ,
407
408
endpoint : str ,
408
409
refresh_token : str ,
409
- scope : Optional [List [str ]] = None ,
410
+ scope : Optional [list [str ]] = None ,
410
411
) -> httpx .Request :
411
412
data = {
412
413
"client_id" : self .client_id ,
@@ -433,7 +434,7 @@ def _get_update_profile_request(
433
434
* ,
434
435
endpoint : str ,
435
436
access_token : str ,
436
- data : Dict [str , Any ],
437
+ data : dict [str , Any ],
437
438
) -> httpx .Request :
438
439
return client .build_request (
439
440
"PATCH" ,
@@ -521,7 +522,7 @@ def auth_url(
521
522
redirect_uri : str ,
522
523
* ,
523
524
state : Optional [str ] = None ,
524
- scope : Optional [List [str ]] = None ,
525
+ scope : Optional [list [str ]] = None ,
525
526
code_challenge : Optional [str ] = None ,
526
527
code_challenge_method : Optional [str ] = None ,
527
528
lang : Optional [str ] = None ,
@@ -561,7 +562,7 @@ def auth_url(
561
562
562
563
def auth_callback (
563
564
self , code : str , redirect_uri : str , * , code_verifier : Optional [str ] = None
564
- ) -> Tuple [FiefTokenResponse , FiefUserInfo ]:
565
+ ) -> tuple [FiefTokenResponse , FiefUserInfo ]:
565
566
"""
566
567
Return a `FiefTokenResponse` and `FiefUserInfo` in exchange of an authorization code.
567
568
@@ -589,8 +590,8 @@ def auth_callback(
589
590
return token_response , userinfo
590
591
591
592
def auth_refresh_token (
592
- self , refresh_token : str , * , scope : Optional [List [str ]] = None
593
- ) -> Tuple [FiefTokenResponse , FiefUserInfo ]:
593
+ self , refresh_token : str , * , scope : Optional [list [str ]] = None
594
+ ) -> tuple [FiefTokenResponse , FiefUserInfo ]:
594
595
"""
595
596
Return fresh `FiefTokenResponse` and `FiefUserInfo` in exchange of a refresh token
596
597
@@ -632,9 +633,9 @@ def validate_access_token(
632
633
self ,
633
634
access_token : str ,
634
635
* ,
635
- required_scope : Optional [List [str ]] = None ,
636
+ required_scope : Optional [list [str ]] = None ,
636
637
required_acr : Optional [FiefACR ] = None ,
637
- required_permissions : Optional [List [str ]] = None ,
638
+ required_permissions : Optional [list [str ]] = None ,
638
639
) -> FiefAccessTokenInfo :
639
640
"""
640
641
Check if an access token is valid and optionally that it has a required list of scopes,
@@ -726,7 +727,7 @@ def userinfo(self, access_token: str) -> FiefUserInfo:
726
727
727
728
return response .json ()
728
729
729
- def update_profile (self , access_token : str , data : Dict [str , Any ]) -> FiefUserInfo :
730
+ def update_profile (self , access_token : str , data : dict [str , Any ]) -> FiefUserInfo :
730
731
"""
731
732
Update user information with the Fief API using a valid access token.
732
733
@@ -877,7 +878,7 @@ def _get_httpx_client(self):
877
878
) as client :
878
879
yield client
879
880
880
- def _get_openid_configuration (self ) -> Dict [str , Any ]:
881
+ def _get_openid_configuration (self ) -> dict [str , Any ]:
881
882
if self ._openid_configuration is not None :
882
883
return self ._openid_configuration
883
884
@@ -948,7 +949,7 @@ async def auth_url(
948
949
redirect_uri : str ,
949
950
* ,
950
951
state : Optional [str ] = None ,
951
- scope : Optional [List [str ]] = None ,
952
+ scope : Optional [list [str ]] = None ,
952
953
code_challenge : Optional [str ] = None ,
953
954
code_challenge_method : Optional [str ] = None ,
954
955
lang : Optional [str ] = None ,
@@ -988,7 +989,7 @@ async def auth_url(
988
989
989
990
async def auth_callback (
990
991
self , code : str , redirect_uri : str , * , code_verifier : Optional [str ] = None
991
- ) -> Tuple [FiefTokenResponse , FiefUserInfo ]:
992
+ ) -> tuple [FiefTokenResponse , FiefUserInfo ]:
992
993
"""
993
994
Return a `FiefTokenResponse` and `FiefUserInfo` in exchange of an authorization code.
994
995
@@ -1016,8 +1017,8 @@ async def auth_callback(
1016
1017
return token_response , userinfo
1017
1018
1018
1019
async def auth_refresh_token (
1019
- self , refresh_token : str , * , scope : Optional [List [str ]] = None
1020
- ) -> Tuple [FiefTokenResponse , FiefUserInfo ]:
1020
+ self , refresh_token : str , * , scope : Optional [list [str ]] = None
1021
+ ) -> tuple [FiefTokenResponse , FiefUserInfo ]:
1021
1022
"""
1022
1023
Return fresh `FiefTokenResponse` and `FiefUserInfo` in exchange of a refresh token
1023
1024
@@ -1060,9 +1061,9 @@ async def validate_access_token(
1060
1061
self ,
1061
1062
access_token : str ,
1062
1063
* ,
1063
- required_scope : Optional [List [str ]] = None ,
1064
+ required_scope : Optional [list [str ]] = None ,
1064
1065
required_acr : Optional [FiefACR ] = None ,
1065
- required_permissions : Optional [List [str ]] = None ,
1066
+ required_permissions : Optional [list [str ]] = None ,
1066
1067
) -> FiefAccessTokenInfo :
1067
1068
"""
1068
1069
Check if an access token is valid and optionally that it has a required list of scopes,
@@ -1155,7 +1156,7 @@ async def userinfo(self, access_token: str) -> FiefUserInfo:
1155
1156
return response .json ()
1156
1157
1157
1158
async def update_profile (
1158
- self , access_token : str , data : Dict [str , Any ]
1159
+ self , access_token : str , data : dict [str , Any ]
1159
1160
) -> FiefUserInfo :
1160
1161
"""
1161
1162
Update user information with the Fief API using a valid access token.
@@ -1309,7 +1310,7 @@ async def _get_httpx_client(self):
1309
1310
) as client :
1310
1311
yield client
1311
1312
1312
- async def _get_openid_configuration (self ) -> Dict [str , Any ]:
1313
+ async def _get_openid_configuration (self ) -> dict [str , Any ]:
1313
1314
if self ._openid_configuration is not None :
1314
1315
return self ._openid_configuration
1315
1316
0 commit comments