Files
Iliyan Angelov c67067a2a4 Mail
2025-09-14 23:24:25 +03:00

60 lines
1.5 KiB
Python

import requests
from django.conf import settings
from allauth.socialaccount.providers.oauth2.views import (
OAuth2Adapter,
OAuth2CallbackView,
OAuth2LoginView,
)
from .provider import DwollaProvider
ENVIRONMENTS = {
"production": {
"auth_url": "https://www.dwolla.com/oauth/v2/authenticate",
"token_url": "https://www.dwolla.com/oauth/v2/token",
},
"sandbox": {
"auth_url": "https://uat.dwolla.com/oauth/v2/authenticate",
"token_url": "https://uat.dwolla.com/oauth/v2/token",
},
}
ENV = (
getattr(settings, "SOCIALACCOUNT_PROVIDERS", {})
.get("dwolla", {})
.get("ENVIRONMENT", "production")
)
AUTH_URL = ENVIRONMENTS[ENV]["auth_url"]
TOKEN_URL = ENVIRONMENTS[ENV]["token_url"]
class DwollaOAuth2Adapter(OAuth2Adapter):
"""Dwolla Views Adapter"""
scope_delimiter = "|"
provider_id = DwollaProvider.id
access_token_url = TOKEN_URL
authorize_url = AUTH_URL
def complete_login(self, request, app, token, response, **kwargs):
resp = requests.get(
response["_links"]["account"]["href"],
headers={
"authorization": "Bearer %s" % token.token,
"accept": "application/vnd.dwolla.v1.hal+json",
},
)
extra_data = resp.json()
return self.get_provider().sociallogin_from_response(request, extra_data)
oauth2_login = OAuth2LoginView.adapter_view(DwollaOAuth2Adapter)
oauth2_callback = OAuth2CallbackView.adapter_view(DwollaOAuth2Adapter)