@@ -41,7 +41,7 @@ def get_json(url, method='GET', *args, **kwargs) -> httpx.Response:
41
41
42
42
43
43
class OAuth2Core :
44
- """Base class (mixin) for all SSO providers """
44
+ """OAuth2 flow handler of a certain provider. """
45
45
46
46
client_id : str = None
47
47
client_secret : str = None
@@ -72,17 +72,14 @@ def oauth_client(self) -> WebApplicationClient:
72
72
def get_redirect_uri (self , request : Request ) -> str :
73
73
return urljoin (str (request .base_url ), "/oauth2/%s/token" % self .provider )
74
74
75
- async def get_login_url (self , request : Request ) -> Any :
75
+ async def login_redirect (self , request : Request ) -> RedirectResponse :
76
76
redirect_uri = self .get_redirect_uri (request )
77
77
state = "" .join ([random .choice (string .ascii_letters ) for _ in range (32 )])
78
- return self .oauth_client .prepare_request_uri (
78
+ return RedirectResponse ( str ( self .oauth_client .prepare_request_uri (
79
79
self .authorization_endpoint , redirect_uri = redirect_uri , state = state , scope = self .scope
80
- )
81
-
82
- async def login_redirect (self , request : Request ) -> RedirectResponse :
83
- return RedirectResponse (await self .get_login_url (request ), 303 )
80
+ )), 303 )
84
81
85
- async def get_token_data (self , request : Request ) -> Optional [ Dict [ str , Any ]] :
82
+ async def token_redirect (self , request : Request ) -> RedirectResponse :
86
83
if not request .query_params .get ("code" ):
87
84
raise OAuth2LoginError (400 , "'code' parameter was not found in callback request" )
88
85
if not request .query_params .get ("state" ):
@@ -111,11 +108,7 @@ async def get_token_data(self, request: Request) -> Optional[Dict[str, Any]]:
111
108
token = self .oauth_client .parse_request_body_response (json .dumps (response .json ()))
112
109
data = self .standardize (self .backend .user_data (token .get ("access_token" )))
113
110
114
- return {** data , "scope" : self .scope }
115
-
116
- async def token_redirect (self , request : Request ) -> RedirectResponse :
117
- token_data = await self .get_token_data (request )
118
- access_token = request .auth .jwt_create (token_data )
111
+ access_token = request .auth .jwt_create ({** data , "scope" : self .scope })
119
112
response = RedirectResponse (self .redirect_uri or request .base_url )
120
113
response .set_cookie (
121
114
"Authorization" ,
0 commit comments