-
Notifications
You must be signed in to change notification settings - Fork 0
/
views.py
49 lines (37 loc) · 1.52 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# -*- coding: utf-8 -*-
import requests
from allauth.socialaccount import app_settings
# from allauth.socialaccount.providers.keycloak.provider import KeycloakProvider
from allauth.socialaccount.providers.oauth2.views import (
OAuth2Adapter,
OAuth2CallbackView,
OAuth2LoginView,
)
from .provider import KeycloakProvider
class KeycloakOAuth2Adapter(OAuth2Adapter):
provider_id = KeycloakProvider.id
supports_state = True
settings = app_settings.PROVIDERS.get(provider_id, {})
provider_base_url = settings.get("KEYCLOAK_URL")
access_token_url = '{0}/protocol/openid-connect/token'.format(provider_base_url) # noqa
authorize_url = '{0}/protocol/openid-connect/auth'.format(provider_base_url) # noqa
profile_url = '{0}/protocol/openid-connect/userinfo'.format(provider_base_url) # noqa
def complete_login(self, request, app, token, **kwargs):
""""""
response = requests.post(self.profile_url, headers={
'Authorization': 'Bearer ' + str(token)
})
response.raise_for_status()
extra_data = response.json()
extra_data = {
'user_id': extra_data['sub'],
'id': extra_data['sub'],
'name': extra_data['name'],
'email': extra_data['email']
}
return self.get_provider().sociallogin_from_response(
request,
extra_data
)
oauth2_login = OAuth2LoginView.adapter_view(KeycloakOAuth2Adapter)
oauth2_callback = OAuth2CallbackView.adapter_view(KeycloakOAuth2Adapter)