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 %}
+
+ {% for sa in request.user.socialaccount_set.all %}
+ -
+ {% if sa.provider == 'esnaccounts' %}
+
+ {% for role in sa.extra_data.roles %}
+ - role: {{ role }}
+ {% endfor %}
+
+ - joined: {{ sa.date_joined }}
+
- email: {{ sa.extra_data.mail }}
+
- uid: {{ sa.extra_data.uid }}
+
-
+
- data: {{ sa.extra_data }}
+
+ {% else %}
+ {{ sa.provider }}
+ {% endif %}
+
+ {% endfor %}
+
+
+{% 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/fiesta/settings.py b/fiesta/fiesta/settings.py
index b870b02b..a2b80262 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"