From ab320f15d39a1059376277feda6542dcccbe8b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20Kol=C3=A1=C5=99?= Date: Tue, 8 Feb 2022 20:40:44 +0100 Subject: [PATCH] Added support for CAS ESN Accounts login #27 --- fiesta/Dockerfile | 5 +- .../accounts/templates/accounts/profile.html | 26 ++++ fiesta/apps/accounts/urls.py | 4 +- fiesta/apps/accounts/views/__init__.py | 0 fiesta/apps/accounts/views/profile.py | 9 ++ fiesta/apps/esnaccounts/__init__.py | 1 + fiesta/apps/esnaccounts/apps.py | 6 + fiesta/apps/esnaccounts/provider.py | 17 +++ fiesta/apps/esnaccounts/urls.py | 5 + fiesta/apps/esnaccounts/views.py | 16 ++ fiesta/apps/utils/templatetags/breadcrumbs.py | 6 +- fiesta/fiesta/settings.py | 16 +- .../templates/fiesta/parts/footer.html | 0 poetry.lock | 138 ++++++++++++++++-- pyproject.toml | 1 + 15 files changed, 231 insertions(+), 19 deletions(-) create mode 100644 fiesta/apps/accounts/templates/accounts/profile.html create mode 100644 fiesta/apps/accounts/views/__init__.py create mode 100644 fiesta/apps/accounts/views/profile.py create mode 100644 fiesta/apps/esnaccounts/__init__.py create mode 100644 fiesta/apps/esnaccounts/apps.py create mode 100644 fiesta/apps/esnaccounts/provider.py create mode 100644 fiesta/apps/esnaccounts/urls.py create mode 100644 fiesta/apps/esnaccounts/views.py rename fiesta/{apps/accounts => }/templates/fiesta/parts/footer.html (100%) diff --git a/fiesta/Dockerfile b/fiesta/Dockerfile index 2c4d6fbb..e260466c 100644 --- a/fiesta/Dockerfile +++ b/fiesta/Dockerfile @@ -1,8 +1,9 @@ FROM python:3.9.7-alpine as builder RUN apk add --no-cache --virtual build-deps \ - build-base gcc python3-dev musl-dev gettext-dev libffi-dev g++ postgresql-dev mariadb-dev \ - musl-dev rust cargo patchelf + build-base gcc python3-dev musl-dev gettext-dev libffi-dev g++ \ + postgresql-dev mariadb-dev libxml2-dev libxslt-dev \ + musl-dev rust cargo patchelf git COPY pyproject.toml poetry.lock ./ diff --git a/fiesta/apps/accounts/templates/accounts/profile.html b/fiesta/apps/accounts/templates/accounts/profile.html new file mode 100644 index 00000000..9d90fac7 --- /dev/null +++ b/fiesta/apps/accounts/templates/accounts/profile.html @@ -0,0 +1,26 @@ +{% extends "fiesta/base.html" %} + +{% block main %} + + +{% endblock %} diff --git a/fiesta/apps/accounts/urls.py b/fiesta/apps/accounts/urls.py index d195a1b7..7f0ea912 100644 --- a/fiesta/apps/accounts/urls.py +++ b/fiesta/apps/accounts/urls.py @@ -1,13 +1,15 @@ from django.urls import path - # Define your urls here from django.views.generic import TemplateView +from apps.accounts.views.profile import ProfileView + urlpatterns = [ path( "auth/login", TemplateView.as_view(template_name="accounts/auth/login.html"), name="login", ), + path("profile", ProfileView.as_view()), path("", TemplateView.as_view(template_name="accounts/index.html")), ] diff --git a/fiesta/apps/accounts/views/__init__.py b/fiesta/apps/accounts/views/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fiesta/apps/accounts/views/profile.py b/fiesta/apps/accounts/views/profile.py new file mode 100644 index 00000000..6ab67495 --- /dev/null +++ b/fiesta/apps/accounts/views/profile.py @@ -0,0 +1,9 @@ +from django.views.generic import TemplateView +from django.utils.translation import gettext_lazy as _ + +from apps.utils.breadcrumbs import with_breadcrumb + + +@with_breadcrumb(_('My Profile')) +class ProfileView(TemplateView): + template_name = 'accounts/profile.html' diff --git a/fiesta/apps/esnaccounts/__init__.py b/fiesta/apps/esnaccounts/__init__.py new file mode 100644 index 00000000..3d187266 --- /dev/null +++ b/fiesta/apps/esnaccounts/__init__.py @@ -0,0 +1 @@ +__version__ = "0.5.0" diff --git a/fiesta/apps/esnaccounts/apps.py b/fiesta/apps/esnaccounts/apps.py new file mode 100644 index 00000000..9d80e4d6 --- /dev/null +++ b/fiesta/apps/esnaccounts/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ESNAccountsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "apps.esnaccounts" diff --git a/fiesta/apps/esnaccounts/provider.py b/fiesta/apps/esnaccounts/provider.py new file mode 100644 index 00000000..a2ca4d1a --- /dev/null +++ b/fiesta/apps/esnaccounts/provider.py @@ -0,0 +1,17 @@ +from allauth.socialaccount.providers.base import ProviderAccount +from allauth_cas.providers import CASProvider + + +class ESNAccountsAccount(ProviderAccount): + pass + + +class ESNAccountsProvider(CASProvider): + id = "esnaccounts" + name = "ESN Accounts" + account_class = ESNAccountsAccount + + # TODO: fix extract_common_fields to load data from extra_data + + +provider_classes = [ESNAccountsProvider] diff --git a/fiesta/apps/esnaccounts/urls.py b/fiesta/apps/esnaccounts/urls.py new file mode 100644 index 00000000..b53aaa76 --- /dev/null +++ b/fiesta/apps/esnaccounts/urls.py @@ -0,0 +1,5 @@ +from allauth_cas.urls import default_urlpatterns + +from .provider import ESNAccountsProvider + +urlpatterns = default_urlpatterns(ESNAccountsProvider) diff --git a/fiesta/apps/esnaccounts/views.py b/fiesta/apps/esnaccounts/views.py new file mode 100644 index 00000000..b39b79be --- /dev/null +++ b/fiesta/apps/esnaccounts/views.py @@ -0,0 +1,16 @@ +from allauth_cas.views import CASAdapter, CASCallbackView, CASLoginView, CASLogoutView + +from .provider import ESNAccountsProvider + + +class ESNAccountsAdapter(CASAdapter): + provider_id = ESNAccountsProvider.id + url = "https://accounts.esn.org/cas/" + version = 3 + + +login = CASLoginView.adapter_view(ESNAccountsAdapter) + +callback = CASCallbackView.adapter_view(ESNAccountsAdapter) + +logout = CASLogoutView.adapter_view(ESNAccountsAdapter) diff --git a/fiesta/apps/utils/templatetags/breadcrumbs.py b/fiesta/apps/utils/templatetags/breadcrumbs.py index c19acf00..59a7a912 100644 --- a/fiesta/apps/utils/templatetags/breadcrumbs.py +++ b/fiesta/apps/utils/templatetags/breadcrumbs.py @@ -5,6 +5,7 @@ from django import template from django.template.loader import render_to_string from django.views import View +from django.utils.translation import gettext_lazy as _ from apps.plugins.middleware.plugin import HttpRequest @@ -34,7 +35,10 @@ def breadcrumbs(context: dict): None, [ # TODO: slash is not always the home page? - BreadcrumbTitle(req.membership.section, "/"), + BreadcrumbTitle( + req.membership.section if req.membership else _('Home'), + "/" + ), BreadcrumbTitle(apps.title, f"/{apps.url_prefix}") if (plugin := req.plugin) and (apps := plugin.app_config) else None, diff --git a/fiesta/fiesta/settings.py b/fiesta/fiesta/settings.py index 358a9988..a8469c87 100644 --- a/fiesta/fiesta/settings.py +++ b/fiesta/fiesta/settings.py @@ -53,13 +53,14 @@ "webpack_loader", "django_htmx", # Fiesta apps - "apps.plugins.apps.PluginsConfig", "apps.accounts.apps.AccountsConfig", - "apps.universities.apps.UniversitiesConfig", - "apps.sections.apps.SectionsConfig", - "apps.utils.apps.UtilsConfig", + "apps.esnaccounts", # cannot have full config Path, since allauth/socialaccount/providers/__init__.py:38 sucks "apps.esncards.apps.ESNcardsConfig", "apps.fiestaforms.apps.FiestaformsConfig", + "apps.plugins.apps.PluginsConfig", + "apps.sections.apps.SectionsConfig", + "apps.universities.apps.UniversitiesConfig", + "apps.utils.apps.UtilsConfig", # Debugs "django_extensions", # django-allauth @@ -67,6 +68,7 @@ "allauth.account", "allauth.socialaccount", "allauth.socialaccount.providers.facebook", + "allauth_cas", ] MIDDLEWARE = [ @@ -164,6 +166,8 @@ SITE_ID = 1 +SECURE_PROXY_SSL_HEADER = "HTTP_X_FORWARDED_SSL", "on" + SOCIALACCOUNT_PROVIDERS = { "facebook": { "METHOD": "oauth2", @@ -184,7 +188,8 @@ "LOCALE_FUNC": lambda request: "en", "VERIFIED_EMAIL": False, "VERSION": "v12.0", - } + }, + "esnaccounts": {}, } ACCOUNT_AUTHENTICATED_LOGIN_REDIRECTS = False @@ -197,6 +202,7 @@ ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https" LOGIN_URL = "/accounts/auth/login" +LOGIN_REDIRECT_URL = "/accounts/profile" # Internationalization # https://docs.djangoproject.com/en/4.0/topics/i18n/ diff --git a/fiesta/apps/accounts/templates/fiesta/parts/footer.html b/fiesta/templates/fiesta/parts/footer.html similarity index 100% rename from fiesta/apps/accounts/templates/fiesta/parts/footer.html rename to fiesta/templates/fiesta/parts/footer.html diff --git a/poetry.lock b/poetry.lock index 43454484..eb84d69c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -149,6 +149,30 @@ python3-openid = ">=3.0.8" requests = "*" requests-oauthlib = ">=0.3.0" +[[package]] +name = "django-allauth-cas" +version = "1.0.0" +description = "CAS support for django-allauth." +category = "main" +optional = false +python-versions = "*" +develop = false + +[package.dependencies] +django-allauth = "*" +python-cas = "*" +six = "*" + +[package.extras] +docs = ["sphinx"] +tests = ["tox"] + +[package.source] +type = "git" +url = "https://github.com/thejoeejoee/django-allauth-cas.git" +reference = "master" +resolved_reference = "5db34b546eb32524a3a1a4b90f411e370ac7ad9b" + [[package]] name = "django-click" version = "2.3.0" @@ -257,7 +281,7 @@ testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-co [[package]] name = "identify" -version = "2.4.7" +version = "2.4.8" description = "File identification library for Python" category = "dev" optional = false @@ -274,6 +298,20 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "lxml" +version = "4.7.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.7)"] + [[package]] name = "mysqlclient" version = "2.1.0" @@ -386,9 +424,22 @@ python-versions = ">=3.6" [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "python-cas" +version = "1.6.0" +description = "Python CAS client library" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +lxml = ">=3.4" +requests = ">=2.11.1" +six = ">=1.10.0" + [[package]] name = "python-decouple" -version = "3.5" +version = "3.6" description = "Strict separation of settings from code." category = "main" optional = false @@ -505,7 +556,7 @@ python-versions = "*" [[package]] name = "virtualenv" -version = "20.13.0" +version = "20.13.1" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -524,7 +575,7 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "f6055fd83d6689b60318a0e9f37d483e0000608b6012b0d823a41e4de34ebb9f" +content-hash = "b64d6dc1d49121e799c96ebe0d57e7b0f4b2d760a96cee2365fa51361c733c10" [metadata.files] asgiref = [ @@ -652,6 +703,7 @@ django = [ django-allauth = [ {file = "django-allauth-0.47.0.tar.gz", hash = "sha256:2bcf09d4c6e672620981d283f555d643982ac066b71f8947dbd81882a1d7c5e8"}, ] +django-allauth-cas = [] django-click = [ {file = "django-click-2.3.0.tar.gz", hash = "sha256:bffb0d10c3f3dfe3f5b116ce902c7a7a9aa4e9c046de95259dc044462eb746b4"}, {file = "django_click-2.3.0-py2.py3-none-any.whl", hash = "sha256:b862d6b2424edba564968834c8570e39db8142babaa843fa791a4958a2dabb54"}, @@ -688,13 +740,75 @@ filelock = [ {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, ] identify = [ - {file = "identify-2.4.7-py2.py3-none-any.whl", hash = "sha256:e64210654dfbca6ced33230eb1b137591a0981425e1a60b4c6c36309f787bbd5"}, - {file = "identify-2.4.7.tar.gz", hash = "sha256:8408f01e0be25492017346d7dffe7e7711b762b23375c775d24d3bc38618fabc"}, + {file = "identify-2.4.8-py2.py3-none-any.whl", hash = "sha256:a55bdd671b6063eb837af938c250ec00bba6e610454265133b0d2db7ae718d0f"}, + {file = "identify-2.4.8.tar.gz", hash = "sha256:97e839c1779f07011b84c92af183e1883d9745d532d83412cca1ca76d3808c1c"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] +lxml = [ + {file = "lxml-4.7.1-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:d546431636edb1d6a608b348dd58cc9841b81f4116745857b6cb9f8dadb2725f"}, + {file = "lxml-4.7.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6308062534323f0d3edb4e702a0e26a76ca9e0e23ff99be5d82750772df32a9e"}, + {file = "lxml-4.7.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f76dbe44e31abf516114f6347a46fa4e7c2e8bceaa4b6f7ee3a0a03c8eba3c17"}, + {file = "lxml-4.7.1-cp27-cp27m-win32.whl", hash = "sha256:d5618d49de6ba63fe4510bdada62d06a8acfca0b4b5c904956c777d28382b419"}, + {file = "lxml-4.7.1-cp27-cp27m-win_amd64.whl", hash = "sha256:9393a05b126a7e187f3e38758255e0edf948a65b22c377414002d488221fdaa2"}, + {file = "lxml-4.7.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50d3dba341f1e583265c1a808e897b4159208d814ab07530202b6036a4d86da5"}, + {file = "lxml-4.7.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44f552e0da3c8ee3c28e2eb82b0b784200631687fc6a71277ea8ab0828780e7d"}, + {file = "lxml-4.7.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e662c6266e3a275bdcb6bb049edc7cd77d0b0f7e119a53101d367c841afc66dc"}, + {file = "lxml-4.7.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4c093c571bc3da9ebcd484e001ba18b8452903cd428c0bc926d9b0141bcb710e"}, + {file = "lxml-4.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3e26ad9bc48d610bf6cc76c506b9e5ad9360ed7a945d9be3b5b2c8535a0145e3"}, + {file = "lxml-4.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a5f623aeaa24f71fce3177d7fee875371345eb9102b355b882243e33e04b7175"}, + {file = "lxml-4.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b5e2acefd33c259c4a2e157119c4373c8773cf6793e225006a1649672ab47a6"}, + {file = "lxml-4.7.1-cp310-cp310-win32.whl", hash = "sha256:67fa5f028e8a01e1d7944a9fb616d1d0510d5d38b0c41708310bd1bc45ae89f6"}, + {file = "lxml-4.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:b1d381f58fcc3e63fcc0ea4f0a38335163883267f77e4c6e22d7a30877218a0e"}, + {file = "lxml-4.7.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38d9759733aa04fb1697d717bfabbedb21398046bd07734be7cccc3d19ea8675"}, + {file = "lxml-4.7.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dfd0d464f3d86a1460683cd742306d1138b4e99b79094f4e07e1ca85ee267fe7"}, + {file = "lxml-4.7.1-cp35-cp35m-win32.whl", hash = "sha256:534e946bce61fd162af02bad7bfd2daec1521b71d27238869c23a672146c34a5"}, + {file = "lxml-4.7.1-cp35-cp35m-win_amd64.whl", hash = "sha256:6ec829058785d028f467be70cd195cd0aaf1a763e4d09822584ede8c9eaa4b03"}, + {file = "lxml-4.7.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:ade74f5e3a0fd17df5782896ddca7ddb998845a5f7cd4b0be771e1ffc3b9aa5b"}, + {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41358bfd24425c1673f184d7c26c6ae91943fe51dfecc3603b5e08187b4bcc55"}, + {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6e56521538f19c4a6690f439fefed551f0b296bd785adc67c1777c348beb943d"}, + {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b0f782f0e03555c55e37d93d7a57454efe7495dab33ba0ccd2dbe25fc50f05d"}, + {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:490712b91c65988012e866c411a40cc65b595929ececf75eeb4c79fcc3bc80a6"}, + {file = "lxml-4.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c22eb8c819d59cec4444d9eebe2e38b95d3dcdafe08965853f8799fd71161d"}, + {file = "lxml-4.7.1-cp36-cp36m-win32.whl", hash = "sha256:2a906c3890da6a63224d551c2967413b8790a6357a80bf6b257c9a7978c2c42d"}, + {file = "lxml-4.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:36b16fecb10246e599f178dd74f313cbdc9f41c56e77d52100d1361eed24f51a"}, + {file = "lxml-4.7.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:a5edc58d631170de90e50adc2cc0248083541affef82f8cd93bea458e4d96db8"}, + {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:87c1b0496e8c87ec9db5383e30042357b4839b46c2d556abd49ec770ce2ad868"}, + {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0a5f0e4747f31cff87d1eb32a6000bde1e603107f632ef4666be0dc065889c7a"}, + {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bf6005708fc2e2c89a083f258b97709559a95f9a7a03e59f805dd23c93bc3986"}, + {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc15874816b9320581133ddc2096b644582ab870cf6a6ed63684433e7af4b0d3"}, + {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0b5e96e25e70917b28a5391c2ed3ffc6156513d3db0e1476c5253fcd50f7a944"}, + {file = "lxml-4.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ec9027d0beb785a35aa9951d14e06d48cfbf876d8ff67519403a2522b181943b"}, + {file = "lxml-4.7.1-cp37-cp37m-win32.whl", hash = "sha256:9fbc0dee7ff5f15c4428775e6fa3ed20003140560ffa22b88326669d53b3c0f4"}, + {file = "lxml-4.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1104a8d47967a414a436007c52f533e933e5d52574cab407b1e49a4e9b5ddbd1"}, + {file = "lxml-4.7.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:fc9fb11b65e7bc49f7f75aaba1b700f7181d95d4e151cf2f24d51bfd14410b77"}, + {file = "lxml-4.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:317bd63870b4d875af3c1be1b19202de34c32623609ec803b81c99193a788c1e"}, + {file = "lxml-4.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:610807cea990fd545b1559466971649e69302c8a9472cefe1d6d48a1dee97440"}, + {file = "lxml-4.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:09b738360af8cb2da275998a8bf79517a71225b0de41ab47339c2beebfff025f"}, + {file = "lxml-4.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a2ab9d089324d77bb81745b01f4aeffe4094306d939e92ba5e71e9a6b99b71e"}, + {file = "lxml-4.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eed394099a7792834f0cb4a8f615319152b9d801444c1c9e1b1a2c36d2239f9e"}, + {file = "lxml-4.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:735e3b4ce9c0616e85f302f109bdc6e425ba1670a73f962c9f6b98a6d51b77c9"}, + {file = "lxml-4.7.1-cp38-cp38-win32.whl", hash = "sha256:772057fba283c095db8c8ecde4634717a35c47061d24f889468dc67190327bcd"}, + {file = "lxml-4.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:13dbb5c7e8f3b6a2cf6e10b0948cacb2f4c9eb05029fe31c60592d08ac63180d"}, + {file = "lxml-4.7.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:718d7208b9c2d86aaf0294d9381a6acb0158b5ff0f3515902751404e318e02c9"}, + {file = "lxml-4.7.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:5bee1b0cbfdb87686a7fb0e46f1d8bd34d52d6932c0723a86de1cc532b1aa489"}, + {file = "lxml-4.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e410cf3a2272d0a85526d700782a2fa92c1e304fdcc519ba74ac80b8297adf36"}, + {file = "lxml-4.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:585ea241ee4961dc18a95e2f5581dbc26285fcf330e007459688096f76be8c42"}, + {file = "lxml-4.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a555e06566c6dc167fbcd0ad507ff05fd9328502aefc963cb0a0547cfe7f00db"}, + {file = "lxml-4.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:adaab25be351fff0d8a691c4f09153647804d09a87a4e4ea2c3f9fe9e8651851"}, + {file = "lxml-4.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:82d16a64236970cb93c8d63ad18c5b9f138a704331e4b916b2737ddfad14e0c4"}, + {file = "lxml-4.7.1-cp39-cp39-win32.whl", hash = "sha256:59e7da839a1238807226f7143c68a479dee09244d1b3cf8c134f2fce777d12d0"}, + {file = "lxml-4.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:a1bbc4efa99ed1310b5009ce7f3a1784698082ed2c1ef3895332f5df9b3b92c2"}, + {file = "lxml-4.7.1-pp37-pypy37_pp73-macosx_10_14_x86_64.whl", hash = "sha256:0607ff0988ad7e173e5ddf7bf55ee65534bd18a5461183c33e8e41a59e89edf4"}, + {file = "lxml-4.7.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:6c198bfc169419c09b85ab10cb0f572744e686f40d1e7f4ed09061284fc1303f"}, + {file = "lxml-4.7.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a58d78653ae422df6837dd4ca0036610b8cb4962b5cfdbd337b7b24de9e5f98a"}, + {file = "lxml-4.7.1-pp38-pypy38_pp73-macosx_10_14_x86_64.whl", hash = "sha256:e18281a7d80d76b66a9f9e68a98cf7e1d153182772400d9a9ce855264d7d0ce7"}, + {file = "lxml-4.7.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8e54945dd2eeb50925500957c7c579df3cd07c29db7810b83cf30495d79af267"}, + {file = "lxml-4.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:447d5009d6b5447b2f237395d0018901dcc673f7d9f82ba26c1b9f9c3b444b60"}, + {file = "lxml-4.7.1.tar.gz", hash = "sha256:a1613838aa6b89af4ba10a0f3a972836128801ed008078f8c1244e65958f1b24"}, +] mysqlclient = [ {file = "mysqlclient-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:02c8826e6add9b20f4cb12dcf016485f7b1d6e30356a1204d05431867a1b3947"}, {file = "mysqlclient-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b62d23c11c516cedb887377c8807628c1c65d57593b57853186a6ee18b0c6a5b"}, @@ -791,9 +905,13 @@ pyparsing = [ {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, ] +python-cas = [ + {file = "python-cas-1.6.0.tar.gz", hash = "sha256:b8f1dcb1b6c56b3ff4f86bbef47bcdfcf932061ccd4812ae35e3f63954dfdb28"}, + {file = "python_cas-1.6.0-py2.py3-none-any.whl", hash = "sha256:2abc0dae93c3b14097999fb7062f23cd09bc9f4e33d93f03c0cc040bd71ed50e"}, +] python-decouple = [ - {file = "python-decouple-3.5.tar.gz", hash = "sha256:68e4b3fcc97e24bc90eecc514852d0bf970f4ff031f5f7a6728ddafa9afefcaf"}, - {file = "python_decouple-3.5-py3-none-any.whl", hash = "sha256:011d3f785367c54a72cf8a07d3a7a48bb8cc1a0f8e6c70353ca5767ebf7c8c9d"}, + {file = "python-decouple-3.6.tar.gz", hash = "sha256:2838cdf77a5cf127d7e8b339ce14c25bceb3af3e674e039d4901ba16359968c7"}, + {file = "python_decouple-3.6-py3-none-any.whl", hash = "sha256:6cf502dc963a5c642ea5ead069847df3d916a6420cad5599185de6bab11d8c2e"}, ] python3-openid = [ {file = "python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf"}, @@ -867,6 +985,6 @@ urlman = [ {file = "urlman-2.0.1.tar.gz", hash = "sha256:3b9c5ac4e447b1e29fa259dc76953d46d711c84b296a0c66c34870e248eb1205"}, ] virtualenv = [ - {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"}, - {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"}, + {file = "virtualenv-20.13.1-py2.py3-none-any.whl", hash = "sha256:45e1d053cad4cd453181ae877c4ffc053546ae99e7dd049b9ff1d9be7491abf7"}, + {file = "virtualenv-20.13.1.tar.gz", hash = "sha256:e0621bcbf4160e4e1030f05065c8834b4e93f4fcc223255db2a823440aca9c14"}, ] diff --git a/pyproject.toml b/pyproject.toml index cc15f92e..238921b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ mysqlclient = "^2.1.0" bcrypt = "^3.2.0" django-htmx = "^1.8.0" django-lifecycle = "^0.9.3" +django-allauth-cas = { git = "https://github.com/thejoeejoee/django-allauth-cas.git", branch = "master" } [tool.poetry.dev-dependencies] pre-commit = "^2.17.0"