Compare commits

...

11 Commits

Author SHA1 Message Date
Erik Kalkoken
9b9756ff14 Merge branch 'seperate-out-celery-once' into 'master'
Remove dependecies from celery_once customizations

See merge request allianceauth/allianceauth!1491
2025-07-03 07:37:58 +02:00
Joel Falknau
34b94ae685
Version Bump 4.8.0 2025-07-03 09:19:25 +10:00
Ariel Rin
50fd900bdc Merge branch 'translations_7f31a07ccd4e4a66b1dd7b6bc2dbddb5' into 'master'
Updates for project Alliance Auth

See merge request allianceauth/allianceauth!1732
2025-07-02 23:17:15 +00:00
Ariel Rin
1bf8ec5bc6 Updates for project Alliance Auth 2025-07-02 23:17:15 +00:00
Ariel Rin
f849b75029 Merge branch 'fix-sidebar-localStorage-behavior' into 'master'
[FIX] Sidebar `localStorage` behavior

See merge request allianceauth/allianceauth!1733
2025-07-02 23:06:28 +00:00
Peter Pfeufer
25c27793fe
[FIX] Sidebar localStorage behavior 2025-07-01 14:07:12 +02:00
Ariel Rin
6e413772ad Merge branch 'custom-static-file-storage' into 'master'
[ADD] Custom Static Files Storage Class

See merge request allianceauth/allianceauth!1726
2025-06-30 23:43:33 +00:00
Peter Pfeufer
fc51f6bea2
[FIX] Cleanup file path name to work with CSS url("foobar") notations
This essentially removes quotes from the filename, which aren't allowed anyways.
2025-06-12 10:19:48 +02:00
Peter Pfeufer
6477c22308
[CHANGE] Use the same quotation marks for strings and not a mix of both
Just while we're at it …
2025-06-01 00:05:34 +02:00
Peter Pfeufer
329b3fecfb
[ADD] Custom Static Files Storage Class 2025-06-01 00:02:09 +02:00
Erik Kalkoken
0dd47e72bc Move celery once config into own package 2023-02-28 15:16:51 +01:00
39 changed files with 1493 additions and 911 deletions

View File

@ -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.7.0' __version__ = '4.8.0'
__title__ = 'Alliance Auth' __title__ = 'Alliance Auth'
__url__ = 'https://gitlab.com/allianceauth/allianceauth' __url__ = 'https://gitlab.com/allianceauth/allianceauth'
NAME = f'{__title__} v{__version__}' NAME = f'{__title__} v{__version__}'

View File

