54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
"""
|
|
Provider for Patreon
|
|
"""
|
|
|
|
from django.conf import settings
|
|
|
|
from allauth.socialaccount.providers.base import ProviderAccount
|
|
from allauth.socialaccount.providers.oauth2.provider import OAuth2Provider
|
|
|
|
|
|
API_VERSION = (
|
|
getattr(settings, "SOCIALACCOUNT_PROVIDERS", {})
|
|
.get("patreon", {})
|
|
.get("VERSION", "v1")
|
|
)
|
|
USE_API_V2 = True if API_VERSION == "v2" else False
|
|
API_URL = "https://www.patreon.com/api/oauth2/" + (API_VERSION if USE_API_V2 else "api")
|
|
|
|
|
|
class PatreonAccount(ProviderAccount):
|
|
def get_avatar_url(self):
|
|
return self.account.extra_data.get("attributes").get("thumb_url")
|
|
|
|
|
|
class PatreonProvider(OAuth2Provider):
|
|
id = "patreon"
|
|
name = "Patreon"
|
|
account_class = PatreonAccount
|
|
|
|
def get_default_scope(self):
|
|
if USE_API_V2:
|
|
return [
|
|
"identity",
|
|
"identity[email]",
|
|
"campaigns",
|
|
"campaigns.members",
|
|
]
|
|
return ["pledges-to-me", "users", "my-campaign"]
|
|
|
|
def extract_uid(self, data):
|
|
return data.get("id")
|
|
|
|
def extract_common_fields(self, data):
|
|
details = data["attributes"]
|
|
return {
|
|
"email": details.get("email"),
|
|
"fullname": details.get("full_name"),
|
|
"first_name": details.get("first_name"),
|
|
"last_name": details.get("last_name"),
|
|
}
|
|
|
|
|
|
provider_classes = [PatreonProvider]
|