aa-bulletin-board 2.2.5__py3-none-any.whl → 2.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. aa_bulletin_board/__init__.py +4 -4
  2. aa_bulletin_board/apps.py +3 -2
  3. aa_bulletin_board/constants.py +17 -0
  4. aa_bulletin_board/helper/__init__.py +3 -0
  5. aa_bulletin_board/helper/static_files.py +42 -0
  6. aa_bulletin_board/locale/cs_CZ/LC_MESSAGES/django.po +25 -37
  7. aa_bulletin_board/locale/de/LC_MESSAGES/django.po +25 -38
  8. aa_bulletin_board/locale/django.pot +19 -19
  9. aa_bulletin_board/locale/es/LC_MESSAGES/django.po +25 -38
  10. aa_bulletin_board/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  11. aa_bulletin_board/locale/fr_FR/LC_MESSAGES/django.po +34 -46
  12. aa_bulletin_board/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  13. aa_bulletin_board/locale/it_IT/LC_MESSAGES/django.po +25 -32
  14. aa_bulletin_board/locale/ja/LC_MESSAGES/django.po +23 -32
  15. aa_bulletin_board/locale/ko_KR/LC_MESSAGES/django.po +24 -35
  16. aa_bulletin_board/locale/nl_NL/LC_MESSAGES/django.po +22 -29
  17. aa_bulletin_board/locale/pl_PL/LC_MESSAGES/django.po +24 -34
  18. aa_bulletin_board/locale/ru/LC_MESSAGES/django.po +25 -37
  19. aa_bulletin_board/locale/sk/LC_MESSAGES/django.po +23 -31
  20. aa_bulletin_board/locale/uk/LC_MESSAGES/django.mo +0 -0
  21. aa_bulletin_board/locale/uk/LC_MESSAGES/django.po +33 -47
  22. aa_bulletin_board/locale/zh_Hans/LC_MESSAGES/django.po +23 -32
  23. aa_bulletin_board/models.py +2 -1
  24. aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-css.html +1 -1
  25. aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-equal-height-js.html +1 -1
  26. aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-oembed-js.html +1 -1
  27. aa_bulletin_board/templates/aa_bulletin_board/bundles/ckeditor5-css.html +2 -2
  28. aa_bulletin_board/templates/aa_bulletin_board/bundles/ckeditor5-js.html +2 -2
  29. aa_bulletin_board/templates/aa_bulletin_board/bundles/sumoselect-css.html +2 -2
  30. aa_bulletin_board/templates/aa_bulletin_board/bundles/sumoselect-js.html +2 -2
  31. aa_bulletin_board/templatetags/aa_bulletin_board.py +70 -9
  32. aa_bulletin_board/tests/test_templatetags.py +66 -7
  33. {aa_bulletin_board-2.2.5.dist-info → aa_bulletin_board-2.3.1.dist-info}/METADATA +21 -21
  34. {aa_bulletin_board-2.2.5.dist-info → aa_bulletin_board-2.3.1.dist-info}/RECORD +36 -33
  35. {aa_bulletin_board-2.2.5.dist-info → aa_bulletin_board-2.3.1.dist-info}/WHEEL +1 -1
  36. {aa_bulletin_board-2.2.5.dist-info → aa_bulletin_board-2.3.1.dist-info}/licenses/LICENSE +0 -0
@@ -10,11 +10,10 @@ msgid ""
10
10
  msgstr ""
11
11
  "Project-Id-Version: PACKAGE VERSION\n"
12
12
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-bulletin-board/issues\n"
13
- "POT-Creation-Date: 2024-12-14 13:27+0100\n"
13
+ "POT-Creation-Date: 2025-03-06 13:29+0100\n"
14
14
  "PO-Revision-Date: 2024-05-28 16:27+0000\n"
15
15
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
16
- "Language-Team: Chinese (Simplified) <https://weblate.ppfeufer.de/projects/"
17
- "alliance-auth-apps/aa-bulletin-board/zh_Hans/>\n"
16
+ "Language-Team: Chinese (Simplified) <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-bulletin-board/zh_Hans/>\n"
18
17
  "Language: zh_Hans\n"
19
18
  "MIME-Version: 1.0\n"
20
19
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,7 +21,13 @@ msgstr ""
22
21
  "Plural-Forms: nplurals=1; plural=0;\n"
23
22
  "X-Generator: Weblate 5.5.5\n"
24
23
 
25
- #: aa_bulletin_board/__init__.py:9 aa_bulletin_board/models.py:67
24
+ #. Translators: This is the app name and version, which will appear in the Django Backend
25
+ #: aa_bulletin_board/apps.py:22
26
+ #, python-brace-format
27
+ msgid "Bulletin Board v{__version__}"
28
+ msgstr "公告栏v{__version__}"
29
+
30
+ #: aa_bulletin_board/constants.py:13
26
31
  #: aa_bulletin_board/templates/aa_bulletin_board/base.html:6
27
32
  #: aa_bulletin_board/templates/aa_bulletin_board/base.html:10
28
33
  #: aa_bulletin_board/templates/aa_bulletin_board/bulletin.html:5
@@ -30,63 +35,53 @@ msgstr ""
30
35
  msgid "Bulletin Board"
31
36
  msgstr "公告栏"
32
37
 
33
- #. Translators: This is the app name and version, which will appear in the Django Backend
34
- #: aa_bulletin_board/apps.py:21
35
- #, python-brace-format
36
- msgid "Bulletin Board v{__version__}"
37
- msgstr "公告栏v{__version__}"
38
-
39
38
  #: aa_bulletin_board/forms.py:63