@ -0,0 +1,105 @@
"""
Custom static files storage for Alliance Auth.
This module defines a custom static files storage class for
Alliance Auth, named `AaManifestStaticFilesStorage`.
Using `ManifestStaticFilesStorage` will give us a hashed name for
our static files, which is useful for cache busting.
This storage class extends Django's `ManifestStaticFilesStorage` to ignore missing files,
which the original class does not handle, and log them in debug mode.
It is useful for handling cases where static files may not exist, such as when a
CSS file references a background image that is not present in the static files directory.
With debug mode enabled, it will print a message for each missing file when running `collectstatic`,
which can help identify issues with static file references during development.
"""
from django.conf import settings
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
class AaManifestStaticFilesStorage(ManifestStaticFilesStorage):
"""
Custom static files storage that ignores missing files.
"""
@classmethod
def _cleanup_name(cls, name: str) -> str:
"""
Clean up the name by removing quotes.
This method is used to ensure that the name does not contain any quotes,
which can cause issues with file paths.
:param name: The name of the static file.
:type name: str
:return: The cleaned-up name without quotes.
:rtype: str
"""
# Remove quotes from the name
return name.replace('"', "").replace("'", "")
def __init__(self, *args, **kwargs):
"""
Initialize the static files storage, ignoring missing files.
:param args:
:type args:
:param kwargs:
:type kwargs:
"""
self.missing_files = []
super().__init__(*args, **kwargs)
def hashed_name(self, name, content=None, filename=None):
"""
Generate a hashed name for the given static file, ignoring missing files.
Ignore missing files, e.g. non-existent background image referenced from css.
Returns the original filename if the referenced file doesn't exist.
:param name: The name of the static file to hash.
:type name: str
:param content: The content of the static file, if available.
:type content: bytes | None
:param filename: The original filename of the static file, if available.
:type filename: str | None
:return: The hashed name of the static file, or the original name if the file is missing.
:rtype: str
"""
try:
clean_name = self._cleanup_name(name)
return super().hashed_name(clean_name, content, filename)
except ValueError as e:
if settings.DEBUG:
# In debug mode, we log the missing file message
message = e.args[0].split(" with ")[0]
self.missing_files.append(message)
# print(f'\x1b[0;30;41m{message}\x1b[0m')
return name
def post_process(self, *args, **kwargs):
"""
Post-process the static files, printing any missing files in debug mode.
:param args:
:type args:
:param kwargs:
:type kwargs:
:return:
:rtype:
"""
yield from super().post_process(*args, **kwargs)
if settings.DEBUG:
# In debug mode, print the missing files
for message in sorted(set(self.missing_files)):
print(f"\x1b[0;30;41m{message}\x1b[0m")

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Peter Pfeufer, 2025\n" "Last-Translator: Peter Pfeufer, 2025\n"
"Language-Team: German (https://app.transifex.com/alliance-auth/teams/107430/de/)\n" "Language-Team: German (https://app.transifex.com/alliance-auth/teams/107430/de/)\n"
@ -25,7 +25,7 @@ msgstr ""
#: allianceauth/analytics/apps.py:8 #: allianceauth/analytics/apps.py:8
msgid "Analytics" msgid "Analytics"
msgstr "" msgstr "Analyse"
#: allianceauth/analytics/models.py:22 #: allianceauth/analytics/models.py:22
msgid "Google Analytics Universal" msgid "Google Analytics Universal"
@ -37,7 +37,7 @@ msgstr "Google Analytics V4"
#: allianceauth/authentication/apps.py:9 #: allianceauth/authentication/apps.py:9
msgid "Authentication" msgid "Authentication"
msgstr "" msgstr "Authentifizierung"
#: allianceauth/authentication/constants.py:6 #: allianceauth/authentication/constants.py:6
msgid "" msgid ""
@ -134,7 +134,7 @@ msgid "Simplified Chinese"
msgstr "Vereinfachtes Chinesisch" msgstr "Vereinfachtes Chinesisch"
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Sprache" msgstr "Sprache"
@ -144,7 +144,7 @@ msgid "Night Mode"
msgstr "Nachtmodus" msgstr "Nachtmodus"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "Theme" msgstr "Theme"
@ -215,6 +215,8 @@ msgstr "Status:"
#: 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:136
#: 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 "Token-Verwaltung" msgstr "Token-Verwaltung"
@ -456,7 +458,7 @@ msgstr "Fehler beim Sammeln von Corpstatistiken mit ausgewählten Token."
#: allianceauth/crontab/apps.py:16 #: allianceauth/crontab/apps.py:16
msgid "Crontab" msgid "Crontab"
msgstr "" msgstr "Crontab"
#: allianceauth/crontab/models.py:13 #: allianceauth/crontab/models.py:13
msgid "Minute Offset" msgid "Minute Offset"
@ -493,11 +495,11 @@ msgstr "Dieses CSS wird der Site nach dem Standard-CSS hinzugefügt."
#: allianceauth/eveonline/apps.py:8 #: allianceauth/eveonline/apps.py:8
msgid "EVE Online" msgid "EVE Online"
msgstr "" msgstr "EVE Online"
#: allianceauth/eveonline/autogroups/apps.py:8 #: allianceauth/eveonline/autogroups/apps.py:8
msgid "EVE Online Autogroups" msgid "EVE Online Autogroups"
msgstr "" msgstr "EVE Online Autogrouppen"
#: allianceauth/fleetactivitytracking/apps.py:8 #: allianceauth/fleetactivitytracking/apps.py:8
#: allianceauth/fleetactivitytracking/auth_hooks.py:10 #: allianceauth/fleetactivitytracking/auth_hooks.py:10
@ -614,7 +616,7 @@ msgstr "Schiff"
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18 #: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:18
#: allianceauth/timerboard/templates/timerboard/timertable.html:12 #: allianceauth/timerboard/templates/timerboard/timertable.html:12
msgid "EVE time" msgid "EVE time"
msgstr "" msgstr "EVE Zeit"
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:49 #: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkmodify.html:49
#: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:52 #: allianceauth/fleetactivitytracking/templates/fleetactivitytracking/fatlinkview.html:52
@ -782,7 +784,7 @@ msgstr ""
#: allianceauth/framework/apps.py:16 #: allianceauth/framework/apps.py:16
msgid "Framework" msgid "Framework"
msgstr "" msgstr "Framework"
#: allianceauth/groupmanagement/apps.py:8 #: allianceauth/groupmanagement/apps.py:8
#: allianceauth/groupmanagement/auth_hooks.py:18 #: allianceauth/groupmanagement/auth_hooks.py:18
@ -1240,7 +1242,7 @@ msgstr "Austrittsanfrage für Gruppe %(group)s gesendet."
#: allianceauth/hrapplications/apps.py:8 #: allianceauth/hrapplications/apps.py:8
msgid "HR Applications" msgid "HR Applications"
msgstr "" msgstr "Bewerbungen"
#: allianceauth/hrapplications/auth_hooks.py:15 #: allianceauth/hrapplications/auth_hooks.py:15
msgid "Applications" msgid "Applications"
@ -1450,7 +1452,7 @@ msgstr "sichtbar"
#: allianceauth/menu/apps.py:16 #: allianceauth/menu/apps.py:16
msgid "Menu" msgid "Menu"
msgstr "" msgstr "Menü"
#: allianceauth/menu/constants.py:16 #: allianceauth/menu/constants.py:16
msgid "app" msgid "app"
@ -1528,20 +1530,38 @@ msgstr "Ordner hinzufügen"
msgid "Notifications" msgid "Notifications"
msgstr "Benachrichtigungen" msgstr "Benachrichtigungen"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "Super User" msgstr "Super User"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr "Alliance Auth Dokumentation"
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr "Alliance Auth Discord"
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr "Alliance Auth Git"
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "Admin" msgstr "Admin"
#: allianceauth/menu/templates/menu/menu-user.html:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "Ausloggen" msgstr "Ausloggen"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -1706,7 +1726,7 @@ msgstr "Flottenoperationen Verwaltung"
#: allianceauth/optimer/templates/optimer/management.html:28 #: allianceauth/optimer/templates/optimer/management.html:28
#: allianceauth/timerboard/templates/timerboard/view.html:32 #: allianceauth/timerboard/templates/timerboard/view.html:32
msgid "Current EVE time:" msgid "Current EVE time:"
msgstr "" msgstr "Aktuelle EVE Zeit"
#: allianceauth/optimer/templates/optimer/management.html:36 #: allianceauth/optimer/templates/optimer/management.html:36
msgid "Next Fleet Operations" msgid "Next Fleet Operations"
@ -1873,7 +1893,7 @@ msgstr "Das Passwort muss mindestens 8 Zeichen lang sein"
#: allianceauth/services/modules/discord/apps.py:8 #: allianceauth/services/modules/discord/apps.py:8
msgid "Discord Service" msgid "Discord Service"
msgstr "" msgstr "Discord Service"
#: allianceauth/services/modules/discord/models.py:187 #: allianceauth/services/modules/discord/models.py:187
msgid "Discord Account Disabled" msgid "Discord Account Disabled"
@ -1929,7 +1949,7 @@ msgstr ""
#: allianceauth/services/modules/discourse/apps.py:8 #: allianceauth/services/modules/discourse/apps.py:8
msgid "Discourse Service" msgid "Discourse Service"
msgstr "" msgstr "Discourse Service"
#: allianceauth/services/modules/discourse/templates/services/discourse/discourse_service_ctrl.html:5 #: allianceauth/services/modules/discourse/templates/services/discourse/discourse_service_ctrl.html:5
msgid "Discourse" msgid "Discourse"
@ -1969,11 +1989,11 @@ msgstr ""
#: allianceauth/services/modules/example/apps.py:8 #: allianceauth/services/modules/example/apps.py:8
msgid "Example Service" msgid "Example Service"
msgstr "" msgstr "Beispiel Service"
#: allianceauth/services/modules/ips4/apps.py:8 #: allianceauth/services/modules/ips4/apps.py:8
msgid "IPS4 Service" msgid "IPS4 Service"
msgstr "" msgstr "IPS4 Service"
#: allianceauth/services/modules/ips4/views.py:31 #: allianceauth/services/modules/ips4/views.py:31
msgid "Activated IPSuite4 account." msgid "Activated IPSuite4 account."
@ -2000,7 +2020,7 @@ msgstr "IP4Suite Konto deaktiviert."
#: allianceauth/services/modules/mumble/apps.py:8 #: allianceauth/services/modules/mumble/apps.py:8
msgid "Mumble Service" msgid "Mumble Service"
msgstr "" msgstr "Mumble Service"
#: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7 #: allianceauth/services/modules/mumble/templates/services/mumble/mumble_connection_history.html:7
msgid "Mumble" msgid "Mumble"
@ -2059,7 +2079,7 @@ msgstr "Verlauf der Mumbleverbindungen"
#: allianceauth/services/modules/openfire/apps.py:8 #: allianceauth/services/modules/openfire/apps.py:8
msgid "Openfire Service" msgid "Openfire Service"
msgstr "" msgstr "Openfire Service"
#: allianceauth/services/modules/openfire/auth_hooks.py:27 #: allianceauth/services/modules/openfire/auth_hooks.py:27
msgid "Jabber" msgid "Jabber"
@ -2114,7 +2134,7 @@ msgstr "Setze Jabber Passwort."
#: allianceauth/services/modules/phpbb3/apps.py:8 #: allianceauth/services/modules/phpbb3/apps.py:8
msgid "phpBB3 Service" msgid "phpBB3 Service"
msgstr "" msgstr "phpBB3 Service"
#: allianceauth/services/modules/phpbb3/views.py:34 #: allianceauth/services/modules/phpbb3/views.py:34
msgid "Activated forum account." msgid "Activated forum account."
@ -2141,7 +2161,7 @@ msgstr "Setze Forum Passwort."
#: allianceauth/services/modules/smf/apps.py:8 #: allianceauth/services/modules/smf/apps.py:8
msgid "SMF Service" msgid "SMF Service"
msgstr "" msgstr "SMF Service"
#: allianceauth/services/modules/smf/views.py:52 #: allianceauth/services/modules/smf/views.py:52
msgid "Activated SMF account." msgid "Activated SMF account."
@ -2168,7 +2188,7 @@ msgstr "Setze SMF Passwort."
#: allianceauth/services/modules/teamspeak3/apps.py:8 #: allianceauth/services/modules/teamspeak3/apps.py:8
msgid "TeamSpeak 3 Service" msgid "TeamSpeak 3 Service"
msgstr "" msgstr "TeamSpeak 3 Service"
#: allianceauth/services/modules/teamspeak3/forms.py:14 #: allianceauth/services/modules/teamspeak3/forms.py:14
#, python-format #, python-format
@ -2222,7 +2242,7 @@ msgstr "TeamSpeak3 Berechtigungsschlüssel zurücksetzen."
#: allianceauth/services/modules/xenforo/apps.py:8 #: allianceauth/services/modules/xenforo/apps.py:8
msgid "Xenforo Service" msgid "Xenforo Service"
msgstr "" msgstr "Xenforo Service"
#: allianceauth/services/modules/xenforo/views.py:30 #: allianceauth/services/modules/xenforo/views.py:30
msgid "Activated XenForo account." msgid "Activated XenForo account."
@ -2732,7 +2752,7 @@ msgstr "Ausloggen"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Navigation umschalten" msgstr "Navigation umschalten"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "Theme auswählen" msgstr "Theme auswählen"
@ -2931,7 +2951,7 @@ msgstr "Aufgegeben"
#: allianceauth/timerboard/models.py:60 #: allianceauth/timerboard/models.py:60
msgid "Theft" msgid "Theft"
msgstr "" msgstr "Diebstahl"
#: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7 #: allianceauth/timerboard/templates/timerboard/dashboard.timers.html:7
#: allianceauth/timerboard/templates/timerboard/view.html:54 #: allianceauth/timerboard/templates/timerboard/view.html:54

