mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-12-06 12:51:41 +01:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5ddbb8004 | ||
|
|
c45d5d7325 | ||
|
|
c679ec0646 | ||
|
|
69a51bb08a | ||
|
|
442c893c39 | ||
|
|
33df15f882 | ||
|
|
5d56f0a66c | ||
|
|
0fbdbf3a8d | ||
|
|
5291bf6896 | ||
|
|
bd6c0fede5 | ||
|
|
23fe1703c3 | ||
|
|
9139b0da56 | ||
|
|
80145b313f | ||
|
|
e96bdd12f9 | ||
|
|
513b7b88f4 | ||
|
|
5e3fc5c1cb | ||
|
|
d3069db046 | ||
|
|
24863eaf9e | ||
|
|
d138bd61c5 | ||
|
|
bff20ddd5d | ||
|
|
493e694410 | ||
|
|
8c41d9da58 | ||
|
|
9e0358a3ce | ||
|
|
19bb6856a2 | ||
|
|
9751315b97 |
@ -25,7 +25,7 @@ before_script:
|
|||||||
pre-commit-check:
|
pre-commit-check:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
stage: pre-commit
|
stage: pre-commit
|
||||||
image: python:3.11-bookworm
|
image: python:3.11-trixie
|
||||||
# variables:
|
# variables:
|
||||||
# PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
|
# PRE_COMMIT_HOME: ${CI_PROJECT_DIR}/.cache/pre-commit
|
||||||
# cache:
|
# cache:
|
||||||
@ -65,7 +65,7 @@ test-3.8-core:
|
|||||||
|
|
||||||
test-3.9-core:
|
test-3.9-core:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.9-bookworm
|
image: python:3.9-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py39-core
|
- tox -e py39-core
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -77,7 +77,7 @@ test-3.9-core:
|
|||||||
|
|
||||||
test-3.10-core:
|
test-3.10-core:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.10-bookworm
|
image: python:3.10-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py310-core
|
- tox -e py310-core
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -89,7 +89,7 @@ test-3.10-core:
|
|||||||
|
|
||||||
test-3.11-core:
|
test-3.11-core:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.11-bookworm
|
image: python:3.11-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py311-core
|
- tox -e py311-core
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -101,7 +101,7 @@ test-3.11-core:
|
|||||||
|
|
||||||
test-3.12-core:
|
test-3.12-core:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.12-bookworm
|
image: python:3.12-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py312-core
|
- tox -e py312-core
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -125,7 +125,7 @@ test-3.8-all:
|
|||||||
|
|
||||||
test-3.9-all:
|
test-3.9-all:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.9-bookworm
|
image: python:3.9-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py39-all
|
- tox -e py39-all
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -137,7 +137,7 @@ test-3.9-all:
|
|||||||
|
|
||||||
test-3.10-all:
|
test-3.10-all:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.10-bookworm
|
image: python:3.10-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py310-all
|
- tox -e py310-all
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -149,7 +149,7 @@ test-3.10-all:
|
|||||||
|
|
||||||
test-3.11-all:
|
test-3.11-all:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.11-bookworm
|
image: python:3.11-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py311-all
|
- tox -e py311-all
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -162,7 +162,7 @@ test-3.11-all:
|
|||||||
|
|
||||||
test-3.12-all:
|
test-3.12-all:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.12-bookworm
|
image: python:3.12-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e py312-all
|
- tox -e py312-all
|
||||||
artifacts:
|
artifacts:
|
||||||
@ -174,7 +174,7 @@ test-3.12-all:
|
|||||||
|
|
||||||
build-test:
|
build-test:
|
||||||
stage: test
|
stage: test
|
||||||
image: python:3.11-bookworm
|
image: python:3.11-trixie
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- python -m pip install --upgrade pip
|
- python -m pip install --upgrade pip
|
||||||
@ -193,13 +193,13 @@ build-test:
|
|||||||
|
|
||||||
test-docs:
|
test-docs:
|
||||||
<<: *only-default
|
<<: *only-default
|
||||||
image: python:3.11-bookworm
|
image: python:3.11-trixie
|
||||||
script:
|
script:
|
||||||
- tox -e docs
|
- tox -e docs
|
||||||
|
|
||||||
deploy_production:
|
deploy_production:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
image: python:3.11-bookworm
|
image: python:3.11-trixie
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- python -m pip install --upgrade pip
|
- python -m pip install --upgrade pip
|
||||||
|
|||||||
@ -25,12 +25,12 @@ exclude: |
|
|||||||
repos:
|
repos:
|
||||||
# Code Upgrades
|
# Code Upgrades
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v3.21.0
|
rev: v3.21.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args: [--py38-plus]
|
args: [--py38-plus]
|
||||||
- repo: https://github.com/adamchainz/django-upgrade
|
- repo: https://github.com/adamchainz/django-upgrade
|
||||||
rev: 1.29.0
|
rev: 1.29.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: django-upgrade
|
- id: django-upgrade
|
||||||
args: [--target-version=4.2]
|
args: [--target-version=4.2]
|
||||||
@ -64,7 +64,7 @@ repos:
|
|||||||
- id: check-executables-have-shebangs
|
- id: check-executables-have-shebangs
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
||||||
rev: 3.4.0
|
rev: 3.4.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: editorconfig-checker
|
- id: editorconfig-checker
|
||||||
- repo: https://github.com/igorshubovych/markdownlint-cli
|
- repo: https://github.com/igorshubovych/markdownlint-cli
|
||||||
@ -76,7 +76,7 @@ repos:
|
|||||||
- --disable=MD013
|
- --disable=MD013
|
||||||
# Infrastructure
|
# Infrastructure
|
||||||
- repo: https://github.com/tox-dev/pyproject-fmt
|
- repo: https://github.com/tox-dev/pyproject-fmt
|
||||||
rev: v2.11.0
|
rev: v2.11.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyproject-fmt
|
- id: pyproject-fmt
|
||||||
name: pyproject.toml formatter
|
name: pyproject.toml formatter
|
||||||
@ -84,7 +84,7 @@ repos:
|
|||||||
args:
|
args:
|
||||||
- --indent=4
|
- --indent=4
|
||||||
additional_dependencies:
|
additional_dependencies:
|
||||||
- tox==4.31.0 # https://github.com/tox-dev/tox/releases/latest
|
- tox==4.32.0 # https://github.com/tox-dev/tox/releases/latest
|
||||||
- repo: https://github.com/abravalheri/validate-pyproject
|
- repo: https://github.com/abravalheri/validate-pyproject
|
||||||
rev: v0.24.1
|
rev: v0.24.1
|
||||||
hooks:
|
hooks:
|
||||||
|
|||||||
@ -5,7 +5,7 @@ manage online service access.
|
|||||||
# This will make sure the app is always imported when
|
# This will make sure the app is always imported when
|
||||||
# Django starts so that shared_task will use this app.
|
# Django starts so that shared_task will use this app.
|
||||||
|
|
||||||
__version__ = '4.11.0'
|
__version__ = '4.11.2'
|
||||||
__title__ = 'Alliance Auth'
|
__title__ = 'Alliance Auth'
|
||||||
__title_useragent__ = 'AllianceAuth'
|
__title_useragent__ = 'AllianceAuth'
|
||||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||||
|
|||||||
@ -727,7 +727,8 @@ class TestEveSwaggerProvider(TestCase):
|
|||||||
my_provider = EveSwaggerProvider()
|
my_provider = EveSwaggerProvider()
|
||||||
my_client = my_provider.client
|
my_client = my_provider.client
|
||||||
operation = my_client.Universe.get_universe_factions()
|
operation = my_client.Universe.get_universe_factions()
|
||||||
self.assertEqual(
|
expected_variants = {
|
||||||
operation.future.request.headers['User-Agent'],
|
f'AllianceAuth/{aa_version} (dummy@example.net; +{aa_url}) DjangoEsi/{esi_version} (+{esi_url})', # Django-ESI 8.0.0
|
||||||
f'AllianceAuth/{aa_version} (dummy@example.net; +{aa_url}) Django-ESI/{esi_version} (+{esi_url})'
|
f'AllianceAuth/{aa_version} (dummy@example.net; +{aa_url}) Django-ESI/{esi_version} (+{esi_url})' # Django-ESI 7.x, Py38 Py39
|
||||||
)
|
}
|
||||||
|
self.assertIn(operation.future.request.headers['User-Agent'], expected_variants)
|
||||||
|
|||||||
@ -320,8 +320,8 @@ def click_fatlink_view(request, token, fat_hash=None):
|
|||||||
messages.warning(
|
messages.warning(
|
||||||
request,
|
request,
|
||||||
_(
|
_(
|
||||||
f"Cannot register the fleet participation for {character.character_name}. The character needs to be online."
|
"Cannot register the fleet participation for {character_name}. The character needs to be online."
|
||||||
),
|
).format(character_name=character.character_name)
|
||||||
)
|
)
|
||||||
|
|
||||||
return redirect('fatlink:view')
|
return redirect('fatlink:view')
|
||||||
|
|||||||
@ -47,6 +47,12 @@
|
|||||||
/* Side Navigation
|
/* Side Navigation
|
||||||
------------------------------------------------------------------------------------- */
|
------------------------------------------------------------------------------------- */
|
||||||
@media all {
|
@media all {
|
||||||
|
.sidemenu-total-notifications-badge {
|
||||||
|
position: absolute;
|
||||||
|
left: 28px;
|
||||||
|
font-size: 42.5% !important;
|
||||||
|
}
|
||||||
|
|
||||||
#sidebar > div {
|
#sidebar > div {
|
||||||
width: 325px;
|
width: 325px;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-09-21 13:44+1000\n"
|
"POT-Creation-Date: 2025-11-13 10:19+1000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -57,7 +57,7 @@ msgid "You are not allowed to add or remove these restricted groups: %s"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:72
|
#: allianceauth/authentication/models.py:72
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:104
|
#: allianceauth/project_template/project_name/settings/base.py:105
|
||||||
msgid "English"
|
msgid "English"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -66,57 +66,57 @@ msgid "Czech"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:74
|
#: allianceauth/authentication/models.py:74
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:106
|
#: allianceauth/project_template/project_name/settings/base.py:107
|
||||||
msgid "German"
|
msgid "German"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:75
|
#: allianceauth/authentication/models.py:75
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:107
|
#: allianceauth/project_template/project_name/settings/base.py:108
|
||||||
msgid "Spanish"
|
msgid "Spanish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:76
|
#: allianceauth/authentication/models.py:76
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:108
|
#: allianceauth/project_template/project_name/settings/base.py:109
|
||||||
msgid "Italian"
|
msgid "Italian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:77
|
#: allianceauth/authentication/models.py:77
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:109
|
#: allianceauth/project_template/project_name/settings/base.py:110
|
||||||
msgid "Japanese"
|
msgid "Japanese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:78
|
#: allianceauth/authentication/models.py:78
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:110
|
#: allianceauth/project_template/project_name/settings/base.py:111
|
||||||
msgid "Korean"
|
msgid "Korean"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:79
|
#: allianceauth/authentication/models.py:79
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:111
|
#: allianceauth/project_template/project_name/settings/base.py:112
|
||||||
msgid "French"
|
msgid "French"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:80
|
#: allianceauth/authentication/models.py:80
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:114
|
#: allianceauth/project_template/project_name/settings/base.py:115
|
||||||
msgid "Russian"
|
msgid "Russian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:81
|
#: allianceauth/authentication/models.py:81
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:112
|
#: allianceauth/project_template/project_name/settings/base.py:113
|
||||||
msgid "Dutch"
|
msgid "Dutch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:82
|
#: allianceauth/authentication/models.py:82
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:113
|
#: allianceauth/project_template/project_name/settings/base.py:114
|
||||||
msgid "Polish"
|
msgid "Polish"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:83
|
#: allianceauth/authentication/models.py:83
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:115
|
#: allianceauth/project_template/project_name/settings/base.py:116
|
||||||
msgid "Ukrainian"
|
msgid "Ukrainian"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:84
|
#: allianceauth/authentication/models.py:84
|
||||||
#: allianceauth/project_template/project_name/settings/base.py:116
|
#: allianceauth/project_template/project_name/settings/base.py:117
|
||||||
msgid "Simplified Chinese"
|
msgid "Simplified Chinese"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -125,22 +125,30 @@ msgstr ""
|
|||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:105
|
#: allianceauth/authentication/models.py:106
|
||||||
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
#: allianceauth/templates/allianceauth/night-toggle.html:6
|
||||||
msgid "Night Mode"
|
msgid "Night Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:109
|
#: allianceauth/authentication/models.py:110
|
||||||
#: allianceauth/theme/templates/theme/theme_select.html:4
|
#: allianceauth/theme/templates/theme/theme_select.html:4
|
||||||
msgid "Theme"
|
msgid "Theme"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:126
|
#: allianceauth/authentication/models.py:117
|
||||||
|
msgid "Minimize Sidebar Menu"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/models.py:119
|
||||||
|
msgid "Keep the sidebar menu minimized"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/authentication/models.py:133
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "State changed to: %s"
|
msgid "State changed to: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/authentication/models.py:127
|
#: allianceauth/authentication/models.py:134
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Your user's state is now: %(state)s"
|
msgid "Your user's state is now: %(state)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -200,8 +208,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
#: allianceauth/authentication/templates/authentication/tokens.html:7
|
||||||
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
#: allianceauth/authentication/templates/authentication/tokens.html:11
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:133
|
#: allianceauth/menu/templates/menu/menu-user.html:158
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:136
|
#: allianceauth/menu/templates/menu/menu-user.html:161
|
||||||
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
#: allianceauth/templates/allianceauth/top-menu-user-dropdown.html:62
|
||||||
msgid "Token Management"
|
msgid "Token Management"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -747,8 +755,8 @@ msgstr ""
|
|||||||
#: allianceauth/fleetactivitytracking/views.py:323
|
#: allianceauth/fleetactivitytracking/views.py:323
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot register the fleet participation for {character.character_name}. The "
|
"Cannot register the fleet participation for {character_name}. The character "
|
||||||
"character needs to be online."
|
"needs to be online."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/framework/apps.py:16
|
#: allianceauth/framework/apps.py:16
|
||||||
@ -1486,37 +1494,45 @@ msgid "Notifications"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:77
|
#: allianceauth/menu/templates/menu/menu-user.html:77
|
||||||
|
msgid "Sidebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/menu/templates/menu/menu-user.html:93
|
||||||
|
msgid "Minimize Sidebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: allianceauth/menu/templates/menu/menu-user.html:102
|
||||||
msgid "Super User"
|
msgid "Super User"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:83
|
#: allianceauth/menu/templates/menu/menu-user.html:108
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:86
|
#: allianceauth/menu/templates/menu/menu-user.html:111
|
||||||
msgid "Alliance Auth Documentation"
|
msgid "Alliance Auth Documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:94
|
#: allianceauth/menu/templates/menu/menu-user.html:119
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:97
|
#: allianceauth/menu/templates/menu/menu-user.html:122
|
||||||
msgid "Alliance Auth Discord"
|
msgid "Alliance Auth Discord"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:105
|
#: allianceauth/menu/templates/menu/menu-user.html:130
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:108
|
#: allianceauth/menu/templates/menu/menu-user.html:133
|
||||||
msgid "Alliance Auth Git"
|
msgid "Alliance Auth Git"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:118
|
#: allianceauth/menu/templates/menu/menu-user.html:143
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:121
|
#: allianceauth/menu/templates/menu/menu-user.html:146
|
||||||
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
#: allianceauth/templates/allianceauth/top-menu-admin.html:9
|
||||||
msgid "Admin"
|
msgid "Admin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:144
|
#: allianceauth/menu/templates/menu/menu-user.html:169
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:147
|
#: allianceauth/menu/templates/menu/menu-user.html:172
|
||||||
msgid "Sign Out"
|
msgid "Sign Out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:155
|
#: allianceauth/menu/templates/menu/menu-user.html:180
|
||||||
#: allianceauth/menu/templates/menu/menu-user.html:158
|
#: allianceauth/menu/templates/menu/menu-user.html:183
|
||||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
|
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:13
|
||||||
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
|
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:14
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
@ -1777,9 +1793,9 @@ msgstr ""
|
|||||||
msgid "That service account already exists"
|
msgid "That service account already exists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/services/abstract.py:103
|
#: allianceauth/services/abstract.py:105
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Successfully set your {self.service_name} password"
|
msgid "Successfully set your {service_name} password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
|
#: allianceauth/services/apps.py:8 allianceauth/services/auth_hooks.py:12
|
||||||
@ -2318,11 +2334,11 @@ msgstr ""
|
|||||||
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
msgid "Invalid Link. Please use zkillboard.com or kb.evetools.org"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:46
|
#: allianceauth/srp/form.py:49
|
||||||
msgid "Invalid Link. Please post a direct link to a killmail."
|
msgid "Invalid Link. Please post a direct link to a killmail."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/srp/form.py:53
|
#: allianceauth/srp/form.py:56
|
||||||
msgid "After Action Report Link"
|
msgid "After Action Report Link"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2596,7 +2612,7 @@ msgstr ""
|
|||||||
msgid "Saved changes to SRP fleet %(fleetname)s"
|
msgid "Saved changes to SRP fleet %(fleetname)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:4
|
#: allianceauth/templates/allianceauth/admin-status/esi_check.html:5
|
||||||
msgid "Your Server received an ESI error response code of "
|
msgid "Your Server received an ESI error response code of "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3001,36 +3017,36 @@ msgstr ""
|
|||||||
msgid "Saved changes to the timer."
|
msgid "Saved changes to the timer."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:55
|
#: allianceauth/views.py:78
|
||||||
msgid "Bad Request"
|
msgid "Bad Request"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:57 allianceauth/views.py:87
|
#: allianceauth/views.py:80 allianceauth/views.py:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"Auth encountered an error processing your request, please try again. If the "
|
"Auth encountered an error processing your request, please try again. If the "
|
||||||
"error persists, please contact the administrators."
|
"error persists, please contact the administrators."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:65
|
#: allianceauth/views.py:88
|
||||||
msgid "Permission Denied"
|
msgid "Permission Denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:67
|
#: allianceauth/views.py:90
|
||||||
msgid ""
|
msgid ""
|
||||||
"You do not have permission to access the requested page. If you believe this "
|
"You do not have permission to access the requested page. If you believe this "
|
||||||
"is in error please contact the administrators."
|
"is in error please contact the administrators."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:75
|
#: allianceauth/views.py:98
|
||||||
msgid "Page Not Found"
|
msgid "Page Not Found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:77
|
#: allianceauth/views.py:100
|
||||||
msgid ""
|
msgid ""
|
||||||
"Page does not exist. If you believe this is in error please contact the "
|
"Page does not exist. If you believe this is in error please contact the "
|
||||||
"administrators. "
|
"administrators. "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: allianceauth/views.py:85
|
#: allianceauth/views.py:108
|
||||||
msgid "Internal Server Error"
|
msgid "Internal Server Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations # Still needed for Python 3.8, replaced with better implementations in Py39+
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|||||||
@ -11,10 +11,10 @@ environment =
|
|||||||
[program:beat]
|
[program:beat]
|
||||||
command = %(ENV_AA_COMMAND_CELERY)s
|
command = %(ENV_AA_COMMAND_CELERY)s
|
||||||
-A %(ENV_AA_PROJECT_NAME)s beat
|
-A %(ENV_AA_PROJECT_NAME)s beat
|
||||||
directory = %(ENV_AA_VENV_DIRECTORY)s
|
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||||
user = %(ENV_AA_USER)s
|
user = %(ENV_AA_USER)s
|
||||||
stdout_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/%(program_name)s.log
|
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||||
stderr_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/%(program_name)s.log
|
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||||
autostart = true
|
autostart = true
|
||||||
autorestart = true
|
autorestart = true
|
||||||
startsecs = 10
|
startsecs = 10
|
||||||
@ -26,12 +26,12 @@ command = %(ENV_AA_COMMAND_CELERY)s
|
|||||||
--pool=threads
|
--pool=threads
|
||||||
--concurrency=5
|
--concurrency=5
|
||||||
-n %(program_name)s_%(process_num)02d
|
-n %(program_name)s_%(process_num)02d
|
||||||
directory = %(ENV_AA_VENV_DIRECTORY)s
|
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||||
user = %(ENV_AA_USER)s
|
user = %(ENV_AA_USER)s
|
||||||
numprocs = 1
|
numprocs = 1
|
||||||
process_name = %(program_name)s_%(process_num)02d
|
process_name = %(program_name)s_%(process_num)02d
|
||||||
stdout_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/%(program_name)s.log
|
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||||
stderr_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/%(program_name)s.log
|
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||||
autostart = true
|
autostart = true
|
||||||
autorestart = true
|
autorestart = true
|
||||||
startsecs = 10
|
startsecs = 10
|
||||||
@ -42,12 +42,12 @@ priority = 998
|
|||||||
{% if gunicorn %}
|
{% if gunicorn %}
|
||||||
[program:gunicorn]
|
[program:gunicorn]
|
||||||
user = %(ENV_AA_USER)s
|
user = %(ENV_AA_USER)s
|
||||||
directory = %(ENV_AA_VENV_DIRECTORY)s
|
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||||
command = %(ENV_AA_COMMAND_GUNICORN)s %(ENV_AA_PROJECT_NAME)s.wsgi
|
command = %(ENV_AA_COMMAND_GUNICORN)s %(ENV_AA_PROJECT_NAME)s.wsgi
|
||||||
--workers=3
|
--workers=3
|
||||||
--timeout 120
|
--timeout 120
|
||||||
stdout_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/%(program_name)s.log
|
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||||
stderr_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/%(program_name)s.log
|
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/%(program_name)s.log
|
||||||
autostart = true
|
autostart = true
|
||||||
autorestart = true
|
autorestart = true
|
||||||
stopsignal = INT
|
stopsignal = INT
|
||||||
@ -57,10 +57,10 @@ stopsignal = INT
|
|||||||
command = %(ENV_AA_COMMAND_MEMMON)s
|
command = %(ENV_AA_COMMAND_MEMMON)s
|
||||||
-p worker_00=256MB
|
-p worker_00=256MB
|
||||||
-p gunicorn=256MB
|
-p gunicorn=256MB
|
||||||
directory = %(ENV_AA_VENV_DIRECTORY)s
|
directory = %(ENV_AA_PROJECT_DIRECTORY)s
|
||||||
events = TICK_60
|
events = TICK_60
|
||||||
stdout_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/memmon.log
|
stdout_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
|
||||||
stderr_logfile = %(ENV_AA_VENV_DIRECTORY)s/log/memmon.log
|
stderr_logfile = %(ENV_AA_PROJECT_DIRECTORY)s/log/memmon.log
|
||||||
|
|
||||||
[group:{{ project_name }}]
|
[group:{{ project_name }}]
|
||||||
programs = beat,worker{% if gunicorn %},gunicorn{% endif %}
|
programs = beat,worker{% if gunicorn %},gunicorn{% endif %}
|
||||||
|
|||||||
@ -100,7 +100,10 @@ class BaseSetPasswordServiceAccountView(ServicesCRUDMixin, BaseServiceView, Upda
|
|||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
result = super().post(request, *args, **kwargs)
|
result = super().post(request, *args, **kwargs)
|
||||||
if self.get_form().is_valid():
|
if self.get_form().is_valid():
|
||||||
messages.success(request, _(f"Successfully set your {self.service_name} password"))
|
messages.success(
|
||||||
|
request,
|
||||||
|
_("Successfully set your {service_name} password").format(service_name=self.service_name)
|
||||||
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -111,11 +111,11 @@ class Teamspeak3Manager:
|
|||||||
outlist = {}
|
outlist = {}
|
||||||
|
|
||||||
if type(groups) == list:
|
if type(groups) == list:
|
||||||
logger.debug("Recieved multiple groups. Iterating.")
|
logger.debug("Received multiple groups. Iterating.")
|
||||||
for group in groups:
|
for group in groups:
|
||||||
outlist[group['keys']['name']] = group['keys']['sgid']
|
outlist[group['keys']['name']] = group['keys']['sgid']
|
||||||
elif type(groups) == dict:
|
elif type(groups) == dict:
|
||||||
logger.debug("Recieved single group.")
|
logger.debug("Received single group.")
|
||||||
outlist[groups['keys']['name']] = groups['keys']['sgid']
|
outlist[groups['keys']['name']] = groups['keys']['sgid']
|
||||||
logger.debug("Returning name/id pairing: %s" % outlist)
|
logger.debug("Returning name/id pairing: %s" % outlist)
|
||||||
return outlist
|
return outlist
|
||||||
|
|||||||
@ -34,6 +34,9 @@ class SrpFleetUserRequestForm(forms.Form):
|
|||||||
_("Invalid Link. Please use zkillboard.com or kb.evetools.org")
|
_("Invalid Link. Please use zkillboard.com or kb.evetools.org")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if re.match(r"^http[s]?:\/\/zkillboard\.com\/", data) and not data.endswith("/"):
|
||||||
|
data += "/"
|
||||||
|
|
||||||
# Check if it's an actual kill mail
|
# Check if it's an actual kill mail
|
||||||
if not any(
|
if not any(
|
||||||
re.match(regex, data)
|
re.match(regex, data)
|
||||||
|
|||||||
27
allianceauth/srp/tests/test_form.py
Normal file
27
allianceauth/srp/tests/test_form.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from allianceauth.srp.form import SrpFleetUserRequestForm
|
||||||
|
|
||||||
|
|
||||||
|
class TestForms(TestCase):
|
||||||
|
|
||||||
|
def test_allow_missing_trailing_slash_zkillboard(self):
|
||||||
|
form = SrpFleetUserRequestForm(
|
||||||
|
data = {
|
||||||
|
"killboard_link": "https://zkillboard.com/kill/130429493",
|
||||||
|
"additional_info": "Details",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
form.cleaned_data = {"killboard_link": "https://zkillboard.com/kill/130429493"}
|
||||||
|
|
||||||
|
self.assertEqual("https://zkillboard.com/kill/130429493/", form.clean_killboard_link())
|
||||||
|
|
||||||
|
def test_not_add_trailling_slash_kb_evetools(self):
|
||||||
|
form = SrpFleetUserRequestForm(
|
||||||
|
data = {
|
||||||
|
"killboard_link": "https://kb.evetools.org/kill/130429493",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
form.cleaned_data = {"killboard_link": "https://kb.evetools.org/kill/130429493"}
|
||||||
|
|
||||||
|
self.assertEqual("https://kb.evetools.org/kill/130429493", form.clean_killboard_link())
|
||||||
@ -1,13 +0,0 @@
|
|||||||
$(document).ready(() => {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
const activeChildMenuItem = document.querySelector('ul#sidebar-menu ul.collapse a.active');
|
|
||||||
|
|
||||||
if (activeChildMenuItem) {
|
|
||||||
const activeChildMenuUl = activeChildMenuItem.closest('ul');
|
|
||||||
activeChildMenuUl.classList.add('show');
|
|
||||||
|
|
||||||
document.querySelectorAll(`[data-bs-target^="#${activeChildMenuUl.id}"]`)
|
|
||||||
.forEach(element => element.setAttribute('aria-expanded', true));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
57
allianceauth/static/allianceauth/js/sidebar.js
Normal file
57
allianceauth/static/allianceauth/js/sidebar.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
$(document).ready(() => {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collect all badges in the sidebar menu that are not part of a collapsible submenu, and calculate the total notification count.
|
||||||
|
* Show a total notification badge in the navbar if there are any notifications.
|
||||||
|
*/
|
||||||
|
const totalNotificationsBadge = () => {
|
||||||
|
const badges = [];
|
||||||
|
let notificationCount = 0;
|
||||||
|
|
||||||
|
document.querySelectorAll('#sidebar-menu .badge').forEach(b => {
|
||||||
|
const li = b.closest('li');
|
||||||
|
|
||||||
|
if (!li || !li.querySelector('ul.collapse')) {
|
||||||
|
badges.push(b);
|
||||||
|
notificationCount += parseInt(b.textContent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (badges.length > 0 && notificationCount > 0) {
|
||||||
|
const notificationBadge = document.createElement('span');
|
||||||
|
|
||||||
|
notificationBadge.classList.add(
|
||||||
|
'badge',
|
||||||
|
'text-bg-danger',
|
||||||
|
'align-self-center',
|
||||||
|
'sidemenu-notification-badge',
|
||||||
|
'sidemenu-total-notifications-badge'
|
||||||
|
);
|
||||||
|
notificationBadge.textContent = String(notificationCount);
|
||||||
|
|
||||||
|
document.querySelector('a.navbar-brand i.fa-solid').prepend(notificationBadge);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the active child menu item in the sidebar menu, if any, and ensure its parent submenu is expanded.
|
||||||
|
*/
|
||||||
|
const expandChildMenu = () => {
|
||||||
|
const activeChildMenuItem = document.querySelector('ul#sidebar-menu ul.collapse a.active');
|
||||||
|
|
||||||
|
if (activeChildMenuItem) {
|
||||||
|
const activeChildMenuUl = activeChildMenuItem.closest('ul');
|
||||||
|
activeChildMenuUl.classList.add('show');
|
||||||
|
|
||||||
|
document.querySelectorAll(`[data-bs-target^="#${activeChildMenuUl.id}"]`)
|
||||||
|
.forEach(element => element.setAttribute('aria-expanded', 'true'));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Execute functions on document ready
|
||||||
|
[
|
||||||
|
totalNotificationsBadge,
|
||||||
|
expandChildMenu
|
||||||
|
].forEach(fn => fn());
|
||||||
|
});
|
||||||
@ -1,3 +1,3 @@
|
|||||||
{% load sri %}
|
{% load sri %}
|
||||||
|
|
||||||
{% sri_static 'allianceauth/js/sidebar-collapse.js' %}
|
{% sri_static 'allianceauth/js/sidebar.js' %}
|
||||||
|
|||||||
11
allianceauth/templates/django_bootstrap5/field_errors.html
Normal file
11
allianceauth/templates/django_bootstrap5/field_errors.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{# Template override to display the errors of django Forms when using `boostrap_form` form the `django-bootstrap5` #}
|
||||||
|
{# library. #}
|
||||||
|
{# See: https://github.com/zostera/django-bootstrap5/pull/767 #}
|
||||||
|
|
||||||
|
{% if field_errors %}
|
||||||
|
<div id="{{ field.auto_id }}_error" class="invalid-feedback">
|
||||||
|
{% for text in field_errors %}
|
||||||
|
<div>{{ text }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
PROTOCOL=https://
|
PROTOCOL=https://
|
||||||
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
||||||
DOMAIN=%DOMAIN%
|
DOMAIN=%DOMAIN%
|
||||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.11.0
|
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.11.2
|
||||||
|
|
||||||
# Nginx Proxy Manager
|
# Nginx Proxy Manager
|
||||||
PROXY_HTTP_PORT=80
|
PROXY_HTTP_PORT=80
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
ARG AUTH_VERSION=v4.11.0
|
ARG AUTH_VERSION=v4.11.2
|
||||||
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
||||||
ENV AUTH_USER=allianceauth
|
ENV AUTH_USER=allianceauth
|
||||||
ENV AUTH_GROUP=allianceauth
|
ENV AUTH_GROUP=allianceauth
|
||||||
|
|||||||
@ -15,7 +15,7 @@ license = { file = "LICENSE" }
|
|||||||
authors = [
|
authors = [
|
||||||
{ name = "Alliance Auth", email = "adarnof@gmail.com" },
|
{ name = "Alliance Auth", email = "adarnof@gmail.com" },
|
||||||
]
|
]
|
||||||
requires-python = ">=3.8"
|
requires-python = ">=3.8,<3.13"
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Environment :: Web Environment",
|
"Environment :: Web Environment",
|
||||||
"Framework :: Celery",
|
"Framework :: Celery",
|
||||||
@ -31,8 +31,6 @@ classifiers = [
|
|||||||
"Programming Language :: Python :: 3.10",
|
"Programming Language :: Python :: 3.10",
|
||||||
"Programming Language :: Python :: 3.11",
|
"Programming Language :: Python :: 3.11",
|
||||||
"Programming Language :: Python :: 3.12",
|
"Programming Language :: Python :: 3.12",
|
||||||
"Programming Language :: Python :: 3.13",
|
|
||||||
"Programming Language :: Python :: 3.14",
|
|
||||||
"Topic :: Internet :: WWW/HTTP",
|
"Topic :: Internet :: WWW/HTTP",
|
||||||
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
|
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user