40
- msgid ""
41
- "Restrict this bulletin to certain groups. If no group restrictions are in "
42
- "place, everyone who has access to this module can read this bulletin."
43
- msgstr ""
44
- "限制此公告为特定组可阅读。如果没有设置组限制,每个访问此模块的人都可以阅读此"
45
- "公告。"
39
+ msgid "Restrict this bulletin to certain groups. If no group restrictions are in place, everyone who has access to this module can read this bulletin."
40
+ msgstr "限制此公告为特定组可阅读。如果没有设置组限制,每个访问此模块的人都可以阅读此公告。"
46
41
 
47
42
  #: aa_bulletin_board/forms.py:110
48
43
  msgid "You have forgotten the content!"
49
44
  msgstr "你忘记了内容!"
50
45
 
51
- #: aa_bulletin_board/models.py:71
46
+ #: aa_bulletin_board/models.py:72
52
47
  msgid "Can access this app"
53
48
  msgstr "能够访问此应用程序"
54
49
 
55
- #: aa_bulletin_board/models.py:72
50
+ #: aa_bulletin_board/models.py:73
56
51
  msgid "Can manage (add/change/remove) bulletins"
57
52
  msgstr "可以管理(添加/更改/移除)公告"
58
53
 
59
- #: aa_bulletin_board/models.py:81
54
+ #: aa_bulletin_board/models.py:82
60
55
  msgid "Title"
61
56
  msgstr "头衔"
62
57
 
63
- #: aa_bulletin_board/models.py:84
58
+ #: aa_bulletin_board/models.py:85
64
59
  msgid "Content"
65
60
  msgstr "目录"
66
61
 
67
62
  #. Translators: This is the date and time the bulletin has been created
68
- #: aa_bulletin_board/models.py:90
63
+ #: aa_bulletin_board/models.py:91
69
64
  msgid "Created"
70
65
  msgstr "创建"
71
66
 
72
67
  #. Translators: This is the date and time the bulletin has been updated
73
- #: aa_bulletin_board/models.py:96
68
+ #: aa_bulletin_board/models.py:97
74
69
  msgid "Updated"
75
70
  msgstr "更新"
76
71
 
77
- #: aa_bulletin_board/models.py:105
72
+ #: aa_bulletin_board/models.py:106
78
73
  msgid "User"
79
74
  msgstr "用户"
80
75
 
81
- #: aa_bulletin_board/models.py:111
76
+ #: aa_bulletin_board/models.py:112
82
77
  msgid "Group restrictions"
83
78
  msgstr "组别限制"
84
79
 
85
- #: aa_bulletin_board/models.py:122
80
+ #: aa_bulletin_board/models.py:123
86
81
  msgid "Bulletin"
87
82
  msgstr "公告"
88
83
 
89
- #: aa_bulletin_board/models.py:123
84
+ #: aa_bulletin_board/models.py:124
90
85
  msgid "Bulletins"
91
86
  msgstr "公告"
92
87
 
@@ -140,9 +135,7 @@ msgid "Add bulletin"
140
135
  msgstr "添加公告"
141
136
 
142
137
  #: aa_bulletin_board/templates/aa_bulletin_board/partials/footer/app-translation-footer.html:5
143
- msgid ""
144
- "Do you want to help translate this app into your language or improve the "
145
- "existing translation?"
138
+ msgid "Do you want to help translate this app into your language or improve the existing translation?"
146
139
  msgstr "您想帮助将此应用程序翻译成您的母语或改进现有的翻译吗?"
147
140
 
148
141
  #: aa_bulletin_board/templates/aa_bulletin_board/partials/footer/app-translation-footer.html:8
@@ -155,9 +148,7 @@ msgid "Bulletin \"{bulletin__title}\" created."
155
148
  msgstr "公告“{bulletin__title}”已创建。"
156
149
 
157
150
  #: aa_bulletin_board/views.py:141
158
- msgid ""
159
- "The bulletin you are looking for does either not exist, or you don't have "
160
- "access to it."
151
+ msgid "The bulletin you are looking for does either not exist, or you don't have access to it."
161
152
  msgstr "您正在查看的公告不存在,或您没有权限访问。"
162
153
 
163
154
  #: aa_bulletin_board/views.py:168
@@ -15,6 +15,7 @@ from django.utils.translation import gettext as _
15
15
  from django_ckeditor_5.fields import CKEditor5Field
16
16
 
17
17
  # AA Bulletin Board
18
+ from aa_bulletin_board.constants import APP_TITLE
18
19
  from aa_bulletin_board.helpers import string_cleanup
19
20
  from aa_bulletin_board.managers import BulletinManager
20
21
 
@@ -64,7 +65,7 @@ class General(models.Model):
64
65
  Meta definitions