View File

@ -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-06-19 20:23+1000\n" "POT-Creation-Date: 2025-07-03 09:07+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:106 #: allianceauth/project_template/project_name/settings/base.py:104
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:108 #: allianceauth/project_template/project_name/settings/base.py:106
msgid "German" msgid "German"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:75 #: allianceauth/authentication/models.py:75
#: allianceauth/project_template/project_name/settings/base.py:109 #: allianceauth/project_template/project_name/settings/base.py:107
msgid "Spanish" msgid "Spanish"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:76 #: allianceauth/authentication/models.py:76
#: allianceauth/project_template/project_name/settings/base.py:110 #: allianceauth/project_template/project_name/settings/base.py:108
msgid "Italian" msgid "Italian"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:77 #: allianceauth/authentication/models.py:77
#: allianceauth/project_template/project_name/settings/base.py:111 #: allianceauth/project_template/project_name/settings/base.py:109
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:78 #: allianceauth/authentication/models.py:78
#: allianceauth/project_template/project_name/settings/base.py:112 #: allianceauth/project_template/project_name/settings/base.py:110
msgid "Korean" msgid "Korean"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:79 #: allianceauth/authentication/models.py:79
#: allianceauth/project_template/project_name/settings/base.py:113 #: allianceauth/project_template/project_name/settings/base.py:111
msgid "French" msgid "French"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:80 #: allianceauth/authentication/models.py:80
#: allianceauth/project_template/project_name/settings/base.py:116 #: allianceauth/project_template/project_name/settings/base.py:114
msgid "Russian" msgid "Russian"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:81 #: allianceauth/authentication/models.py:81
#: allianceauth/project_template/project_name/settings/base.py:114 #: allianceauth/project_template/project_name/settings/base.py:112
msgid "Dutch" msgid "Dutch"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:82 #: allianceauth/authentication/models.py:82
#: allianceauth/project_template/project_name/settings/base.py:115 #: allianceauth/project_template/project_name/settings/base.py:113
msgid "Polish" msgid "Polish"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:83 #: allianceauth/authentication/models.py:83
#: allianceauth/project_template/project_name/settings/base.py:117 #: allianceauth/project_template/project_name/settings/base.py:115
msgid "Ukrainian" msgid "Ukrainian"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:84 #: allianceauth/authentication/models.py:84
#: allianceauth/project_template/project_name/settings/base.py:118 #: allianceauth/project_template/project_name/settings/base.py:116
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "" msgstr ""

View File

@ -15,7 +15,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: trenus, 2025\n" "Last-Translator: trenus, 2025\n"
"Language-Team: Spanish (https://app.transifex.com/alliance-auth/teams/107430/es/)\n" "Language-Team: Spanish (https://app.transifex.com/alliance-auth/teams/107430/es/)\n"
@ -130,7 +130,7 @@ msgid "Simplified Chinese"
msgstr "Chino Simplificado" msgstr "Chino Simplificado"
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Idioma" msgstr "Idioma"
@ -140,7 +140,7 @@ msgid "Night Mode"
msgstr "Modo Nocturno" msgstr "Modo Nocturno"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
@ -211,6 +211,8 @@ msgstr "Estado:"
#: 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:136
#: 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 "Gestión de Tokens" msgstr "Gestión de Tokens"
@ -1518,20 +1520,38 @@ msgstr ""
msgid "Notifications" msgid "Notifications"
msgstr "Notificaciones" msgstr "Notificaciones"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "Administrador" msgstr "Administrador"
#: allianceauth/menu/templates/menu/menu-user.html:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2713,7 +2733,7 @@ msgstr "Salir"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Navegacion" msgstr "Navegacion"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "Seleccionar tema" msgstr "Seleccionar tema"

View File

@ -20,7 +20,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: T'rahk Rokym, 2024\n" "Last-Translator: T'rahk Rokym, 2024\n"
"Language-Team: French (France) (https://app.transifex.com/alliance-auth/teams/107430/fr_FR/)\n" "Language-Team: French (France) (https://app.transifex.com/alliance-auth/teams/107430/fr_FR/)\n"
@ -143,7 +143,7 @@ msgid "Simplified Chinese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
@ -153,7 +153,7 @@ msgid "Night Mode"
msgstr "Mode Nuit" msgstr "Mode Nuit"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "Thème" msgstr "Thème"
@ -224,6 +224,8 @@ msgstr "État:"
#: 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:136
#: 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 "Gestion des jetons" msgstr "Gestion des jetons"
@ -1535,20 +1537,38 @@ msgstr "Ajouter un dossier"
msgid "Notifications" msgid "Notifications"
msgstr "Alertes" msgstr "Alertes"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "Super Utilisateur" msgstr "Super Utilisateur"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "Administrateur" msgstr "Administrateur"
#: allianceauth/menu/templates/menu/menu-user.html:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "Se Déconnecter" msgstr "Se Déconnecter"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2736,7 +2756,7 @@ msgstr "Déconnexion"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Activer navigation" msgstr "Activer navigation"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "Sélectionner un thème" msgstr "Sélectionner un thème"

