From 8f6acf343750b67dc808ff2c43ddb511ea840d7b Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Thu, 21 May 2026 14:42:40 -0500 Subject: [PATCH 01/19] update allauth to latest release, 65.17.0 --- pyproject.toml | 3 +- uv.lock | 167 +++---------------------------------------------- 2 files changed, 8 insertions(+), 162 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 87c61dc8..da48eab2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,8 +17,7 @@ dependencies = [ "django-storages==1.13.2", "django-avatar==7.1.1", "django_extensions==3.2.1", - "django-oauth2-provider==0.2.6.1", - "django-allauth==0.55.2", + "django-allauth==65.17.0", "django-markdownx==4.0.7", "django-grappelli==2.15.7", "django-ninja==0.21.0", diff --git a/uv.lock b/uv.lock index df4ef8fa..78bc1ac9 100644 --- a/uv.lock +++ b/uv.lock @@ -147,29 +147,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, ] -[[package]] -name = "cffi" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, - { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, - { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, - { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, - { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, - { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, - { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, - { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, -] - [[package]] name = "cfgv" version = "3.4.0" @@ -310,50 +287,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a5/2b/0354ed096bca64dc8e32a7cbcae28b34cb5ad0b1fe2125d6d99583313ac0/coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df", size = 198926, upload-time = "2024-08-04T19:45:28.875Z" }, ] -[[package]] -name = "cryptography" -version = "46.0.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, - { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, - { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, - { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, - { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, - { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, - { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, - { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, - { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, - { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, - { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, - { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, - { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, - { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, - { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, - { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, - { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, - { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, - { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, - { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, - { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, - { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, - { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, - { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, - { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cd/1a8633802d766a0fa46f382a77e096d7e209e0817892929655fe0586ae32/cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", size = 3689163, upload-time = "2025-10-15T23:18:13.821Z" }, - { url = "https://files.pythonhosted.org/packages/4c/59/6b26512964ace6480c3e54681a9859c974172fb141c38df11eadd8416947/cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", size = 3429474, upload-time = "2025-10-15T23:18:15.477Z" }, -] - [[package]] name = "deepmerge" version = "2.0" @@ -363,15 +296,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2d/82/e5d2c1c67d19841e9edc74954c827444ae826978499bde3dfc1d007c8c11/deepmerge-2.0-py3-none-any.whl", hash = "sha256:6de9ce507115cff0bed95ff0ce9ecc31088ef50cbdf09bc90a09349a318b3d00", size = 13475, upload-time = "2024-08-30T05:31:48.659Z" }, ] -[[package]] -name = "defusedxml" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, -] - [[package]] name = "dialogos" version = "0.4" @@ -403,16 +327,16 @@ wheels = [ [[package]] name = "django-allauth" -version = "0.55.2" +version = "65.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "asgiref" }, { name = "django" }, - { name = "pyjwt", extra = ["crypto"] }, - { name = "python3-openid" }, - { name = "requests" }, - { name = "requests-oauthlib" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ed/00/7e23d8edc920de9c34e85708543cb8a5a32d2e6e9bc9e67f6cee49ed4ac4/django-allauth-0.55.2.tar.gz", hash = "sha256:7b713c9947f1917e5c1c5a106fd6208d2c2c71435542fec6d60b01fd7bada3a8", size = 781237, upload-time = "2023-08-30T18:15:14.84Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/55/5580ab770bae3a885d1ef5a49646c3958c49cf67edfe956703a9bf815371/django_allauth-65.17.0.tar.gz", hash = "sha256:72bea057eaaf2952e4e22cd0195e031ef8e7de2cbac065cf35bd0067ef50a1e7", size = 2237395, upload-time = "2026-05-20T17:43:29.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/5f/dbe29bb38ffc32c6c17590caa346fba8055876a54109a6f914b5916f5819/django_allauth-65.17.0-py3-none-any.whl", hash = "sha256:ff041190bc6f9b2854aa5d7215a1f64f1fc8eb0907990690daad19144b7d2757", size = 2054996, upload-time = "2026-05-20T17:43:41.601Z" }, +] [[package]] name = "django-appconf" @@ -543,15 +467,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/59/23d3878e9362459a49ec87029d0d1aac79bbc5c0d6554399cd5ef083066a/django_ninja-0.21.0-py3-none-any.whl", hash = "sha256:b6ed7647212a4647682b134a6f82277ecf02e9d99960777aa75d124685682d25", size = 2280428, upload-time = "2023-02-24T14:17:26.987Z" }, ] -[[package]] -name = "django-oauth2-provider" -version = "0.2.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "shortuuid" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e4/66/06221e1ca3be894f7834d05030df105587e4a5f1ba3477ad8e69f9376479/django-oauth2-provider-0.2.6.1.tar.gz", hash = "sha256:acda20a3555166ec47bacabe962878045caa0901c75634d179d1cd31b169ee52", size = 24849, upload-time = "2014-04-18T17:28:29.981Z" } - [[package]] name = "django-storages" version = "1.13.2" @@ -793,15 +708,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/df/53e8c0c8ccecf360b827a3d2b1b6060644c635c3149a9d6415a6fe4ccf44/numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0", size = 14839720, upload-time = "2023-02-05T19:47:18.906Z" }, ] -[[package]] -name = "oauthlib" -version = "3.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, -] - [[package]] name = "ohmg" version = "0.2.0" @@ -820,7 +726,6 @@ dependencies = [ { name = "django-json-widget" }, { name = "django-markdownx" }, { name = "django-ninja" }, - { name = "django-oauth2-provider" }, { name = "django-storages" }, { name = "gdal" }, { name = "humanize" }, @@ -866,7 +771,7 @@ requires-dist = [ { name = "coverage", marker = "extra == 'dev'" }, { name = "dialogos", specifier = "==0.4" }, { name = "django", specifier = ">4,<5" }, - { name = "django-allauth", specifier = "==0.55.2" }, + { name = "django-allauth", specifier = "==65.17.0" }, { name = "django-avatar", specifier = "==7.1.1" }, { name = "django-celery-results", specifier = "==2.5.0" }, { name = "django-compressor" }, @@ -877,7 +782,6 @@ requires-dist = [ { name = "django-json-widget" }, { name = "django-markdownx", specifier = "==4.0.7" }, { name = "django-ninja", specifier = "==0.21.0" }, - { name = "django-oauth2-provider", specifier = "==0.2.6.1" }, { name = "django-storages", specifier = "==1.13.2" }, { name = "gdal", specifier = ">=3.5,<3.6" }, { name = "humanize" }, @@ -995,15 +899,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/4f/3abf262dc49cb70c2fbb6d38a9a8956a0c79ba2d102e457958bc4f21660f/psycopg2-2.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:4cb9936316d88bfab614666eb9e32995e794ed0f8f6b3b718666c22819c1d7ee", size = 1171627, upload-time = "2022-10-25T16:59:49.855Z" }, ] -[[package]] -name = "pycparser" -version = "2.23" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, -] - [[package]] name = "pydantic" version = "1.10.26" @@ -1036,20 +931,6 @@ version = "1.11" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/19/db/cc09516573e79a35ac73f437bdcf27893939923d1d06b439897ffc7f3217/pygraphviz-1.11.zip", hash = "sha256:a97eb5ced266f45053ebb1f2c6c6d29091690503e3a5c14be7f908b37b06f2d4", size = 120803, upload-time = "2023-06-01T16:23:45.932Z" } -[[package]] -name = "pyjwt" -version = "2.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fb/68/ce067f09fca4abeca8771fe667d89cc347d1e99da3e093112ac329c6020e/pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c", size = 78825, upload-time = "2024-08-01T15:01:08.445Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/84/0fdf9b18ba31d69877bd39c9cd6052b47f3761e9910c15de788e519f079f/PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850", size = 22344, upload-time = "2024-08-01T15:01:06.481Z" }, -] - -[package.optional-dependencies] -crypto = [ - { name = "cryptography" }, -] - [[package]] name = "pymdown-extensions" version = "10.21" @@ -1136,18 +1017,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", size = 10051, upload-time = "2024-02-08T18:32:43.911Z" }, ] -[[package]] -name = "python3-openid" -version = "3.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "defusedxml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5f/4a/29feb8da6c44f77007dcd29518fea73a3d5653ee02a587ae1f17f1f5ddb5/python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf", size = 305600, upload-time = "2020-06-29T12:15:49.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/a5/c6ba13860bdf5525f1ab01e01cc667578d6f1efc8a1dba355700fb04c29b/python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b", size = 133681, upload-time = "2020-06-29T12:15:47.502Z" }, -] - [[package]] name = "pytz" version = "2025.2" @@ -1223,19 +1092,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d2/f4/274d1dbe96b41cf4e0efb70cbced278ffd61b5c7bb70338b62af94ccb25b/requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", size = 62822, upload-time = "2023-01-12T16:24:52.241Z" }, ] -[[package]] -name = "requests-oauthlib" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "oauthlib" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, -] - [[package]] name = "rio-tiler" version = "5.0.3" @@ -1315,15 +1171,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/65/3f0dba35760d902849d39d38c0a72767794b1963227b69a587f8a336d08c/setuptools-75.3.2-py3-none-any.whl", hash = "sha256:90ab613b6583fc02d5369cbca13ea26ea0e182d1df2d943ee9cbe81d4c61add9", size = 1251198, upload-time = "2025-03-12T00:02:17.554Z" }, ] -[[package]] -name = "shortuuid" -version = "1.0.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/e2/bcf761f3bff95856203f9559baf3741c416071dd200c0fc19fad7f078f86/shortuuid-1.0.13.tar.gz", hash = "sha256:3bb9cf07f606260584b1df46399c0b87dd84773e7b25912b7e391e30797c5e72", size = 9662, upload-time = "2024-03-11T20:11:06.879Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/44/21d6bf170bf40b41396480d8d49ad640bca3f2b02139cd52aa1e272830a5/shortuuid-1.0.13-py3-none-any.whl", hash = "sha256:a482a497300b49b4953e15108a7913244e1bb0d41f9d332f5e9925dba33a3c5a", size = 10529, upload-time = "2024-03-11T20:11:04.807Z" }, -] - [[package]] name = "six" version = "1.17.0" From c2100027eeff663e0964cbe48aed64773a985da1 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Thu, 21 May 2026 14:44:17 -0500 Subject: [PATCH 02/19] remove old auth template overrides and use new pattern --- ohmg/frontend/templates/account/README.md | 1 - ohmg/frontend/templates/account/base.html | 1 - ohmg/frontend/templates/account/login.html | 18 ----- ohmg/frontend/templates/account/logout.html | 21 ------ ohmg/frontend/templates/account/signup.html | 16 ----- .../templates/allauth/layouts/base.html | 70 +++++++++++++++++++ ohmg/frontend/templates/base.html | 2 - 7 files changed, 70 insertions(+), 59 deletions(-) delete mode 100644 ohmg/frontend/templates/account/README.md delete mode 100644 ohmg/frontend/templates/account/base.html delete mode 100644 ohmg/frontend/templates/account/login.html delete mode 100644 ohmg/frontend/templates/account/logout.html delete mode 100644 ohmg/frontend/templates/account/signup.html create mode 100644 ohmg/frontend/templates/allauth/layouts/base.html diff --git a/ohmg/frontend/templates/account/README.md b/ohmg/frontend/templates/account/README.md deleted file mode 100644 index 36fbae7a..00000000 --- a/ohmg/frontend/templates/account/README.md +++ /dev/null @@ -1 +0,0 @@ -This base template inherits from the main app base, and it is in turn inherited by all of the default allauth templates. \ No newline at end of file diff --git a/ohmg/frontend/templates/account/base.html b/ohmg/frontend/templates/account/base.html deleted file mode 100644 index 838aa183..00000000 --- a/ohmg/frontend/templates/account/base.html +++ /dev/null @@ -1 +0,0 @@ -{% extends 'base.html' %} \ No newline at end of file diff --git a/ohmg/frontend/templates/account/login.html b/ohmg/frontend/templates/account/login.html deleted file mode 100644 index e1f5888e..00000000 --- a/ohmg/frontend/templates/account/login.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "account/base.html" %} - -{% load i18n %} -{% load account socialaccount %} - -{% block head_title %}{% trans "Sign In" %}{% endblock %} - -{% block content %} - -{% include '_titlebar.html' with title="Sign In" %} - -
- -
- -{% endblock %} diff --git a/ohmg/frontend/templates/account/logout.html b/ohmg/frontend/templates/account/logout.html deleted file mode 100644 index 75cd9a90..00000000 --- a/ohmg/frontend/templates/account/logout.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "account/base.html" %} - -{% load i18n %} - -{% block head_title %}{% trans "Sign Out" %}{% endblock %} - -{% block content %} -{% include '_titlebar.html' with title="Sign Out" %} - -

{% trans 'Are you sure you want to sign out?' %}

- -
- {% csrf_token %} - {% if redirect_field_value %} - - {% endif %} - -
- - -{% endblock %} diff --git a/ohmg/frontend/templates/account/signup.html b/ohmg/frontend/templates/account/signup.html deleted file mode 100644 index 4b5e5c02..00000000 --- a/ohmg/frontend/templates/account/signup.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "account/base.html" %} - -{% load i18n %} - -{% block head_title %}{% trans "Signup" %}{% endblock %} - -{% block content %} -{% include '_titlebar.html' with title="Sign Up" %} - -
- -
- -{% endblock %} diff --git a/ohmg/frontend/templates/allauth/layouts/base.html b/ohmg/frontend/templates/allauth/layouts/base.html new file mode 100644 index 00000000..ea20c57b --- /dev/null +++ b/ohmg/frontend/templates/allauth/layouts/base.html @@ -0,0 +1,70 @@ +{% extends 'base.html' %} + +{% load avatar_tags %} +{% load i18n %} + +{% block body %} + {% if user.is_authenticated %} + {% include '_titlebar.html' with title=user.username show_avatar=True show_profile_link=True %} + {% endif %} +
+ +
+ {% block content %} + {% endblock content %} +{% endblock body %} \ No newline at end of file diff --git a/ohmg/frontend/templates/base.html b/ohmg/frontend/templates/base.html index 5fd1d49d..f895d97b 100644 --- a/ohmg/frontend/templates/base.html +++ b/ohmg/frontend/templates/base.html @@ -80,8 +80,6 @@ {% include "_announcements.html" %} {% include "_messages.html" %} {% block body_outer %} - - {% block content %}{% endblock %} {% block body %}{% endblock body %} {% block sidebar %}{% endblock sidebar %} {% endblock body_outer %} From 20f5b470888f6cb4c5634222199d07f6b8e0797a Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Thu, 21 May 2026 14:47:22 -0500 Subject: [PATCH 03/19] initial account management update --- ohmg/frontend/templates/_navbar.html | 7 +++-- ohmg/frontend/templates/_titlebar.html | 9 +++++++ ohmg/frontend/templates/accounts/profile.html | 26 +++---------------- ohmg/frontend/templates/avatar/base.html | 4 ++- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/ohmg/frontend/templates/_navbar.html b/ohmg/frontend/templates/_navbar.html index 9e0ed5ca..f0bcd1b4 100644 --- a/ohmg/frontend/templates/_navbar.html +++ b/ohmg/frontend/templates/_navbar.html @@ -56,10 +56,13 @@ {% else %} {% endif %} diff --git a/ohmg/frontend/templates/_titlebar.html b/ohmg/frontend/templates/_titlebar.html index fff4c6be..2d1b118f 100644 --- a/ohmg/frontend/templates/_titlebar.html +++ b/ohmg/frontend/templates/_titlebar.html @@ -1,9 +1,14 @@ +{% load avatar_tags %} +
{% if img_url %} profile pic {% endif %} + {% if show_avatar %} + profile pic + {% endif %} {% if lead_icon %} @@ -14,6 +19,10 @@

{{title}}

{{subtitle}}

+ {% elif show_profile_link %} + +

view public profile →

+
{% endif %}
{% if navlinks or feed_url %} diff --git a/ohmg/frontend/templates/accounts/profile.html b/ohmg/frontend/templates/accounts/profile.html index a07de11e..ce62e8b8 100644 --- a/ohmg/frontend/templates/accounts/profile.html +++ b/ohmg/frontend/templates/accounts/profile.html @@ -6,30 +6,12 @@ {% block main_content %} +{% if user.username == PROFILE_USER.username %} +{% include '_titlebar.html' with title=PROFILE_USER.username img_url=PROFILE_USER.image_url subtitle="manage my account →" %} +{% else %} {% include '_titlebar.html' with title=PROFILE_USER.username img_url=PROFILE_USER.image_url %} - -{% if CONTEXT.user.username == PROFILE_USER.username %} -
-
-

My Account

-
-
- - {% if CONTEXT.user.api_keys|length > 0 %} -

API Keys

- {% for key in CONTEXT.user.api_keys %} -
{{key}}
- {% endfor %} - {% endif %} -
-
{% endif %} +

Session History

diff --git a/ohmg/frontend/templates/avatar/base.html b/ohmg/frontend/templates/avatar/base.html index 63913c18..944a72e2 100644 --- a/ohmg/frontend/templates/avatar/base.html +++ b/ohmg/frontend/templates/avatar/base.html @@ -1 +1,3 @@ -{% extends "base.html" %} \ No newline at end of file +{% extends "allauth/layouts/base.html" %} + +{% block content %}{% endblock %} From b75fde476e74f0481c22aa749d4e28baa3c3aea1 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Thu, 21 May 2026 15:05:49 -0500 Subject: [PATCH 04/19] add optional settings for osm oauth client config --- .env.example | 6 +++++- ohmg/conf/settings.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 1636ebc6..218086c1 100644 --- a/.env.example +++ b/.env.example @@ -71,4 +71,8 @@ GEOREFERENCE_SESSION_LENGTH=600 ## Optionally set up an account on Prosopo to power a captcha during sign up # PROSOPO_SITE_KEY= -# PROSOPO_SECRET_KEY= \ No newline at end of file +# PROSOPO_SECRET_KEY= + +## Optionally include config for OAuth 2 client in OpenStreetMap +# OSM_OAUTH_APP_CLIENT_ID= +# OSM_OAUTH_APP_SECRET= diff --git a/ohmg/conf/settings.py b/ohmg/conf/settings.py index bfbb262e..9b64e0a7 100644 --- a/ohmg/conf/settings.py +++ b/ohmg/conf/settings.py @@ -77,6 +77,7 @@ "allauth", "allauth.account", "allauth.socialaccount", + "allauth.socialaccount.providers.openid_connect", "pinax.announcements", "storages", "django_extensions", @@ -246,6 +247,7 @@ "django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.security.SecurityMiddleware", "django.contrib.redirects.middleware.RedirectFallbackMiddleware", + "allauth.account.middleware.AccountMiddleware", "ohmg.conf.middleware.CORSMiddleware", ) @@ -343,10 +345,36 @@ ACCOUNT_ADAPTER = "ohmg.accounts.adapter.AccountAdapter" ACCOUNT_FORMS = {"signup": "ohmg.accounts.forms.OHMGSignupForm"} -ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_SIGNUP_REDIRECT_URL = "/" ACCOUNT_USERNAME_VALIDATORS = "ohmg.accounts.validators.custom_username_validators" +ACCOUNT_SIGNUP_FIELDS = ["email*", "username*", "password1*", "password2*"] + +## create empty holder for providers and add them only if credentials have been +## provided +SOCIALACCOUNT_PROVIDERS = { + "openid_connect": {"APPS": []}, +} + +## look for OSM auth credentials and use them if present +OSM_OAUTH_APP_CLIENT_ID = os.getenv("OSM_OAUTH_APP_CLIENT_ID") +OSM_OAUTH_APP_SECRET = os.getenv("OSM_OAUTH_APP_SECRET") + +if OSM_OAUTH_APP_CLIENT_ID: + SOCIALACCOUNT_PROVIDERS["openid_connect"]["APPS"].append( + { + "provider_id": "openstreetmap", + "name": "OpenStreetMap", + "client_id": OSM_OAUTH_APP_CLIENT_ID, + "secret": OSM_OAUTH_APP_SECRET, + "settings": { + "server_url": "https://www.openstreetmap.org/.well-known/openid-configuration", + "scope": ["openid", "read_prefs"], + }, + } + ) + + # prep/georef session duration before expiration (seconds) GEOREFERENCE_SESSION_LENGTH = int(os.getenv("GEOREFERENCE_SESSION_LENGTH", 600)) From 8997a358434f426908e2cec49ed6f217c5c99f76 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sat, 23 May 2026 10:55:16 -0500 Subject: [PATCH 05/19] improve tabs style --- ohmg/frontend/static/css/bulma-overrides.css | 26 +++++++++++++++++++ .../templates/allauth/layouts/base.html | 18 ++++++------- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/ohmg/frontend/static/css/bulma-overrides.css b/ohmg/frontend/static/css/bulma-overrides.css index c4c42597..6e3c4927 100644 --- a/ohmg/frontend/static/css/bulma-overrides.css +++ b/ohmg/frontend/static/css/bulma-overrides.css @@ -125,3 +125,29 @@ button.button.is-primary { button.button > span.icon > svg { font-size: 2em; } + +.tabs > ul { + border: none; + margin-top: 1em; +} + +.tabs a { + border: none; +} + +.tabs > ul > li { + border-bottom: 1px solid transparent; +} + +.tabs > ul > li > a { + color: var(--bulma-text-color) +} + +.tabs > ul > li.is-active > a, .tabs > ul > li:hover > a { + color: var(--theme-highlight-color); + text-decoration: none; +} + +.tabs > ul > li.is-active, .tabs > ul > li:hover { + border-bottom-color: var(--theme-highlight-color); +} diff --git a/ohmg/frontend/templates/allauth/layouts/base.html b/ohmg/frontend/templates/allauth/layouts/base.html index ea20c57b..fe9294bf 100644 --- a/ohmg/frontend/templates/allauth/layouts/base.html +++ b/ohmg/frontend/templates/allauth/layouts/base.html @@ -12,53 +12,53 @@ {% if user.is_authenticated %} {% url 'account_email' as email_url_ %} {% if email_url_ %} -
  • +
  • {% endif %} {% url 'account_change_password' as change_password_url_ %} {% if change_password_url_ %} -
  • +
  • {% trans "Change Password" %}
  • {% endif %} -
  • +
  • {% trans "Change Avatar" %}
  • {% url 'socialaccount_connections' as connections_url_ %} {% if connections_url_ %} -
  • +
  • {% trans "Account Connections" %}
  • {% endif %} {% url 'mfa_index' as mfa_url_ %} {% if mfa_url_ %} -
  • +
  • {% trans "Two-Factor Authentication" %}
  • {% endif %} {% url 'usersessions_list' as usersessions_list_url_ %} {% if usersessions_list_url_ %} -
  • +
  • {% trans "Sessions" %}
  • {% endif %} {% url 'account_logout' as logout_url_ %} {% if logout_url_ %} -
  • +
  • {% trans "Sign Out" %}
  • {% endif %} {% else %} {% url 'account_login' as login_url_ %} {% if login_url_ %} -
  • +
  • {% endif %} {% url 'account_signup' as signup_url_ %} {% if signup_url_ %} -
  • +
  • {% endif %} From a8bac38088312ded35d30e169cbe0b55565e1a86 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 24 May 2026 13:00:59 -0500 Subject: [PATCH 06/19] add osm logo for provider link --- .../static/img/OpenStreetMap logo 2011.svg | 758 ++++++++++++++++++ .../templates/allauth/elements/provider.html | 11 + 2 files changed, 769 insertions(+) create mode 100644 ohmg/frontend/static/img/OpenStreetMap logo 2011.svg create mode 100644 ohmg/frontend/templates/allauth/elements/provider.html diff --git a/ohmg/frontend/static/img/OpenStreetMap logo 2011.svg b/ohmg/frontend/static/img/OpenStreetMap logo 2011.svg new file mode 100644 index 00000000..cc5e0d48 --- /dev/null +++ b/ohmg/frontend/static/img/OpenStreetMap logo 2011.svg @@ -0,0 +1,758 @@ + + + + OpenStreetMap logo 2011 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + OpenStreetMap logo 2011 + + + Ken Vermette + + + + April 2011 + + + OpenStreetMap.org + + + Replacement logo for OpenStreetMap Foundation + + + OSM openstreetmap logo + + + http://wiki.openstreetmap.org/wiki/File:Public-images-osm_logo.svg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 010110010011010110010011 + 010110010011010110010011 + + + \ No newline at end of file diff --git a/ohmg/frontend/templates/allauth/elements/provider.html b/ohmg/frontend/templates/allauth/elements/provider.html new file mode 100644 index 00000000..c032474f --- /dev/null +++ b/ohmg/frontend/templates/allauth/elements/provider.html @@ -0,0 +1,11 @@ +{% load static %} + +
  • + {% if attrs.name == "OpenStreetMap" %} + + + + {% else %} + {{ attrs.name }} + {% endif %} +
  • From 61a0067aaf1a0cd0d9f5e42b49344e09fdc72fde Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 24 May 2026 13:23:17 -0500 Subject: [PATCH 07/19] override allauth elements to include extra style as needed --- ohmg/accounts/validators.py | 2 +- ohmg/frontend/static/css/site_base.css | 28 ++++++++++++++++++- ohmg/frontend/templates/_navbar.html | 6 ++-- .../templates/allauth/elements/button.html | 13 +++++++++ .../templates/allauth/elements/form.html | 8 ++++++ .../templates/allauth/elements/hr.html | 1 + .../allauth/elements/provider_list.html | 7 +++++ .../templates/allauth/layouts/base.html | 4 +-- 8 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 ohmg/frontend/templates/allauth/elements/button.html create mode 100644 ohmg/frontend/templates/allauth/elements/form.html create mode 100644 ohmg/frontend/templates/allauth/elements/hr.html create mode 100644 ohmg/frontend/templates/allauth/elements/provider_list.html diff --git a/ohmg/accounts/validators.py b/ohmg/accounts/validators.py index a110aa4b..2378231d 100644 --- a/ohmg/accounts/validators.py +++ b/ohmg/accounts/validators.py @@ -7,7 +7,7 @@ class OHMGUnicodeUsernameValidator(UnicodeUsernameValidator): """ regex = r"^[\w.+-]+\Z" - message = "Username may contain only letters, numbers, and . + - _" + message = "Username may contain only letters, numbers, and these characters: + - _ ." custom_username_validators = [ diff --git a/ohmg/frontend/static/css/site_base.css b/ohmg/frontend/static/css/site_base.css index f8cc49a1..59b8767f 100644 --- a/ohmg/frontend/static/css/site_base.css +++ b/ohmg/frontend/static/css/site_base.css @@ -86,7 +86,7 @@ samp { } h1 { - font-size: 2em; + font-size: 1.8em; } h2 { font-size: 1.6em; @@ -630,4 +630,30 @@ img.lead-image { #step-list div > p { font-size: 1.25em; margin-bottom: 0px; +} + +/* ALLAUTH TEMPLATE STYLES */ + +.allauth-form > p { + display: flex; + flex-direction: column; + align-items: start; +} + +.allauth-form > p:has(input[type="radio"]), .allauth-form > p:has(input[type="checkbox"]) { + display: block; + font-size: unset; +} + +.allauth-form > p > label { + font-size: .8em; +} + + +.allauth-form > p > input { + text-align: left; +} + +.allauth-form button { + width: fit-content !important; } \ No newline at end of file diff --git a/ohmg/frontend/templates/_navbar.html b/ohmg/frontend/templates/_navbar.html index f0bcd1b4..130e3b6a 100644 --- a/ohmg/frontend/templates/_navbar.html +++ b/ohmg/frontend/templates/_navbar.html @@ -51,17 +51,15 @@
    {% else %} {% endif %} diff --git a/ohmg/frontend/templates/allauth/elements/button.html b/ohmg/frontend/templates/allauth/elements/button.html new file mode 100644 index 00000000..494c5b02 --- /dev/null +++ b/ohmg/frontend/templates/allauth/elements/button.html @@ -0,0 +1,13 @@ +{% load allauth %} +{% comment %} djlint:off {% endcomment %} +<{% if attrs.href %}a href="{{ attrs.href }}"{% else %}button{% endif %} +{% if attrs.form %}form="{{ attrs.form }}"{% endif %} +{% if attrs.id %}id="{{ attrs.id }}"{% endif %} +{% if attrs.name %}name="{{ attrs.name }}"{% endif %} +{% if attrs.value %}value="{{ attrs.value }}"{% endif %} +{% if attrs.type %}type="{{ attrs.type }}"{% endif %} +class="button is-primary" +> +{% slot %} +{% endslot %} + diff --git a/ohmg/frontend/templates/allauth/elements/form.html b/ohmg/frontend/templates/allauth/elements/form.html new file mode 100644 index 00000000..345152d3 --- /dev/null +++ b/ohmg/frontend/templates/allauth/elements/form.html @@ -0,0 +1,8 @@ +{% load allauth %} +
    + {% slot body %} + {% endslot %} + {% slot actions %} + {% endslot %} +
    diff --git a/ohmg/frontend/templates/allauth/elements/hr.html b/ohmg/frontend/templates/allauth/elements/hr.html new file mode 100644 index 00000000..64eceb3b --- /dev/null +++ b/ohmg/frontend/templates/allauth/elements/hr.html @@ -0,0 +1 @@ +
    diff --git a/ohmg/frontend/templates/allauth/elements/provider_list.html b/ohmg/frontend/templates/allauth/elements/provider_list.html new file mode 100644 index 00000000..e96392f8 --- /dev/null +++ b/ohmg/frontend/templates/allauth/elements/provider_list.html @@ -0,0 +1,7 @@ +{% load allauth %} +
      + {% slot %} + {% endslot %} +
    + +

    How does third-party authentication work? Learn more in the docs ↗.

    diff --git a/ohmg/frontend/templates/allauth/layouts/base.html b/ohmg/frontend/templates/allauth/layouts/base.html index fe9294bf..ca3a5f25 100644 --- a/ohmg/frontend/templates/allauth/layouts/base.html +++ b/ohmg/frontend/templates/allauth/layouts/base.html @@ -18,7 +18,7 @@ {% endif %} {% url 'account_change_password' as change_password_url_ %} {% if change_password_url_ %} -
  • +
  • {% trans "Change Password" %}
  • {% endif %} @@ -52,7 +52,7 @@ {% else %} {% url 'account_login' as login_url_ %} {% if login_url_ %} -
  • {% trans "Sign In" %}
  • {% endif %} From 5a2c8dbe0bd66eb31f7805dae39bc925c3ecaf07 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 24 May 2026 15:42:13 -0500 Subject: [PATCH 08/19] migrate avatar templates ahead of changes --- ohmg/frontend/templates/avatar/change.html | 21 +++++++++++++++++++ .../templates/avatar/confirm_delete.html | 17 +++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 ohmg/frontend/templates/avatar/change.html create mode 100644 ohmg/frontend/templates/avatar/confirm_delete.html diff --git a/ohmg/frontend/templates/avatar/change.html b/ohmg/frontend/templates/avatar/change.html new file mode 100644 index 00000000..8d273595 --- /dev/null +++ b/ohmg/frontend/templates/avatar/change.html @@ -0,0 +1,21 @@ +{% extends "avatar/base.html" %} +{% load i18n avatar_tags %} + +{% block content %} +

    {% trans "Your current avatar: " %}

    + {% avatar user %} + {% if not avatars %} +

    {% trans "You haven't uploaded an avatar yet. Please upload one now." %}

    + {% else %} +
    +
      + {{ primary_avatar_form.as_ul }} +
    +

    {% csrf_token %}

    +
    + {% endif %} +
    + {{ upload_avatar_form.as_p }} +

    {% csrf_token %}

    +
    +{% endblock %} diff --git a/ohmg/frontend/templates/avatar/confirm_delete.html b/ohmg/frontend/templates/avatar/confirm_delete.html new file mode 100644 index 00000000..aad11a9d --- /dev/null +++ b/ohmg/frontend/templates/avatar/confirm_delete.html @@ -0,0 +1,17 @@ +{% extends "avatar/base.html" %} +{% load i18n %} + +{% block content %} + {% if not avatars %} + {% url 'avatar_change' as avatar_change_url %} +

    {% blocktrans %}You have no avatars to delete. Please upload one now.{% endblocktrans %}

    + {% else %} +

    {% trans "Please select the avatars that you would like to delete." %}

    +
    +
      + {{ delete_avatar_form.as_ul }} +
    +

    {% csrf_token %}

    +
    + {% endif %} +{% endblock %} From 04736546e954fcfdc73af28af3edab9ac4813f37 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 24 May 2026 15:55:04 -0500 Subject: [PATCH 09/19] streamline avatar management and page styles --- ohmg/frontend/static/css/site_base.css | 12 +++++- ohmg/frontend/templates/avatar/change.html | 38 ++++++++++++++++--- .../templates/avatar/confirm_delete.html | 15 ++++++-- 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/ohmg/frontend/static/css/site_base.css b/ohmg/frontend/static/css/site_base.css index 59b8767f..0997aafb 100644 --- a/ohmg/frontend/static/css/site_base.css +++ b/ohmg/frontend/static/css/site_base.css @@ -656,4 +656,14 @@ img.lead-image { .allauth-form button { width: fit-content !important; -} \ No newline at end of file +} + +/* AVATAR MANAGEMENT TEMPLATES */ + +ul#avatar-select-form { + margin-bottom: .5em; +} +ul#avatar-select-form > li > div { + display: flex; + gap: 15px; +} diff --git a/ohmg/frontend/templates/avatar/change.html b/ohmg/frontend/templates/avatar/change.html index 8d273595..4ae356b2 100644 --- a/ohmg/frontend/templates/avatar/change.html +++ b/ohmg/frontend/templates/avatar/change.html @@ -2,20 +2,46 @@ {% load i18n avatar_tags %} {% block content %} -

    {% trans "Your current avatar: " %}

    +

    {% trans "Current avatar: " %}

    {% avatar user %} {% if not avatars %} -

    {% trans "You haven't uploaded an avatar yet. Please upload one now." %}

    - {% else %} + (default) + {% elif avatars|length == 1 %} + remove image → + {% endif %} + {% if avatars|length > 1 %}
    -
      +
        {{ primary_avatar_form.as_ul }}
      -

      {% csrf_token %}

      +

      {% csrf_token %} + + remove images → +

      {% endif %} +
      +

      Upload a new image to change your avatar:

      + {% csrf_token %} {{ upload_avatar_form.as_p }} -

      {% csrf_token %}

      + {% endblock %} + diff --git a/ohmg/frontend/templates/avatar/confirm_delete.html b/ohmg/frontend/templates/avatar/confirm_delete.html index aad11a9d..12c15480 100644 --- a/ohmg/frontend/templates/avatar/confirm_delete.html +++ b/ohmg/frontend/templates/avatar/confirm_delete.html @@ -6,12 +6,21 @@ {% url 'avatar_change' as avatar_change_url %}

      {% blocktrans %}You have no avatars to delete. Please upload one now.{% endblocktrans %}

      {% else %} -

      {% trans "Please select the avatars that you would like to delete." %}

      +

      {% trans "Select the avatars that you would like to delete." %}

      -
        +
          {{ delete_avatar_form.as_ul }}
        -

        {% csrf_token %}

        +

        {% csrf_token %}

        {% endif %} + {% endblock %} From d6dff54c947a3601b33ebe0555e225f3a9351aff Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 24 May 2026 16:02:43 -0500 Subject: [PATCH 10/19] migrate allauth signup template ahead of changes --- ohmg/frontend/templates/account/signup.html | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 ohmg/frontend/templates/account/signup.html diff --git a/ohmg/frontend/templates/account/signup.html b/ohmg/frontend/templates/account/signup.html new file mode 100644 index 00000000..c98071b3 --- /dev/null +++ b/ohmg/frontend/templates/account/signup.html @@ -0,0 +1,45 @@ +{% extends "account/base_entrance.html" %} +{% load allauth i18n %} +{% block head_title %} + {% trans "Signup" %} +{% endblock head_title %} +{% block content %} + {% element h1 %} + {% trans "Sign Up" %} + {% endelement %} + {% setvar link %} + + {% endsetvar %} + {% setvar end_link %} + + {% endsetvar %} + {% element p %} + {% blocktranslate %}Already have an account? Then please {{ link }}sign in{{ end_link }}.{% endblocktranslate %} + {% endelement %} + {% if not SOCIALACCOUNT_ONLY %} + {% url 'account_signup' as action_url %} + {% element form form=form method="post" action=action_url tags="entrance,signup" %} + {% slot body %} + {% csrf_token %} + {% element fields form=form unlabeled=True %} + {% endelement %} + {{ redirect_field }} + {% endslot %} + {% slot actions %} + {% element button tags="prominent,signup" type="submit" %} + {% trans "Sign Up" %} + {% endelement %} + {% endslot %} + {% endelement %} + {% endif %} + {% if PASSKEY_SIGNUP_ENABLED %} + {% element hr %} + {% endelement %} + {% element button href=signup_by_passkey_url tags="prominent,signup,outline,primary" %} + {% trans "Sign up using a passkey" %} + {% endelement %} + {% endif %} + {% if SOCIALACCOUNT_ENABLED %} + {% include "socialaccount/snippets/login.html" with page_layout="entrance" %} + {% endif %} +{% endblock content %} From 390f6a414a53ceebdf3f95734445b6d5d41443be Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Sun, 24 May 2026 16:18:59 -0500 Subject: [PATCH 11/19] implement captcha on new signup form --- ohmg/frontend/templates/_captcha_submit.html | 2 +- ohmg/frontend/templates/account/signup.html | 45 ++++++++++++++------ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/ohmg/frontend/templates/_captcha_submit.html b/ohmg/frontend/templates/_captcha_submit.html index 633c86b5..83f18f61 100644 --- a/ohmg/frontend/templates/_captcha_submit.html +++ b/ohmg/frontend/templates/_captcha_submit.html @@ -1,4 +1,4 @@ -
        +
        diff --git a/ohmg/frontend/templates/account/signup.html b/ohmg/frontend/templates/account/signup.html index c98071b3..0ad9ba00 100644 --- a/ohmg/frontend/templates/account/signup.html +++ b/ohmg/frontend/templates/account/signup.html @@ -17,20 +17,37 @@ {% blocktranslate %}Already have an account? Then please {{ link }}sign in{{ end_link }}.{% endblocktranslate %} {% endelement %} {% if not SOCIALACCOUNT_ONLY %} - {% url 'account_signup' as action_url %} - {% element form form=form method="post" action=action_url tags="entrance,signup" %} - {% slot body %} - {% csrf_token %} - {% element fields form=form unlabeled=True %} - {% endelement %} - {{ redirect_field }} - {% endslot %} - {% slot actions %} - {% element button tags="prominent,signup" type="submit" %} - {% trans "Sign Up" %} - {% endelement %} - {% endslot %} - {% endelement %} +
        + +

        + + +

        +

        + + +

        +

        + + +

        +

        + + +

        + {% if PROSOPO_SITE_KEY and not user.is_authenticated %} +

        By signing up, you agree to the terms described
        in the Data Agreement ↗.

        + {% include '_captcha_submit.html' %} + {% else %} +

        + + {% endif %} +
        + {% endif %} {% if PASSKEY_SIGNUP_ENABLED %} {% element hr %} From c0393ecf40962359e3a92651dca7587d004f6fd9 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Wed, 27 May 2026 12:02:01 -0500 Subject: [PATCH 12/19] remove old signin/signup modal --- ohmg/frontend/templates/_navbar.html | 95 ---------------------------- 1 file changed, 95 deletions(-) diff --git a/ohmg/frontend/templates/_navbar.html b/ohmg/frontend/templates/_navbar.html index 130e3b6a..5a51afeb 100644 --- a/ohmg/frontend/templates/_navbar.html +++ b/ohmg/frontend/templates/_navbar.html @@ -66,71 +66,6 @@
        - -
        - -
        From ff05960675969b52df460517d7fb478282ca14c9 Mon Sep 17 00:00:00 2001 From: Adam Cox Date: Wed, 27 May 2026 12:02:23 -0500 Subject: [PATCH 13/19] add next param to all login links --- ohmg/conf/http.py | 1 + .../src/components/Georeferencer.svelte | 14 +++----------- .../src/components/Splitter.svelte | 9 ++++----- .../src/components/common/SigninReminder.svelte | 9 ++++++++- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/ohmg/conf/http.py b/ohmg/conf/http.py index 1b63eca5..92cb8eb3 100644 --- a/ohmg/conf/http.py +++ b/ohmg/conf/http.py @@ -68,6 +68,7 @@ def generate_ohmg_context(request) -> dict: "X-CSRFToken": csrf_token, }, "max_tiles_loading": settings.OPENLAYERS_MAX_TILES_LOADING, + "path": request.path, } diff --git a/ohmg/frontend/svelte_components/src/components/Georeferencer.svelte b/ohmg/frontend/svelte_components/src/components/Georeferencer.svelte index fbacba91..ff7e680b 100644 --- a/ohmg/frontend/svelte_components/src/components/Georeferencer.svelte +++ b/ohmg/frontend/svelte_components/src/components/Georeferencer.svelte @@ -52,6 +52,7 @@ import ExpandElement from './interfaces/widgets/ExpandElement.svelte'; import ExtendSessionModal from './modals/ExtendSessionModal.svelte'; import InfoModalButton from './buttons/InfoModalButton.svelte'; + import SigninReminder from './common/SigninReminder.svelte'; export let CONTEXT; export let REGION; @@ -869,11 +870,7 @@
    -

    - Feel free to experiment with the interface, but to submit your work you must - sign in or - sign up. -

    +

    Are you sure you want to cancel this session?

    @@ -919,12 +916,7 @@