65
66
  """
66
67
 
67
- verbose_name = _("Bulletin Board")
68
+ verbose_name = APP_TITLE
68
69
  managed = False
69
70
  default_permissions = ()
70
71
  permissions = (
@@ -1,3 +1,3 @@
1
1
  {% load aa_bulletin_board %}
2
2
 
3
- <link rel="stylesheet" href="{% aa_bulletin_board_static 'aa_bulletin_board/css/aa-bulletin-board.min.css' %}">
3
+ {% aa_bulletin_board_static "css/aa-bulletin-board.min.css" %}
@@ -1,3 +1,3 @@
1
1
  {% load aa_bulletin_board %}
2
2
 
3
- <script src="{% aa_bulletin_board_static 'aa_bulletin_board/javascript/aa-bulletin-board-equal-height.min.js' %}"></script>
3
+ {% aa_bulletin_board_static "javascript/aa-bulletin-board-equal-height.min.js" %}
@@ -1,3 +1,3 @@
1
1
  {% load aa_bulletin_board %}
2
2
 
3
- <script src="{% aa_bulletin_board_static 'aa_bulletin_board/javascript/aa-bulletin-board-oembed.min.js' %}"></script>
3
+ {% aa_bulletin_board_static "javascript/aa-bulletin-board-oembed.min.js" %}
@@ -1,3 +1,3 @@
1
- {% load static %}
1
+ {% load sri %}
2
2
 
3
- <link href="{% static 'django_ckeditor_5/dist/styles.css' %}" media="all" rel="stylesheet">
3
+ {% sri_static "django_ckeditor_5/dist/styles.css" %}
@@ -1,3 +1,3 @@
1
- {% load static %}
1
+ {% load sri %}
2
2
 
3
- <script src="{% static 'django_ckeditor_5/dist/bundle.js' %}"></script>
3
+ {% sri_static "django_ckeditor_5/dist/bundle.js" %}
@@ -1,3 +1,3 @@
1
- {% load static %}
1
+ {% load aa_bulletin_board %}
2
2
 
3
- <link rel="stylesheet" href="{% static 'aa_bulletin_board/libs/sumoselect/3.4.9/sumoselect.min.css' %}">
3
+ {% aa_bulletin_board_static "libs/sumoselect/3.4.9/sumoselect.min.css" %}
@@ -1,3 +1,3 @@
1
- {% load static %}
1
+ {% load aa_bulletin_board %}
2
2
 
3
- <script src="{% static 'aa_bulletin_board/libs/sumoselect/3.4.9/jquery.sumoselect.min.js' %}"></script>
3
+ {% aa_bulletin_board_static 'libs/sumoselect/3.4.9/jquery.sumoselect.min.js' %}
@@ -2,26 +2,87 @@
2
2
  Versioned static URLs to break browser caches when changing the app version
3
3
  """
4
4
 
5
+ # Standard Library
6
+ import os
7
+
5
8
  # Django
9
+ from django.conf import settings
6
10
  from django.template.defaulttags import register
7
11
  from django.templatetags.static import static
12
+ from django.utils.safestring import mark_safe
13
+
14
+ # Alliance Auth
15
+ from allianceauth.services.hooks import get_extension_logger
16
+
17
+ # Alliance Auth (External Libs)
18
+ from app_utils.logging import LoggerAddTag
8
19
 
9
20
  # AA Bulletin Board
10
- from aa_bulletin_board import __version__
21
+ from aa_bulletin_board import __title__, __version__
22
+ from aa_bulletin_board.constants import PACKAGE_NAME
23
+ from aa_bulletin_board.helper.static_files import calculate_integrity_hash
24
+
25
+ logger = LoggerAddTag(my_logger=get_extension_logger(__name__), prefix=__title__)
11
26
 
12
27
 
13
28
  @register.simple_tag
14
- def aa_bulletin_board_static(path: str) -> str:
29
+ def aa_bulletin_board_static(
30
+ relative_file_path: str, script_type: str = None
31
+ ) -> str | None:
15
32
  """
16
33
  Versioned static URL
17
34
 
18
- :param path:
19
- :type path:
20
- :return:
21
- :rtype:
35
+ :param relative_file_path: The file path relative to the `{APP_NAME}/{PACKAGE_NAME}/static/{PACKAGE_NAME}` folder
36
+ :type relative_file_path: str
37
+ :param script_type: The script type
38
+ :type script_type: str
39
+ :return: Versioned static URL
40
+ :rtype: str
22
41
  """
23
42
 
24
- static_url = static(path=path)
25
- versioned_url = static_url + "?v=" + __version__
43
+ logger.debug(f"Getting versioned static URL for: {relative_file_path}")
44
+
45
+ file_type = os.path.splitext(relative_file_path)[1][1:]
46
+
47
+ logger.debug(f"File extension: {file_type}")
48
+
49
+ # Only support CSS and JS files
50
+ if file_type not in ["css", "js"]:
51
+ raise ValueError(f"Unsupported file type: {file_type}")
52
+
53
+ static_file_path = os.path.join(PACKAGE_NAME, relative_file_path)
54
+ static_url = static(static_file_path)
55
+
56
+ # Integrity hash calculation only for non-debug mode
57
+ sri_string = (
58
+ f' integrity="{calculate_integrity_hash(relative_file_path)}" crossorigin="anonymous"'
59
+ if not settings.DEBUG
60
+ else ""
61
+ )
62
+
63
+ # Versioned URL for CSS and JS files
64
+ # Add version query parameter to break browser caches when changing the app version
65
+ # Do not add version query parameter for libs as they are already versioned through their file path
66
+ versioned_url = (
67
+ static_url
68
+ if relative_file_path.startswith("libs/")
69
+ else static_url + "?v=" + __version__
70
+ )
71
+
72
+ return_value = None
73
+
74
+ # Return the versioned URL with integrity hash for CSS
75
+ if file_type == "css":
76
+ return_value = mark_safe(
77
+ f'<link rel="stylesheet" href="{versioned_url}"{sri_string}>'
78
+ )
79
+
80
+ # Return the versioned URL with integrity hash for JS files
81
+ if file_type == "js":
82
+ js_type = f' type="{script_type}"' if script_type else ""
83
+
84
+ return_value = mark_safe(
85
+ f'<script{js_type} src="{versioned_url}"{sri_string}></script>'
86
+ )
26
87
 