View File

@ -13,7 +13,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Tuz, 2024\n" "Last-Translator: Tuz, 2024\n"
"Language-Team: Italian (Italy) (https://app.transifex.com/alliance-auth/teams/107430/it_IT/)\n" "Language-Team: Italian (Italy) (https://app.transifex.com/alliance-auth/teams/107430/it_IT/)\n"
@ -134,7 +134,7 @@ msgid "Simplified Chinese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Lingua" msgstr "Lingua"
@ -144,7 +144,7 @@ msgid "Night Mode"
msgstr "Modalità scura" msgstr "Modalità scura"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
@ -215,6 +215,8 @@ msgstr "Stato:"
#: 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:136
#: 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 "Gestione dei Token" msgstr "Gestione dei Token"
@ -1532,20 +1534,38 @@ msgstr "Aggiungi cartella"
msgid "Notifications" msgid "Notifications"
msgstr "Notifiche" msgstr "Notifiche"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "Super User" msgstr "Super User"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "Amministratore" msgstr "Amministratore"
#: allianceauth/menu/templates/menu/menu-user.html:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "Sign Out" msgstr "Sign Out"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2734,7 +2754,7 @@ msgstr "Disconnettersi"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Attiva/disattiva navigazione" msgstr "Attiva/disattiva navigazione"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "Seleziona Tema" msgstr "Seleziona Tema"

View File

@ -13,7 +13,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: kotaneko, 2024\n" "Last-Translator: kotaneko, 2024\n"
"Language-Team: Japanese (https://app.transifex.com/alliance-auth/teams/107430/ja/)\n" "Language-Team: Japanese (https://app.transifex.com/alliance-auth/teams/107430/ja/)\n"
@ -129,7 +129,7 @@ msgid "Simplified Chinese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "言語" msgstr "言語"
@ -139,7 +139,7 @@ msgid "Night Mode"
msgstr "ナイトモード" msgstr "ナイトモード"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "テーマ" msgstr "テーマ"
@ -210,6 +210,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:136
#: 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 "トークン管理"
@ -1481,20 +1483,38 @@ msgstr "フォルダーを追加"
msgid "Notifications" msgid "Notifications"
msgstr "通知" msgstr "通知"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "スーパーユーザ" msgstr "スーパーユーザ"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: 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:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "サインアウト" msgstr "サインアウト"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2670,7 +2690,7 @@ msgstr "ログアウト"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "ナビゲーションを切り替え" msgstr "ナビゲーションを切り替え"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "テーマを選択" msgstr "テーマを選択"

View File

@ -18,7 +18,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Woojin Kang, 2024\n" "Last-Translator: Woojin Kang, 2024\n"
"Language-Team: Korean (Korea) (https://app.transifex.com/alliance-auth/teams/107430/ko_KR/)\n" "Language-Team: Korean (Korea) (https://app.transifex.com/alliance-auth/teams/107430/ko_KR/)\n"
@ -135,7 +135,7 @@ msgid "Simplified Chinese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "언어" msgstr "언어"
@ -145,7 +145,7 @@ msgid "Night Mode"
msgstr "야간 모드" msgstr "야간 모드"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "테마" msgstr "테마"
@ -216,6 +216,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:136
#: 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 "토큰 관리"
@ -1490,20 +1492,38 @@ msgstr "폴더 추가"
msgid "Notifications" msgid "Notifications"
msgstr "알림" msgstr "알림"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "Super User" msgstr "Super User"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: 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:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "탈퇴" msgstr "탈퇴"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2674,7 +2694,7 @@ msgstr "로그아웃"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "네비게이션 전환" msgstr "네비게이션 전환"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "테마 선택" msgstr "테마 선택"

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: MisBimbrownik, 2024\n" "Last-Translator: MisBimbrownik, 2024\n"
"Language-Team: Polish (Poland) (https://app.transifex.com/alliance-auth/teams/107430/pl_PL/)\n" "Language-Team: Polish (Poland) (https://app.transifex.com/alliance-auth/teams/107430/pl_PL/)\n"
@ -135,7 +135,7 @@ msgid "Simplified Chinese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Język" msgstr "Język"
@ -145,7 +145,7 @@ msgid "Night Mode"
msgstr "Tryb nocny" msgstr "Tryb nocny"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "Styl" msgstr "Styl"
@ -216,6 +216,8 @@ msgstr "Stan:"
#: 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:136
#: 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 "Zarządzanie Tokenem" msgstr "Zarządzanie Tokenem"
@ -1526,20 +1528,38 @@ msgstr "Dodaj folder"
msgid "Notifications" msgid "Notifications"
msgstr "Powiadomienia" msgstr "Powiadomienia"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "Super-Użytkownik" msgstr "Super-Użytkownik"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: allianceauth/templates/allianceauth/top-menu-admin.html:9 #: allianceauth/templates/allianceauth/top-menu-admin.html:9
msgid "Admin" msgid "Admin"
msgstr "Administrator" msgstr "Administrator"
#: allianceauth/menu/templates/menu/menu-user.html:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "Wyloguj" msgstr "Wyloguj"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2725,7 +2745,7 @@ msgstr "Wyloguj"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Przełącz nawigację" msgstr "Przełącz nawigację"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "Wybierz styl" msgstr "Wybierz styl"

View File

@ -16,7 +16,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2024\n" "Last-Translator: Joel Falknau <ozirascal@gmail.com>, 2024\n"
"Language-Team: Russian (https://app.transifex.com/alliance-auth/teams/107430/ru/)\n" "Language-Team: Russian (https://app.transifex.com/alliance-auth/teams/107430/ru/)\n"
@ -130,7 +130,7 @@ msgid "Simplified Chinese"
msgstr "" msgstr ""
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Язык" msgstr "Язык"
@ -140,7 +140,7 @@ msgid "Night Mode"
msgstr "Ночной режим" msgstr "Ночной режим"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "" msgstr ""
@ -211,6 +211,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:136
#: 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 "Управление токенами"
@ -1515,20 +1517,38 @@ msgstr ""
msgid "Notifications" msgid "Notifications"
msgstr "Уведомления" msgstr "Уведомления"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: 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:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2713,7 +2733,7 @@ msgstr "Выход"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Проложить маршрут" msgstr "Проложить маршрут"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "" msgstr ""

View File

