39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from urllib.parse import parse_qsl
|
|
|
|
from django.urls import reverse
|
|
from django.utils.http import urlencode
|
|
|
|
from allauth.socialaccount.providers.base import Provider
|
|
|
|
|
|
class OAuthProvider(Provider):
|
|
def get_login_url(self, request, **kwargs):
|
|
url = reverse(self.id + "_login")
|
|
if kwargs:
|
|
url = url + "?" + urlencode(kwargs)
|
|
return url
|
|
|
|
def get_auth_params(self, request, action):
|
|
settings = self.get_settings()
|
|
ret = dict(settings.get("AUTH_PARAMS", {}))
|
|
dynamic_auth_params = request.GET.get("auth_params", None)
|
|
if dynamic_auth_params:
|
|
ret.update(dict(parse_qsl(dynamic_auth_params)))
|
|
return ret
|
|
|
|
def get_auth_url(self, request, action):
|
|
# TODO: This is ugly. Move authorization_url away from the
|
|
# adapter into the provider. Hmpf, the line between
|
|
# adapter/provider is a bit too thin here.
|
|
return None
|
|
|
|
def get_scope(self, request):
|
|
settings = self.get_settings()
|
|
scope = settings.get("SCOPE")
|
|
if scope is None:
|
|
scope = self.get_default_scope()
|
|
return scope
|
|
|
|
def get_default_scope(self):
|
|
return []
|