27
- return versioned_url
88
+ return return_value
@@ -4,10 +4,11 @@ Test the apps' template tags
4
4
 
5
5
  # Django
6
6
  from django.template import Context, Template
7
- from django.test import TestCase
7
+ from django.test import TestCase, override_settings
8
8
 
9
9
  # AA Bulletin Board
10
10
  from aa_bulletin_board import __version__
11
+ from aa_bulletin_board.helper.static_files import calculate_integrity_hash
11
12
 
12
13
 
13
14
  class TestVersionedStatic(TestCase):
@@ -15,9 +16,10 @@ class TestVersionedStatic(TestCase):
15
16
  Test aa_bulletin_board_static template tag
16
17
  """
17
18
 
18
- def test_versioned_static(self) -> None:
19
+ @override_settings(DEBUG=False)
20
+ def test_versioned_static_without_debug_enabled(self) -> None:
19
21
  """
20
- Test versioned static template tag
22
+ Test versioned static template tag without DEBUG enabled
21
23
 
22
24
  :return:
23
25
  :rtype:
@@ -27,13 +29,70 @@ class TestVersionedStatic(TestCase):
27
29
  template_to_render = Template(
28
30
  template_string=(
29
31
  "{% load aa_bulletin_board %}"
30
- "{% aa_bulletin_board_static 'aa_bulletin_board/css/aa-bulletin-board.min.css' %}" # pylint: disable=line-too-long
32
+ "{% aa_bulletin_board_static 'css/aa-bulletin-board.min.css' %}"
33
+ "{% aa_bulletin_board_static 'javascript/aa-bulletin-board-oembed.min.js' %}"
31
34
  )
32
35
  )
33
36
 
34
37
  rendered_template = template_to_render.render(context=context)
35
38
 