@ -14,7 +14,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Bandera Primary, 2025\n" "Last-Translator: Bandera Primary, 2025\n"
"Language-Team: Ukrainian (https://app.transifex.com/alliance-auth/teams/107430/uk/)\n" "Language-Team: Ukrainian (https://app.transifex.com/alliance-auth/teams/107430/uk/)\n"
@ -134,7 +134,7 @@ msgid "Simplified Chinese"
msgstr "Cпрощена китайська" msgstr "Cпрощена китайська"
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "Мова" msgstr "Мова"
@ -144,7 +144,7 @@ msgid "Night Mode"
msgstr "Нічний режим" msgstr "Нічний режим"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "Тема" msgstr "Тема"
@ -215,6 +215,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:136
#: 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 "Керування токенами"
@ -1533,20 +1535,38 @@ msgstr "Додати теку"
msgid "Notifications" msgid "Notifications"
msgstr "Повідомлення" msgstr "Повідомлення"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "Супер користувач" msgstr "Супер користувач"
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: 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:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "Вийти" msgstr "Вийти"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2737,7 +2757,7 @@ msgstr "Вихід"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "Перемикання навігації" msgstr "Перемикання навігації"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "Виберіть тему" msgstr "Виберіть тему"

View File

@ -15,7 +15,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-05-24 16:55+1000\n" "POT-Creation-Date: 2025-06-19 20:23+1000\n"
"PO-Revision-Date: 2023-11-08 13:50+0000\n" "PO-Revision-Date: 2023-11-08 13:50+0000\n"
"Last-Translator: Aika Yu, 2025\n" "Last-Translator: Aika Yu, 2025\n"
"Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n" "Language-Team: Chinese Simplified (https://app.transifex.com/alliance-auth/teams/107430/zh-Hans/)\n"
@ -128,7 +128,7 @@ msgid "Simplified Chinese"
msgstr "简体中文" msgstr "简体中文"
#: allianceauth/authentication/models.py:100 #: allianceauth/authentication/models.py:100
#: allianceauth/menu/templates/menu/menu-user.html:42 #: allianceauth/menu/templates/menu/menu-user.html:67
msgid "Language" msgid "Language"
msgstr "语言" msgstr "语言"
@ -138,7 +138,7 @@ msgid "Night Mode"
msgstr "夜间模式" msgstr "夜间模式"
#: allianceauth/authentication/models.py:109 #: allianceauth/authentication/models.py:109
#: allianceauth/menu/templates/menu/menu-user.html:46 #: allianceauth/theme/templates/theme/theme_select.html:4
msgid "Theme" msgid "Theme"
msgstr "" msgstr ""
@ -209,6 +209,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:136
#: 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 ""
@ -1471,20 +1473,38 @@ msgstr ""
msgid "Notifications" msgid "Notifications"
msgstr "通知" msgstr "通知"
#: allianceauth/menu/templates/menu/menu-user.html:56 #: allianceauth/menu/templates/menu/menu-user.html:77
msgid "Super User" msgid "Super User"
msgstr "" msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:70 #: allianceauth/menu/templates/menu/menu-user.html:83
#: allianceauth/menu/templates/menu/menu-user.html:86
msgid "Alliance Auth Documentation"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:94
#: allianceauth/menu/templates/menu/menu-user.html:97
msgid "Alliance Auth Discord"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:105
#: allianceauth/menu/templates/menu/menu-user.html:108
msgid "Alliance Auth Git"
msgstr ""
#: allianceauth/menu/templates/menu/menu-user.html:118
#: allianceauth/menu/templates/menu/menu-user.html:121
#: 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:82 #: allianceauth/menu/templates/menu/menu-user.html:144
#: allianceauth/menu/templates/menu/menu-user.html:147
msgid "Sign Out" msgid "Sign Out"
msgstr "登出" msgstr "登出"
#: allianceauth/menu/templates/menu/menu-user.html:86 #: allianceauth/menu/templates/menu/menu-user.html:155
#: allianceauth/menu/templates/menu/menu-user.html:158
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:17 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:17
#: allianceauth/templates/allianceauth/top-menu-rh-default.html:18 #: allianceauth/templates/allianceauth/top-menu-rh-default.html:18
msgid "Sign In" msgid "Sign In"
@ -2652,7 +2672,7 @@ msgstr "登出"
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "打开导航栏" msgstr "打开导航栏"
#: allianceauth/theme/templates/theme/theme_select.html:7 #: allianceauth/theme/templates/theme/theme_select.html:11
msgid "Select Theme" msgid "Select Theme"
msgstr "" msgstr ""

View File

@ -26,7 +26,7 @@ app.conf.task_default_priority = 5 # anything called with the task.delay() will
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
app.conf.ONCE = { app.conf.ONCE = {
'backend': 'allianceauth.services.tasks.DjangoBackend', 'backend': 'allianceauth.services.celery_once.backends.DjangoBackend',
'settings': {} 'settings': {}
} }

View File

