This commit is contained in:
Iliyan Angelov
2025-09-14 23:24:25 +03:00
commit c67067a2a4
71311 changed files with 6800714 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
from allauth.socialaccount import providers
from allauth.socialaccount.providers.base import ProviderAccount
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
class DropboxOAuth2Account(ProviderAccount):
pass
class DropboxOAuth2Provider(OAuth2Provider):
id = "dropbox"
name = "Dropbox"
account_class = DropboxOAuth2Account
def extract_uid(self, data):
return data["account_id"]
def extract_common_fields(self, data):
return dict(name=data["name"]["display_name"], email=data["email"])
providers.registry.register(DropboxOAuth2Provider)

View File

@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import json
from allauth.socialaccount.tests import OAuth2TestsMixin
from allauth.tests import MockedResponse, TestCase
from .provider import DropboxOAuth2Provider
class DropboxOAuth2Tests(OAuth2TestsMixin, TestCase):
provider_id = DropboxOAuth2Provider.id
def get_mocked_response(self):
payload = {
"account_id": "dbid:ASDFasd3ASdfasdFAsd1AS2ASDF1aS-DfAs",
"account_type": {".tag": "basic"},
"country": "US",
"disabled": False,
"email": "allauth@example.com",
"email_verified": True,
"is_paired": True,
"locale": "en",
"name": {
"abbreviated_name": "AA",
"display_name": "All Auth",
"familiar_name": "All",
"given_name": "All",
"surname": "Auth",
},
"profile_photo_url": (
"https://dl-web.dropbox.com/account_photo"
"/get/dbid%ASDFasd3ASdfasdFAsd1AS2ASDF1aS"
"-DfAs?size=128x128"
),
"referral_link": "https://db.tt/ASDfAsDf",
}
return MockedResponse(200, json.dumps(payload))

View File

@@ -0,0 +1,6 @@
from allauth.socialaccount.providers.oauth.urls import default_urlpatterns
from .provider import DropboxOAuth2Provider
urlpatterns = default_urlpatterns(DropboxOAuth2Provider)

View File

@@ -0,0 +1,28 @@
import requests
from allauth.socialaccount.providers.oauth2.views import (
OAuth2Adapter,
OAuth2CallbackView,
OAuth2LoginView,
)
from .provider import DropboxOAuth2Provider
class DropboxOAuth2Adapter(OAuth2Adapter):
provider_id = DropboxOAuth2Provider.id
access_token_url = "https://api.dropbox.com/oauth2/token"
authorize_url = "https://www.dropbox.com/oauth2/authorize"
profile_url = "https://api.dropbox.com/2/users/get_current_account"
def complete_login(self, request, app, token, **kwargs):
response = requests.post(
self.profile_url,
headers={"Authorization": "Bearer %s" % (token.token,)},
)
response.raise_for_status()
return self.get_provider().sociallogin_from_response(request, response.json())
oauth_login = OAuth2LoginView.adapter_view(DropboxOAuth2Adapter)
oauth_callback = OAuth2CallbackView.adapter_view(DropboxOAuth2Adapter)