36
- self.assertInHTML(
37
- needle=f'/static/aa_bulletin_board/css/aa-bulletin-board.min.css?v={context["version"]}', # pylint: disable=line-too-long
38
- haystack=rendered_template,
39
+ expected_static_css_src = f'/static/aa_bulletin_board/css/aa-bulletin-board.min.css?v={context["version"]}'
40
+ expected_static_css_src_integrity = calculate_integrity_hash(
41
+ "css/aa-bulletin-board.min.css"
39
42
  )
43
+ expected_static_js_src = f'/static/aa_bulletin_board/javascript/aa-bulletin-board-oembed.min.js?v={context["version"]}'
44
+ expected_static_js_src_integrity = calculate_integrity_hash(
45
+ "javascript/aa-bulletin-board-oembed.min.js"
46
+ )
47
+
48
+ self.assertIn(member=expected_static_css_src, container=rendered_template)
49
+ self.assertIn(
50
+ member=expected_static_css_src_integrity, container=rendered_template
51
+ )
52
+ self.assertIn(member=expected_static_js_src, container=rendered_template)
53
+ self.assertIn(
54
+ member=expected_static_js_src_integrity, container=rendered_template
55
+ )
56
+
57
+ @override_settings(DEBUG=True)
58
+ def test_versioned_static_with_debug_enabled(self) -> None:
59
+ """
60
+ Test versioned static template tag with DEBUG enabled
61
+
62
+ :return:
63
+ :rtype:
64
+ """
65
+
66
+ context = Context({"version": __version__})
67
+ template_to_render = Template(
68
+ template_string=(
69
+ "{% load aa_bulletin_board %}"
70
+ "{% aa_bulletin_board_static 'css/aa-bulletin-board.min.css' %}"
71
+ )
72
+ )
73
+
74
+ rendered_template = template_to_render.render(context=context)
75
+
76
+ expected_static_css_src = f'/static/aa_bulletin_board/css/aa-bulletin-board.min.css?v={context["version"]}'
77
+
78
+ self.assertIn(member=expected_static_css_src, container=rendered_template)
79
+ self.assertNotIn(member="integrity=", container=rendered_template)
80
+
81
+ def test_invalid_file_type(self) -> None:
82
+ """
83
+ Test should raise a ValueError for an invalid file type
84
+
85
+ :return:
86
+ :rtype:
87
+ """
88
+
89
+ context = Context({"version": __version__})
90
+ template_to_render = Template(
91
+ template_string=(
92
+ "{% load aa_bulletin_board %}"
93
+ "{% aa_bulletin_board_static 'invalid/invalid.txt' %}"
94
+ )
95
+ )
96
+
97
+ with self.assertRaises(ValueError):
98
+ template_to_render.render(context=context)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: aa-bulletin-board
3
- Version: 2.2.5
3
+ Version: 2.3.1
4
4
  Summary: A simple bulletin board for Alliance Auth
5
5
  Project-URL: Changelog, https://github.com/ppfeufer/aa-bulletin-board/blob/master/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/ppfeufer/aa-bulletin-board/blob/master/README.md
@@ -683,6 +683,7 @@ License: GNU GENERAL PUBLIC LICENSE
683
683
  the library. If this is what you want to do, use the GNU Lesser General
684
684
  Public License instead of this License. But first, please read
685
685
  <https://www.gnu.org/licenses/why-not-lgpl.html>.
686
+ License-File: LICENSE
686
687
  Keywords: allianceauth,bulletinboard,eveonline
687
688
  Classifier: Environment :: Web Environment
688
689
  Classifier: Framework :: Django
@@ -700,7 +701,7 @@ Classifier: Topic :: Internet :: WWW/HTTP
700
701
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
701
702
  Requires-Python: >=3.10
702
703
  Requires-Dist: allianceauth-app-utils>=1.19.1
703
- Requires-Dist: allianceauth<5,>=4.3.1
704
+ Requires-Dist: allianceauth<5,>=4.6
704
705
  Requires-Dist: django-ckeditor-5>=0.2.14
705
706
  Requires-Dist: unidecode
706
707
  Provides-Extra: tests-allianceauth-latest
@@ -730,24 +731,23 @@ Simple bulletin board for [Alliance Auth](https://gitlab.com/allianceauth/allian
730
731
 
731
732
  ______________________________________________________________________
732
733
 
733
- <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=1 -->
734
-
735
- - [AA Bulletin Board](#aa-bulletin-board)
736
- - [Before You Install This Module](#before-you-install-this-module)
737
- - [Installation](#installation)
738
- - [Step 1: Install the Package](#step-1-install-the-package)
739
- - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
740
- - [Settings in `/home/allianceserver/myauth/myauth/settings/local.py`](#settings-in-homeallianceservermyauthmyauthsettingslocalpy)
741
- - [Settings in `/home/allianceserver/myauth/myauth/urls.py`](#settings-in-homeallianceservermyauthmyauthurlspy)
742
- - [Step 3: Configure Your Webserver](#step-3-configure-your-webserver)
743
- - [Apache](#apache)
744
- - [Nginx](#nginx)
745
- - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
746
- - [Step 5: Set Up Permissions](#step-5-set-up-permissions)
747
- - [Permissions](#permissions)
748
- - [Changelog](#changelog)
749
- - [Translation Status](#translation-status)
750
- - [Contributing](#contributing)
734
+ <!-- mdformat-toc start --slug=github --maxlevel=6 --minlevel=2 -->
735
+
736
+ - [Before You Install This Module](#before-you-install-this-module)
737
+ - [Installation](#installation)
738
+ - [Step 1: Install the Package](#step-1-install-the-package)
739
+ - [Step 2: Configure Alliance Auth](#step-2-configure-alliance-auth)
740
+ - [Settings in `/home/allianceserver/myauth/myauth/settings/local.py`](#settings-in-homeallianceservermyauthmyauthsettingslocalpy)
741
+ - [Settings in `/home/allianceserver/myauth/myauth/urls.py`](#settings-in-homeallianceservermyauthmyauthurlspy)
742
+ - [Step 3: Configure Your Webserver](#step-3-configure-your-webserver)
743
+ - [Apache](#apache)
744
+ - [Nginx](#nginx)
745
+ - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
746
+ - [Step 5: Set Up Permissions](#step-5-set-up-permissions)
747
+ - [Permissions](#permissions)
748
+ - [Changelog](#changelog)
749
+ - [Translation Status](#translation-status)
750
+ - [Contributing](#contributing)
751
751
 
752
752
  <!-- mdformat-toc end -->
753
753
 
@@ -1,39 +1,42 @@
1
- aa_bulletin_board/__init__.py,sha256=YkJlnvrziH9ampuxH6QlAg5YVp0aw4z1dbN63xKr_vo,137
2
- aa_bulletin_board/apps.py,sha256=HOWDLTEbu28eBt4rggDhzqlZbv6iu1BfzNk7u4FnuUw,474
1
+ aa_bulletin_board/__init__.py,sha256=cFKwZjj-8h2ASfJyfcPia3rD3YhOFuek6StxrqCglkc,133
2
+ aa_bulletin_board/apps.py,sha256=RzL8kLrLzWMC3Q2VBAI8snXRTehqZ8TKtNozdrZe20A,513
3
3
  aa_bulletin_board/auth_hooks.py,sha256=fVJczFcCOScsLGCiyp1aSGRKgbTkTRWKxzJa1HCE5KY,1437
4
+ aa_bulletin_board/constants.py,sha256=FiSn7zyC39ubomxujNXX05_LHykhDRx0Hk-7Ao4LEtQ,446
4
5
  aa_bulletin_board/forms.py,sha256=7760EbyjVd3XobM8vU8X4Xn8mvCW_ra-_2nD7QH1gpc,3190
5
6
  aa_bulletin_board/helpers.py,sha256=921-X-4DogXt-MgjkPMy_NpP64c8JRHpylZf_NeN_Ow,772
6
7
  aa_bulletin_board/managers.py,sha256=BIoUNyLOpJftKs4I05eG2DC6zPGWzCrFhL2nAGUMVos,1066
7
- aa_bulletin_board/models.py,sha256=w3tVY5N-foS5rj-QlABD8fCRHGjBBAc6G5I6w4dtUps,3613
8
+ aa_bulletin_board/models.py,sha256=5C7NkAbgRWFnKeY_Y8uj02rHQbNpuW7bStxQ-C0_DRs,3653
8
9
  aa_bulletin_board/urls.py,sha256=giE7z-t8zpC3mPzPYblMLrkSTn5v7ad4NoJsSk-Jsfg,595
9
10
  aa_bulletin_board/views.py,sha256=Eo5UHFMgbt1fuoh02gUKot58SG4d60XEfQWI1uJhlc8,6531
10
- aa_bulletin_board/locale/django.pot,sha256=KCnaTCto-BEghQ-6fM5pqPTJT73DqhM9SLw7WhrL53M,4938
11
+ aa_bulletin_board/helper/__init__.py,sha256=Xdjx16QiK1MmVpJ2Je074ddMWzhnyRX7omuxPomMaow,51
12
+ aa_bulletin_board/helper/static_files.py,sha256=_gKf-hvIgzKgTcWQ79qbbxqVxqYIMIak_Q7safeSpyk,1099
13
+ aa_bulletin_board/locale/django.pot,sha256=3QXbEYekNHEa4mhdtdq5MZIyujKGI-ybeSywPnMr3S8,4909
11
14
  aa_bulletin_board/locale/cs_CZ/LC_MESSAGES/django.mo,sha256=ZhKB7486VzGz4lS72jucN0JWc3TPzADIo7UuN2sf5S8,3462
12
- aa_bulletin_board/locale/cs_CZ/LC_MESSAGES/django.po,sha256=Vd2IzyGEpZHVKd0F4Vf4Ur0ZHv1_3mqk-idbs5Drb8U,6306
15
+ aa_bulletin_board/locale/cs_CZ/LC_MESSAGES/django.po,sha256=H4O1he4ROiRwEMT76QDt6XtF0QvirweHmo5RgvLdGjE,6241
13
16
  aa_bulletin_board/locale/de/LC_MESSAGES/django.mo,sha256=m0YvI06FxR60jNRQDoy7_k-Yl1thl2VAoOqKoDeMdNg,3404
14
- aa_bulletin_board/locale/de/LC_MESSAGES/django.po,sha256=xmfGq_S0PbtVundklHYGcMppqwqoSfeJoXz6hSf2WZI,6214
17
+ aa_bulletin_board/locale/de/LC_MESSAGES/django.po,sha256=_RWMoSci5LkO6cqSUHB4-PBBbzyIYyfS0L7zmjcT0OE,6146
15
18
  aa_bulletin_board/locale/es/LC_MESSAGES/django.mo,sha256=kTDcOFWmMZ6EMuAm0MPLdyj4S57f_DhNPvCeEjCh40s,2665
16
- aa_bulletin_board/locale/es/LC_MESSAGES/django.po,sha256=4LiAoJFd9GYhM4H-1MVBCy4SSD3-Ii5xJHEt7t8wyVs,6492
17
- aa_bulletin_board/locale/fr_FR/LC_MESSAGES/django.mo,sha256=H5GO7fqfvwyJP45HJ-N6LZRJBgWWuclGmNadlwHXGhE,1532
18
- aa_bulletin_board/locale/fr_FR/LC_MESSAGES/django.po,sha256=isAMS3U_FY-KBw8uLA1tDRsjrURQvsUVfHzwpMx77Es,5934
19
- aa_bulletin_board/locale/it_IT/LC_MESSAGES/django.mo,sha256=2Fto1vZgZQpdRP-oglZfnRof_LfPreUnbb8FeXvrmc4,618
20
- aa_bulletin_board/locale/it_IT/LC_MESSAGES/django.po,sha256=b63WGzZaSGRTo5rtBqsKsFTehsFxzCudK0v4nDQA4O8,5123
19
+ aa_bulletin_board/locale/es/LC_MESSAGES/django.po,sha256=-X1v7VIQsshQEGOdIF9IhD46ETxT6l0DGlOduERE-lU,6418
20
+ aa_bulletin_board/locale/fr_FR/LC_MESSAGES/django.mo,sha256=lCwF9Wa3wq6WqSAkrbBpDddAVEh2txGr_bPId74A3p0,1861
21
+ aa_bulletin_board/locale/fr_FR/LC_MESSAGES/django.po,sha256=qfh0YKBsbziO28Th1eQP-LbIVeq6ijFWrxs7bBs_3zs,5961
22
+ aa_bulletin_board/locale/it_IT/LC_MESSAGES/django.mo,sha256=7eI69SSNv6OgS0bso_Mrw3DtapHmJXEyu_mqd7ke0dg,657
23
+ aa_bulletin_board/locale/it_IT/LC_MESSAGES/django.po,sha256=mGHU27KT7R9zQcakTRCh7hr5OyMI05iLi9CX5ogWq8k,5080
21
24
  aa_bulletin_board/locale/ja/LC_MESSAGES/django.mo,sha256=W8hWAIEQSTj1iJqMJFLjlp2Roeljr8dluVVSEHBw0bw,1503
22
- aa_bulletin_board/locale/ja/LC_MESSAGES/django.po,sha256=ZWZvJpOz8hngwudAuf90VUuebCqT3PkcM-L2AK4_Afg,5486
25
+ aa_bulletin_board/locale/ja/LC_MESSAGES/django.po,sha256=5BvkuReS5CLHqDc6BSpiHMktFyuiqHvoIM4DlfexJI8,5430
23
26
  aa_bulletin_board/locale/ko_KR/LC_MESSAGES/django.mo,sha256=mTVxpRnoj-ErNxF0Y5gdbKVqNT0Za4p5DW0tBs2tURw,2569
24
- aa_bulletin_board/locale/ko_KR/LC_MESSAGES/django.po,sha256=_aVWFgLhiSY3SWvVwIVFu31TNbk8B1TKPLuO1pRL3lw,6597
27
+ aa_bulletin_board/locale/ko_KR/LC_MESSAGES/django.po,sha256=_cyeb6EGglX4flo6H-65YIfQ3q0u03oIPxWTQha_MFs,6529
25
28
  aa_bulletin_board/locale/nl_NL/LC_MESSAGES/django.mo,sha256=tomc7fMl3JZoZ_I1hTgDDigFt3RyaiR-3sTD7xYhg98,483
26
- aa_bulletin_board/locale/nl_NL/LC_MESSAGES/django.po,sha256=Va8sp3Pu_-M49JSwib1Fqiv8oHuM_UFaGHdQTz78x2E,5021
29
+ aa_bulletin_board/locale/nl_NL/LC_MESSAGES/django.po,sha256=H3MkozYWlGcfIj1GW56tGQ5sN-k3EITHNlOPnUvSrwA,4971
27
30
  aa_bulletin_board/locale/pl_PL/LC_MESSAGES/django.mo,sha256=W2q9nAX8EDr7lLDhaJW1WChLwF1v7hy1H71g5n38f18,876
28
- aa_bulletin_board/locale/pl_PL/LC_MESSAGES/django.po,sha256=fVwmw6tG1Cfm2S9jl3yHgyORRtwDigBoALzIrk78pX4,5247
31
+ aa_bulletin_board/locale/pl_PL/LC_MESSAGES/django.po,sha256=9PN_Id_W-CQV8wW18anEU_92iNV87L3Oi3V4FPKvI2g,5188
29
32
  aa_bulletin_board/locale/ru/LC_MESSAGES/django.mo,sha256=ZUmnbwwBgHs5m0RzyMPZvtpVkaV9Rylwg1gQCa9-dcc,4341
30
- aa_bulletin_board/locale/ru/LC_MESSAGES/django.po,sha256=yN0RHi6hb3AYfBvtEo4zMErY5oEY4Q0y4WErJvHcBa4,7298
33
+ aa_bulletin_board/locale/ru/LC_MESSAGES/django.po,sha256=6JWPqr-W2AJRJBVPtyEYn0RsLT6nheBvC66gJLkVvrQ,7233
31
34
  aa_bulletin_board/locale/sk/LC_MESSAGES/django.mo,sha256=qbQEKRh_K6GhMhKVY-xR1tC5YIofxLCprGaDq6bltcM,562
32
- aa_bulletin_board/locale/sk/LC_MESSAGES/django.po,sha256=VDJdwi8ToeMBB5u8AvZ0DKov9ISRBuuJDMDIZWM9JQI,5125
33
- aa_bulletin_board/locale/uk/LC_MESSAGES/django.mo,sha256=JrpfYABCYBlbWNCKmjc9XCAluLKlEpPY42fS6a4PXMU,2515
34
- aa_bulletin_board/locale/uk/LC_MESSAGES/django.po,sha256=IHq3cOuKgppuDkkwo79plN_oYpsQO2IzsC1PDOlhr0s,7768
35
+ aa_bulletin_board/locale/sk/LC_MESSAGES/django.po,sha256=OwC2Nb1JLmQo3oxTwirZ_UIva5fsFy6lCn2JDB0okHY,5072
36
+ aa_bulletin_board/locale/uk/LC_MESSAGES/django.mo,sha256=_jLK53-kbnJi_HrbTlfKYfhwORFU41CgtpM6wIbtKjw,2641
37
+ aa_bulletin_board/locale/uk/LC_MESSAGES/django.po,sha256=dmXpal20I8QjzwOacYBpr5k3QgiTqgXkILyTbidOPkk,7777
35
38
  aa_bulletin_board/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=eWtNtT-OkgeZTQwCAZmM82eo_0vAvt_zmnPnNLHT5w8,3087
36
- aa_bulletin_board/locale/zh_Hans/LC_MESSAGES/django.po,sha256=tQgEO2BHgXCxGWQwT9um1benSK69CISaA8CHBl-Wv7A,5999
39
+ aa_bulletin_board/locale/zh_Hans/LC_MESSAGES/django.po,sha256=YnK5X3Auh-gfnu2wTCcbDCklOwv53fDE__yJyhUBVF0,5943
37
40
  aa_bulletin_board/migrations/0001_initial.py,sha256=bmw6yykfLuujYwQ6uR8rGKqcv94UyEa6ZVH34VR5APQ,2620
38
41
  aa_bulletin_board/migrations/0002_alter_bulletin_slug.py,sha256=j6jgInd8CB7cbRU0cKl87GQaWw6ifZercIs5WCWegKw,427
39
42
  aa_bulletin_board/migrations/0003_group_restrictions.py,sha256=zjWr5H8yfdSsJVLbqUUhgSAfrW6A2CVavrlFxfaFZGg,959
@@ -59,26 +62,26 @@ aa_bulletin_board/templates/aa_bulletin_board/base.html,sha256=hL8bzygUC-XYcKO7L
59
62
  aa_bulletin_board/templates/aa_bulletin_board/bulletin.html,sha256=1NfrhsJ6dDX8UpPHq2YxEaF6mCXzCQqNB-q9l7-sldY,1599
60
63
  aa_bulletin_board/templates/aa_bulletin_board/dashboard.html,sha256=LpFK4leA3O17WCu4zilztSFd-tcINbmyzghBKpFXagU,3030
61
64
  aa_bulletin_board/templates/aa_bulletin_board/edit-bulletin.html,sha256=4RIz9FoEXZHXWWtTk04ycuHwDHN82wGZvIrTJhPnVKc,2618
62
- aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-css.html,sha256=RFC3JFIg9ZA0ONXi5ZQD34f4hzueoSs84mGgfQr9Bhg,142
63
- aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-equal-height-js.html,sha256=TCCDto0FuJI9JQlQrFB1nZ5_96xHZRk9iP2L0yeEW6g,154
64
- aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-oembed-js.html,sha256=fUxsLCE6kXzTk6ASql0QtKkql1hNKM9Z4OOa48jvtD0,148
65
- aa_bulletin_board/templates/aa_bulletin_board/bundles/ckeditor5-css.html,sha256=4lXJl2AYci7FvROXQCjG9dTvYSlTWvz3HB1Eqr3U8yA,111
66
- aa_bulletin_board/templates/aa_bulletin_board/bundles/ckeditor5-js.html,sha256=Ld8ySQFt9I2o0xKZQHT75jqJi4XV3hiKF3E-3sbzN74,91
67
- aa_bulletin_board/templates/aa_bulletin_board/bundles/sumoselect-css.html,sha256=jg7lkZICm_DhcrVbSqBnpTxC1Oq5YVr5-SkZ7Lpd9AA,124
68
- aa_bulletin_board/templates/aa_bulletin_board/bundles/sumoselect-js.html,sha256=2JeOmCYuwisaZuMDB1k67EcOTyRTJUwUOhlCxQ2PvJM,123
65
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-css.html,sha256=SXtCZlT5p1Kyif0tlw3fEpXdIkRJIYb5uQRfZZjhISk,93
66
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-equal-height-js.html,sha256=QxorfVP6JtqqnJFfDL-2QqLsOKuRyq0mXMiV8a86eVo,112
67
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/aa-bulletin-board-oembed-js.html,sha256=ckHZgj56V71-w9A25IFWFIj1xxONEV8qROrYn1Fy6IE,106
68
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/ckeditor5-css.html,sha256=rvzevl-Ihhy8HmA06YC2qOua8AVIjw7O8pk75NGE-WY,69
69
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/ckeditor5-js.html,sha256=329nC3P57jL0yIR65zNUp30zZs9dgZHSYlNbdpQW_a8,68
70
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/sumoselect-css.html,sha256=bmerkN-g9N1F83GA81JDukVWvX5OHZmeZhhlQawLrlw,104
71
+ aa_bulletin_board/templates/aa_bulletin_board/bundles/sumoselect-js.html,sha256=8Cm2j6k7NDREcJvLb_RahZ3yFe_IKAFHPnqEETxMCbw,110
69
72
  aa_bulletin_board/templates/aa_bulletin_board/partials/common/bulletin-board-management.html,sha256=KsZZZLGllxBPBsAqKFXusPekLJZQYeTDGyBCuyhjAiU,396
70
73
  aa_bulletin_board/templates/aa_bulletin_board/partials/footer/app-translation-footer.html,sha256=nDZPOnsQLBN9meAhxnhd0ynUQIVi3YPzhi47n89zcIg,422
71
74
  aa_bulletin_board/templates/aa_bulletin_board/partials/header/page-header.html,sha256=cE7eVhjS5WUG-x8Kekm1qCdocwHfLDrtc_NsugblFSg,215
72
75
  aa_bulletin_board/templatetags/__init__.py,sha256=sP2D1ovt2gGAPLcGQkByRgXYhvUJ6C52mZMlLIALQ8s,37
73
- aa_bulletin_board/templatetags/aa_bulletin_board.py,sha256=ZNdLdHjTbqZwufP9fQEcmVcs5TZQEKe32yAHIK8urpQ,538
76
+ aa_bulletin_board/templatetags/aa_bulletin_board.py,sha256=xRJcAYHpfAC1MlFW_a1cBLcn5pTABqZGDO-H5Q6k80U,2746
74
77
  aa_bulletin_board/tests/__init__.py,sha256=dcMq6O8W1_8NSZobuRedXFQ3o4Zd6Q6Ti7eY-D6JaYI,18
75
78
  aa_bulletin_board/tests/test_access.py,sha256=I2GaJMI4yQWLb0UIOGPdk754B-Rcw0ORXufa8z9-ljU,6874
76
79
  aa_bulletin_board/tests/test_auth_hooks.py,sha256=8BdVYqfrR0dxvBtOBShklmBXA7MCn2VuF-CT4NdV1xg,2386
77
80
  aa_bulletin_board/tests/test_bulletins.py,sha256=V2LucgSh3aPyavIBnDhRaqkZwJ5oPfvxvcIul3c6kCU,8633
78
- aa_bulletin_board/tests/test_templatetags.py,sha256=SzjXv8NspUZu7I91hl_3uzDHa7AMcTTAKHSjjePU68Q,1048
81
+ aa_bulletin_board/tests/test_templatetags.py,sha256=yV-PPYlGASbV5LWQpKHJw9tWmWYxNnhj9twgq3netp0,3327
79
82
  aa_bulletin_board/tests/test_user_interface.py,sha256=bpEMmuzWs3-JTPpGtpf3b5dZMw-1kdMmTgEu0VRiHvc,8505
80
83
  aa_bulletin_board/tests/utils.py,sha256=Dh_jVV7s9Z_OOg_08FxwsZtVU3omrcI260-uQ_Bc_90,2202
81
- aa_bulletin_board-2.2.5.dist-info/METADATA,sha256=zv_qLN0XPhicN1J7ipY9oDuYxTiCwNIIYjAzuM2_lWI,58113
82
- aa_bulletin_board-2.2.5.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
83
- aa_bulletin_board-2.2.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
84
- aa_bulletin_board-2.2.5.dist-info/RECORD,,
84
+ aa_bulletin_board-2.3.1.dist-info/METADATA,sha256=PvSat6xX_JXkuCr0AizS4iWbrceKGslX3zW_Ex903V8,58061
85
+ aa_bulletin_board-2.3.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
86
+ aa_bulletin_board-2.3.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
87
+ aa_bulletin_board-2.3.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.26.3
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any