@ -15,68 +15,68 @@ from django.contrib import messages
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
INSTALLED_APPS = [ INSTALLED_APPS = [
'allianceauth', # needs to be on top of this list to support favicons in Django admin (see https://gitlab.com/allianceauth/allianceauth/-/issues/1301) "allianceauth", # needs to be on top of this list to support favicons in Django admin (see https://gitlab.com/allianceauth/allianceauth/-/issues/1301)
'django.contrib.admin', "django.contrib.admin",
'django.contrib.auth', "django.contrib.auth",
'django.contrib.contenttypes', "django.contrib.contenttypes",
'django.contrib.sessions', "django.contrib.sessions",
'django.contrib.messages', "django.contrib.messages",
'django.contrib.staticfiles', "django.contrib.staticfiles",
'django.contrib.humanize', "django.contrib.humanize",
'django_celery_beat', "django_celery_beat",
'solo', "solo",
'bootstrapform', "bootstrapform",
'django_bootstrap5', # https://github.com/zostera/django-bootstrap5 "django_bootstrap5", # https://github.com/zostera/django-bootstrap5
'sortedm2m', "sortedm2m",
'esi', "esi",
'allianceauth.framework', "allianceauth.framework",
'allianceauth.authentication', "allianceauth.authentication",
'allianceauth.services', "allianceauth.services",
'allianceauth.eveonline', "allianceauth.eveonline",
'allianceauth.groupmanagement', "allianceauth.groupmanagement",
'allianceauth.notifications', "allianceauth.notifications",
'allianceauth.thirdparty.navhelper', "allianceauth.thirdparty.navhelper",
'allianceauth.analytics', "allianceauth.analytics",
'allianceauth.menu', "allianceauth.menu",
'allianceauth.theme', "allianceauth.theme",
'allianceauth.theme.darkly', "allianceauth.theme.darkly",
'allianceauth.theme.flatly', "allianceauth.theme.flatly",
'allianceauth.theme.materia', "allianceauth.theme.materia",
"allianceauth.custom_css", "allianceauth.custom_css",
'allianceauth.crontab', "allianceauth.crontab",
'sri', "sri",
] ]
SRI_ALGORITHM = "sha512" SRI_ALGORITHM = "sha512"
SECRET_KEY = "wow I'm a really bad default secret key" SECRET_KEY = "wow I'm a really bad default secret key"
# Celery configuration # Celery configuration
BROKER_URL = 'redis://localhost:6379/0' BROKER_URL = "redis://localhost:6379/0"
CELERYBEAT_SCHEDULER = "allianceauth.crontab.schedulers.OffsetDatabaseScheduler" CELERYBEAT_SCHEDULER = "allianceauth.crontab.schedulers.OffsetDatabaseScheduler"
CELERYBEAT_SCHEDULE = { CELERYBEAT_SCHEDULE = {
'esi_cleanup_callbackredirect': { "esi_cleanup_callbackredirect": {
'task': 'esi.tasks.cleanup_callbackredirect', "task": "esi.tasks.cleanup_callbackredirect",
'schedule': crontab(minute='0', hour='*/4'), "schedule": crontab(minute="0", hour="*/4"),
}, },
'esi_cleanup_token': { "esi_cleanup_token": {
'task': 'esi.tasks.cleanup_token', "task": "esi.tasks.cleanup_token",
'schedule': crontab(minute='0', hour='0'), "schedule": crontab(minute="0", hour="0"),
'apply_offset': True, "apply_offset": True,
}, },
'run_model_update': { "run_model_update": {
'task': 'allianceauth.eveonline.tasks.run_model_update', "task": "allianceauth.eveonline.tasks.run_model_update",
'schedule': crontab(minute='0', hour="*/6"), "schedule": crontab(minute="0", hour="*/6"),
'apply_offset': True "apply_offset": True,
}, },
'check_all_character_ownership': { "check_all_character_ownership": {
'task': 'allianceauth.authentication.tasks.check_all_character_ownership', "task": "allianceauth.authentication.tasks.check_all_character_ownership",
'schedule': crontab(minute='0', hour='*/4'), "schedule": crontab(minute="0", hour="*/4"),
'apply_offset': True "apply_offset": True,
},
"analytics_daily_stats": {
"task": "allianceauth.analytics.tasks.analytics_daily_stats",
"schedule": crontab(minute="0", hour="2"),
}, },
'analytics_daily_stats': {
'task': 'allianceauth.analytics.tasks.analytics_daily_stats',
'schedule': crontab(minute='0', hour='2'),
}
} }
@ -85,22 +85,20 @@ PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = os.path.dirname(PROJECT_DIR) BASE_DIR = os.path.dirname(PROJECT_DIR)
MIDDLEWARE = [ MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', "django.middleware.security.SecurityMiddleware",
'django.contrib.sessions.middleware.SessionMiddleware', "django.contrib.sessions.middleware.SessionMiddleware",
'allianceauth.authentication.middleware.UserSettingsMiddleware', "allianceauth.authentication.middleware.UserSettingsMiddleware",
'django.middleware.locale.LocaleMiddleware', "django.middleware.locale.LocaleMiddleware",
'django.middleware.common.CommonMiddleware', "django.middleware.common.CommonMiddleware",
'django.middleware.csrf.CsrfViewMiddleware', "django.middleware.csrf.CsrfViewMiddleware",
'django.contrib.auth.middleware.AuthenticationMiddleware', "django.contrib.auth.middleware.AuthenticationMiddleware",
'django.contrib.messages.middleware.MessageMiddleware', "django.contrib.messages.middleware.MessageMiddleware",
'django.middleware.clickjacking.XFrameOptionsMiddleware', "django.middleware.clickjacking.XFrameOptionsMiddleware",
] ]
ROOT_URLCONF = 'allianceauth.urls' ROOT_URLCONF = "allianceauth.urls"
LOCALE_PATHS = ( LOCALE_PATHS = (os.path.join(BASE_DIR, "locale/"),)
os.path.join(BASE_DIR, 'locale/'),
)
LANGUAGES = ( # Sorted by Language Code alphabetical order + English at top LANGUAGES = ( # Sorted by Language Code alphabetical order + English at top
("en", _("English")), ("en", _("English")),
@ -160,58 +158,58 @@ LANGUAGE_MAPPING = {
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', "BACKEND": "django.template.backends.django.DjangoTemplates",
'DIRS': [os.path.join(PROJECT_DIR, 'templates')], "DIRS": [os.path.join(PROJECT_DIR, "templates")],
'APP_DIRS': True, "APP_DIRS": True,
'OPTIONS': { "OPTIONS": {
'context_processors': [ "context_processors": [
'django.template.context_processors.debug', "django.template.context_processors.debug",
'django.template.context_processors.request', "django.template.context_processors.request",
'django.contrib.auth.context_processors.auth', "django.contrib.auth.context_processors.auth",
'django.contrib.messages.context_processors.messages', "django.contrib.messages.context_processors.messages",
'django.template.context_processors.i18n', "django.template.context_processors.i18n",
'django.template.context_processors.media', "django.template.context_processors.media",
'django.template.context_processors.static', "django.template.context_processors.static",
'django.template.context_processors.tz', "django.template.context_processors.tz",
'allianceauth.context_processors.auth_settings', "allianceauth.context_processors.auth_settings",
], ],
}, },
}, },
] ]
WSGI_APPLICATION = 'allianceauth.wsgi.application' WSGI_APPLICATION = "allianceauth.wsgi.application"
# Password validation # Password validation
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [ AUTH_PASSWORD_VALIDATORS = [
{ {
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
}, },
{ {
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
}, },
{ {
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
}, },
{ {
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
}, },
] ]
AUTHENTICATION_BACKENDS = [ AUTHENTICATION_BACKENDS = [
'allianceauth.authentication.backends.StateBackend', "allianceauth.authentication.backends.StateBackend",
'django.contrib.auth.backends.ModelBackend' "django.contrib.auth.backends.ModelBackend",
] ]
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/1.10/topics/i18n/ # https://docs.djangoproject.com/en/1.10/topics/i18n/
LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = "en-us"
LANGUAGE_COOKIE_AGE = 1209600 LANGUAGE_COOKIE_AGE = 1209600
TIME_ZONE = 'UTC' TIME_ZONE = "UTC"
USE_I18N = True USE_I18N = True
@ -219,44 +217,51 @@ USE_TZ = True
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/ # https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/' STORAGES = {
"default": {
"BACKEND": "django.core.files.storage.FileSystemStorage",
},
"staticfiles": {
"BACKEND": "allianceauth.framework.staticfiles.storage.AaManifestStaticFilesStorage",
},
}
STATIC_URL = "/static/"
STATICFILES_DIRS = [ STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, 'static'), os.path.join(PROJECT_DIR, "static"),
] ]
STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATIC_ROOT = os.path.join(BASE_DIR, "static")
# Bootstrap messaging css workaround # Bootstrap messaging css workaround
MESSAGE_TAGS = { MESSAGE_TAGS = {messages.ERROR: "danger error"}
messages.ERROR: 'danger error'
}
CACHES = { CACHES = {
"default": { "default": {
"BACKEND": "django_redis.cache.RedisCache", "BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1" # change the 1 here for the DB used "LOCATION": "redis://127.0.0.1:6379/1", # change the 1 here for the DB used
} }
} }
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db" SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
DEBUG = True DEBUG = True
ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ["*"]
DATABASES = { DATABASES = {
'default': { "default": {
'ENGINE': 'django.db.backends.sqlite3', "ENGINE": "django.db.backends.sqlite3",
'NAME': str(os.path.join(BASE_DIR, 'alliance_auth.sqlite3')), "NAME": str(os.path.join(BASE_DIR, "alliance_auth.sqlite3")),
}, },
} }
SITE_NAME = 'Alliance Auth' SITE_NAME = "Alliance Auth"
DEFAULT_THEME = "allianceauth.theme.flatly.auth_hooks.FlatlyThemeHook" DEFAULT_THEME = "allianceauth.theme.flatly.auth_hooks.FlatlyThemeHook"
DEFAULT_THEME_DARK = "allianceauth.theme.darkly.auth_hooks.DarklyThemeHook" # Legacy AAv3 user.profile.night_mode=1 DEFAULT_THEME_DARK = "allianceauth.theme.darkly.auth_hooks.DarklyThemeHook" # Legacy AAv3 user.profile.night_mode=1
LOGIN_URL = 'auth_login_user' # view that handles login logic LOGIN_URL = "auth_login_user" # view that handles login logic
LOGIN_REDIRECT_URL = 'authentication:dashboard' # default destination when logging in if no redirect specified LOGIN_REDIRECT_URL = "authentication:dashboard" # default destination when logging in if no redirect specified
LOGOUT_REDIRECT_URL = 'authentication:dashboard' # destination after logging out LOGOUT_REDIRECT_URL = "authentication:dashboard" # destination after logging out
# Both of these redirects accept values as per the django redirect shortcut # Both of these redirects accept values as per the django redirect shortcut
# https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/#redirect # https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/#redirect
# - url names eg 'authentication:dashboard' # - url names eg 'authentication:dashboard'
@ -264,73 +269,71 @@ LOGOUT_REDIRECT_URL = 'authentication:dashboard' # destination after logging ou
# - absolute urls eg 'http://example.com/dashboard' # - absolute urls eg 'http://example.com/dashboard'
# scopes required on new tokens when logging in. Cannot be blank. # scopes required on new tokens when logging in. Cannot be blank.
LOGIN_TOKEN_SCOPES = ['publicData'] LOGIN_TOKEN_SCOPES = ["publicData"]
EMAIL_TIMEOUT = 15 EMAIL_TIMEOUT = 15
# number of days email verification links are valid for # number of days email verification links are valid for
ACCOUNT_ACTIVATION_DAYS = 1 ACCOUNT_ACTIVATION_DAYS = 1
ESI_API_URL = 'https://esi.evetech.net/' ESI_API_URL = "https://esi.evetech.net/"
LOGGING = { LOGGING = {
'version': 1, "version": 1,
'disable_existing_loggers': False, "disable_existing_loggers": False,
'formatters': { "formatters": {
'verbose': { "verbose": {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", "format": "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S" "datefmt": "%d/%b/%Y %H:%M:%S",
}, },
'simple': { "simple": {"format": "%(levelname)s %(message)s"},
'format': '%(levelname)s %(message)s' },
"handlers": {
"log_file": {
"level": "INFO", # edit this line to change logging level to file
"class": "logging.handlers.RotatingFileHandler",
"filename": os.path.join(BASE_DIR, "log/allianceauth.log"),
"formatter": "verbose",
"maxBytes": 1024 * 1024 * 5, # edit this line to change max log file size
"backupCount": 5, # edit this line to change number of log backups
},
"extension_file": {
"level": "INFO",
"class": "logging.handlers.RotatingFileHandler",
"filename": os.path.join(BASE_DIR, "log/extensions.log"),
"formatter": "verbose",
"maxBytes": 1024 * 1024 * 5, # edit this line to change max log file size
"backupCount": 5, # edit this line to change number of log backups
},
"console": {
"level": "DEBUG", # edit this line to change logging level to console
"class": "logging.StreamHandler",
"formatter": "verbose",
},
"notifications": { # creates notifications for users with logging_notifications permission
"level": "ERROR", # edit this line to change logging level to notifications
"class": "allianceauth.notifications.handlers.NotificationHandler",
"formatter": "verbose",
}, },
}, },
'handlers': { "loggers": {
'log_file': { "allianceauth": {
'level': 'INFO', # edit this line to change logging level to file "handlers": ["log_file", "console", "notifications"],
'class': 'logging.handlers.RotatingFileHandler', "level": "DEBUG",
'filename': os.path.join(BASE_DIR, 'log/allianceauth.log'),
'formatter': 'verbose',
'maxBytes': 1024 * 1024 * 5, # edit this line to change max log file size
'backupCount': 5, # edit this line to change number of log backups
}, },
'extension_file': { "extensions": {
'level': 'INFO', "handlers": ["extension_file", "console"],
'class': 'logging.handlers.RotatingFileHandler', "level": "DEBUG",
'filename': os.path.join(BASE_DIR, 'log/extensions.log'),
'formatter': 'verbose',
'maxBytes': 1024 * 1024 * 5, # edit this line to change max log file size
'backupCount': 5, # edit this line to change number of log backups
}, },
'console': { "django": {
'level': 'DEBUG', # edit this line to change logging level to console "handlers": ["log_file", "console"],
'class': 'logging.StreamHandler', "level": "ERROR",
'formatter': 'verbose',
}, },
'notifications': { # creates notifications for users with logging_notifications permission "esi": {
'level': 'ERROR', # edit this line to change logging level to notifications "handlers": ["log_file", "console"],
'class': 'allianceauth.notifications.handlers.NotificationHandler', "level": "DEBUG",
'formatter': 'verbose',
}, },
}, },
'loggers': {
'allianceauth': {
'handlers': ['log_file', 'console', 'notifications'],
'level': 'DEBUG',
},
'extensions': {
'handlers': ['extension_file', 'console'],
'level': 'DEBUG',
},
'django': {
'handlers': ['log_file', 'console'],
'level': 'ERROR',
},
'esi': {
'handlers': ['log_file', 'console'],
'level': 'DEBUG',
},
}
} }
DEFAULT_AUTO_FIELD = "django.db.models.AutoField" DEFAULT_AUTO_FIELD = "django.db.models.AutoField"

