feat(pkgs): Add django-allauth and django-allauth-cas
This commit is contained in:
parent
763c2dfcbb
commit
1732249a2d
8 changed files with 171 additions and 1 deletions
39
pkgs/django-allauth-cas/02-registry.patch
Normal file
39
pkgs/django-allauth-cas/02-registry.patch
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
diff --git a/allauth_cas/signals.py b/allauth_cas/signals.py
|
||||||
|
index 36c9b24..530c26e 100644
|
||||||
|
--- a/allauth_cas/signals.py
|
||||||
|
+++ b/allauth_cas/signals.py
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-from allauth.account.adapter import get_adapter
|
||||||
|
+from allauth.socialaccount.adapter import get_adapter
|
||||||
|
from allauth.account.utils import get_next_redirect_url
|
||||||
|
from allauth.socialaccount import providers
|
||||||
|
from django.contrib.auth.signals import user_logged_out
|
||||||
|
@@ -14,7 +14,7 @@ def cas_account_logout(sender, request, **kwargs):
|
||||||
|
if not provider_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
- provider = providers.registry.by_id(provider_id, request)
|
||||||
|
+ provider = get_adapter(request).get_provider(request, provider_id)
|
||||||
|
|
||||||
|
if not provider.message_suggest_caslogout_on_logout(request):
|
||||||
|
return
|
||||||
|
diff --git a/allauth_cas/views.py b/allauth_cas/views.py
|
||||||
|
index d08e354..9e81e53 100644
|
||||||
|
--- a/allauth_cas/views.py
|
||||||
|
+++ b/allauth_cas/views.py
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
import cas
|
||||||
|
-from allauth.account.adapter import get_adapter
|
||||||
|
+from allauth.socialaccount.adapter import get_adapter
|
||||||
|
from allauth.account.utils import get_next_redirect_url
|
||||||
|
from allauth.socialaccount import providers
|
||||||
|
from allauth.socialaccount.helpers import (
|
||||||
|
@@ -56,7 +56,7 @@ class CASAdapter:
|
||||||
|
"""
|
||||||
|
Returns a provider instance for the current request.
|
||||||
|
"""
|
||||||
|
- return providers.registry.by_id(self.provider_id, self.request)
|
||||||
|
+ return get_adapter(self.request).get_provider(self.request, self.provider_id)
|
||||||
|
|
||||||
|
def complete_login(self, request, response):
|
||||||
|
"""
|
|
@ -20,7 +20,10 @@ buildPythonPackage rec {
|
||||||
hash = "sha256-y/IquXl/4+9MJmsgbWtPun3tBbRJ4kJFzWo5c+5WeHk=";
|
hash = "sha256-y/IquXl/4+9MJmsgbWtPun3tBbRJ4kJFzWo5c+5WeHk=";
|
||||||
};
|
};
|
||||||
|
|
||||||
patches = [ ./01-setup.patch ];
|
patches = [
|
||||||
|
./01-setup.patch
|
||||||
|
./02-registry.patch
|
||||||
|
];
|
||||||
|
|
||||||
build-system = [
|
build-system = [
|
||||||
setuptools
|
setuptools
|
||||||
|
|
96
pkgs/django-allauth/default.nix
Normal file
96
pkgs/django-allauth/default.nix
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildPythonPackage,
|
||||||
|
fetchFromGitHub,
|
||||||
|
pythonOlder,
|
||||||
|
# build-system
|
||||||
|
setuptools,
|
||||||
|
# dependencies
|
||||||
|
django,
|
||||||
|
python3-openid,
|
||||||
|
requests,
|
||||||
|
requests-oauthlib,
|
||||||
|
pyjwt,
|
||||||
|
# optional-dependencies
|
||||||
|
python3-saml,
|
||||||
|
qrcode,
|
||||||
|
fido2,
|
||||||
|
# tests
|
||||||
|
pillow,
|
||||||
|
pytestCheckHook,
|
||||||
|
pytest-django,
|
||||||
|
# passthru tests
|
||||||
|
dj-rest-auth,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildPythonPackage rec {
|
||||||
|
pname = "django-allauth";
|
||||||
|
version = "64.2.1";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
|
disabled = pythonOlder "3.7";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "pennersr";
|
||||||
|
repo = "django-allauth";
|
||||||
|
rev = "refs/tags/${version}";
|
||||||
|
hash = "sha256-JKjM+zqrXidxpbi+fo6wbvdXlw2oDYH51EsvQ5yp3R8=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
setuptools
|
||||||
|
];
|
||||||
|
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
django
|
||||||
|
];
|
||||||
|
|
||||||
|
passthru.optional-dependencies = {
|
||||||
|
mfa = [
|
||||||
|
qrcode
|
||||||
|
fido2
|
||||||
|
];
|
||||||
|
openid = [
|
||||||
|
python3-openid
|
||||||
|
];
|
||||||
|
saml = [
|
||||||
|
python3-saml
|
||||||
|
];
|
||||||
|
socialaccount = [
|
||||||
|
pyjwt
|
||||||
|
requests
|
||||||
|
requests-oauthlib
|
||||||
|
] ++ pyjwt.optional-dependencies.crypto;
|
||||||
|
steam = [
|
||||||
|
python3-openid
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
pythonImportsCheck = [
|
||||||
|
"allauth"
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
pillow
|
||||||
|
pytestCheckHook
|
||||||
|
pytest-django
|
||||||
|
] ++ lib.flatten (builtins.attrValues passthru.optional-dependencies);
|
||||||
|
|
||||||
|
disabledTests = [
|
||||||
|
# Tests require network access
|
||||||
|
"test_login"
|
||||||
|
];
|
||||||
|
|
||||||
|
passthru.tests = {
|
||||||
|
inherit dj-rest-auth;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
changelog = "https://github.com/pennersr/django-allauth/blob/${version}/ChangeLog.rst";
|
||||||
|
description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication";
|
||||||
|
downloadPage = "https://github.com/pennersr/django-allauth";
|
||||||
|
homepage = "https://www.intenct.nl/projects/django-allauth";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [ derdennisop ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -37,6 +37,8 @@ INSTALLED_APPS = [
|
||||||
"allauth.account",
|
"allauth.account",
|
||||||
"allauth.socialaccount",
|
"allauth.socialaccount",
|
||||||
"allauth.socialaccount.providers.openid_connect",
|
"allauth.socialaccount.providers.openid_connect",
|
||||||
|
"allauth_cas",
|
||||||
|
"shared.cas",
|
||||||
# Main app
|
# Main app
|
||||||
"dgsi",
|
"dgsi",
|
||||||
]
|
]
|
||||||
|
|
0
src/shared/cas/__init__.py
Normal file
0
src/shared/cas/__init__.py
Normal file
11
src/shared/cas/provider.py
Normal file
11
src/shared/cas/provider.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
from allauth.socialaccount.providers.base import ProviderAccount
|
||||||
|
from allauth_cas.providers import CASProvider as Provider
|
||||||
|
|
||||||
|
|
||||||
|
class CASProvider(Provider):
|
||||||
|
id = "cas" # Choose an identifier for your provider
|
||||||
|
name = "CAS ENS" # Verbose name of your provider
|
||||||
|
account_class = ProviderAccount
|
||||||
|
|
||||||
|
|
||||||
|
provider_classes = [CASProvider]
|
5
src/shared/cas/urls.py
Normal file
5
src/shared/cas/urls.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from allauth_cas.urls import default_urlpatterns
|
||||||
|
|
||||||
|
from .provider import CASProvider
|
||||||
|
|
||||||
|
urlpatterns = default_urlpatterns(CASProvider)
|
14
src/shared/cas/views.py
Normal file
14
src/shared/cas/views.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
from allauth_cas.views import CASAdapter as Adapter
|
||||||
|
from allauth_cas.views import CASCallbackView, CASLoginView
|
||||||
|
|
||||||
|
from .provider import CASProvider
|
||||||
|
|
||||||
|
|
||||||
|
class CASAdapter(Adapter):
|
||||||
|
provider_id = CASProvider.id
|
||||||
|
url = "https://cas.eleves.ens.fr"
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
|
||||||
|
login = CASLoginView.adapter_view(CASAdapter)
|
||||||
|
callback = CASCallbackView.adapter_view(CASAdapter)
|
Loading…
Reference in a new issue