View File

@ -0,0 +1,19 @@
from celery_once import AlreadyQueued
from django.core.cache import cache
class DjangoBackend:
"""Locking backend for celery once."""
def __init__(self, settings):
pass
@staticmethod
def raise_or_lock(key, timeout):
acquired = cache.add(key=key, value="lock", timeout=timeout)
if not acquired:
raise AlreadyQueued(int(cache.ttl(key)))
@staticmethod
def clear_lock(key):
return cache.delete(key)

View File

@ -0,0 +1,8 @@
from celery_once import QueueOnce as BaseTask
class QueueOnce(BaseTask):
"""QueueOnce class with custom defaults."""
once = BaseTask.once
once["graceful"] = True

View File

@ -0,0 +1,47 @@
from celery_once import AlreadyQueued
from django.core.cache import cache
from django.test import TestCase
from allianceauth.services.celery_once.backends import DjangoBackend
class TestDjangoBackend(TestCase):
TEST_KEY = "my-django-backend-test-key"
TIMEOUT = 1800
def setUp(self) -> None:
cache.delete(self.TEST_KEY)
self.backend = DjangoBackend(dict())
def test_can_get_lock(self):
"""
when lock can be acquired
then set it with timeout
"""
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
self.assertIsNotNone(cache.get(self.TEST_KEY))
self.assertAlmostEqual(cache.ttl(self.TEST_KEY), self.TIMEOUT, delta=2)
def test_when_cant_get_lock_raise_exception(self):
"""
when lock can bot be acquired
then raise AlreadyQueued exception with countdown
"""
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
try:
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
except Exception as ex:
self.assertIsInstance(ex, AlreadyQueued)
self.assertAlmostEqual(ex.countdown, self.TIMEOUT, delta=2)
def test_can_clear_lock(self):
"""
when a lock exists
then can get a new lock after clearing it
"""
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
self.backend.clear_lock(self.TEST_KEY)
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
self.assertIsNotNone(cache.get(self.TEST_KEY))

View File

@ -3,33 +3,11 @@ import logging
from celery import shared_task from celery import shared_task
from django.contrib.auth.models import User from django.contrib.auth.models import User
from .hooks import ServicesHook from .hooks import ServicesHook
from celery_once import QueueOnce as BaseTask, AlreadyQueued from .celery_once.tasks import QueueOnce # noqa: F401 - for backwards compatibility
from django.core.cache import cache
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class QueueOnce(BaseTask):
once = BaseTask.once
once['graceful'] = True
class DjangoBackend:
def __init__(self, settings):
pass
@staticmethod
def raise_or_lock(key, timeout):
acquired = cache.add(key=key, value="lock", timeout=timeout)
if not acquired:
raise AlreadyQueued(int(cache.ttl(key)))
@staticmethod
def clear_lock(key):
return cache.delete(key)
@shared_task(bind=True) @shared_task(bind=True)
def validate_services(self, pk): def validate_services(self, pk):
user = User.objects.get(pk=pk) user = User.objects.get(pk=pk)
@ -38,7 +16,7 @@ def validate_services(self, pk):
for svc in ServicesHook.get_services(): for svc in ServicesHook.get_services():
try: try:
svc.validate_user(user) svc.validate_user(user)
except: except Exception:
logger.exception(f'Exception running validate_user for services module {svc} on user {user}') logger.exception(f'Exception running validate_user for services module {svc} on user {user}')

View File

@ -1,15 +1,10 @@
from unittest import mock from unittest import mock
from celery_once import AlreadyQueued
from django.core.cache import cache
from django.test import override_settings, TestCase from django.test import override_settings, TestCase
from allianceauth.tests.auth_utils import AuthUtils from allianceauth.tests.auth_utils import AuthUtils
from allianceauth.services.tasks import validate_services, update_groups_for_user from allianceauth.services.tasks import validate_services, update_groups_for_user
from ..tasks import DjangoBackend
@override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True) @override_settings(CELERY_ALWAYS_EAGER=True, CELERY_EAGER_PROPAGATES_EXCEPTIONS=True)
class ServicesTasksTestCase(TestCase): class ServicesTasksTestCase(TestCase):
@ -46,46 +41,3 @@ class ServicesTasksTestCase(TestCase):
self.assertTrue(svc.update_groups.called) self.assertTrue(svc.update_groups.called)
args, _ = svc.update_groups.call_args args, _ = svc.update_groups.call_args
self.assertEqual(self.member, args[0]) # Assert correct user self.assertEqual(self.member, args[0]) # Assert correct user
class TestDjangoBackend(TestCase):
TEST_KEY = "my-django-backend-test-key"
TIMEOUT = 1800
def setUp(self) -> None:
cache.delete(self.TEST_KEY)
self.backend = DjangoBackend(dict())
def test_can_get_lock(self):
"""
when lock can be acquired
then set it with timetout
"""
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
self.assertIsNotNone(cache.get(self.TEST_KEY))
self.assertAlmostEqual(cache.ttl(self.TEST_KEY), self.TIMEOUT, delta=2)
def test_when_cant_get_lock_raise_exception(self):
"""
when lock can bot be acquired
then raise AlreadyQueued exception with countdown
"""
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
try:
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
except Exception as ex:
self.assertIsInstance(ex, AlreadyQueued)
self.assertAlmostEqual(ex.countdown, self.TIMEOUT, delta=2)
def test_can_clear_lock(self):
"""
when a lock exists
then can get a new lock after clearing it
"""
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
self.backend.clear_lock(self.TEST_KEY)
self.backend.raise_or_lock(self.TEST_KEY, self.TIMEOUT)
self.assertIsNotNone(cache.get(self.TEST_KEY))

View File

@ -102,19 +102,24 @@
(() => { (() => {
// TODO Move to own JS file // TODO Move to own JS file
const sidebar = document.getElementById('sidebar'); const sidebar = document.getElementById('sidebar');
const sidebarKey = `sidebar_${sidebar.id}`;
sidebar.addEventListener('shown.bs.collapse', () => { sidebar.addEventListener('shown.bs.collapse', (event) => {
localStorage.removeItem(`sidebar_${sidebar.id}`); if (event.target.id === sidebar.id) {
localStorage.removeItem(sidebarKey);
}
}); });
sidebar.addEventListener('hidden.bs.collapse', () => { sidebar.addEventListener('hidden.bs.collapse', (event) => {
localStorage.setItem(`sidebar_${sidebar.id}`, 'closed'); if (event.target.id === sidebar.id) {
localStorage.setItem(sidebarKey, 'closed');
}
}); });
if (localStorage.getItem(`sidebar_${sidebar.id}`) === 'closed') { if (localStorage.getItem(sidebarKey) === 'closed') {
sidebar.classList.remove('show') sidebar.classList.remove('show');
} else { } else {
sidebar.classList.add("show") sidebar.classList.add('show');
} }
const activeChildMenuItem = document.querySelector('#sidebar-menu li ul li a.active'); const activeChildMenuItem = document.querySelector('#sidebar-menu li ul li a.active');
@ -133,6 +138,7 @@
</script> </script>
{% include 'bundles/jquery-js.html' %} {% include 'bundles/jquery-js.html' %}
{% theme_js %} {% theme_js %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
@ -148,6 +154,7 @@
{% block extra_javascript %} {% block extra_javascript %}
{% endblock extra_javascript %} {% endblock extra_javascript %}
<script> <script>
{% block extra_script %} {% block extra_script %}
{% endblock extra_script %} {% endblock extra_script %}

View File

@ -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.7.0 AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.8.0
# Nginx Proxy Manager # Nginx Proxy Manager
PROXY_HTTP_PORT=80 PROXY_HTTP_PORT=80

View File

@ -1,5 +1,5 @@
FROM python:3.11-slim FROM python:3.11-slim
ARG AUTH_VERSION=v4.7.0 ARG AUTH_VERSION=v4.8.0
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

View File

@ -26,7 +26,7 @@ app.conf.task_default_priority = 5 # anything called with the task.delay() will
app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen app.conf.worker_prefetch_multiplier = 1 # only prefetch single tasks at a time on the workers so that prio tasks happen
app.conf.ONCE = { app.conf.ONCE = {
'backend': 'allianceauth.services.tasks.DjangoBackend', 'backend': 'allianceauth.services.celery_once.backends.DjangoBackend',
'settings': {} 'settings': {}
} }