Rafał Pitoń 6 лет назад
Родитель
Сommit
152848a76e

+ 67 - 0
misago/admin/tests/test_admin_index.py

@@ -0,0 +1,67 @@
+from django.test import TestCase, override_settings
+from django.urls import reverse
+
+from misago.admin.testutils import AdminTestCase
+from misago.admin.views.index import check_misago_address
+
+
+class AdminIndexViewTests(AdminTestCase):
+    def test_view_returns_200(self):
+        """admin index view returns 200"""
+        response = self.client.get(reverse('misago:admin:index'))
+
+        self.assertContains(response, self.user.username)
+
+    def test_view_contains_address_check(self):
+        """admin index view contains address check"""
+        response = self.client.get(reverse('misago:admin:index'))
+
+        self.assertContains(response, "MISAGO_ADDRESS")
+
+
+class RequestMock(object):
+    absolute_uri = 'https://misago-project.org/somewhere/'
+
+    def build_absolute_uri(self, location):
+        assert location == '/'
+        return self.absolute_uri
+
+
+request = RequestMock()
+incorrect_address = 'http://somewhere.com'
+correct_address = request.absolute_uri
+
+
+class AdminIndexAddressCheckTests(TestCase):
+    @override_settings(MISAGO_ADDRESS=None)
+    def test_address_not_set(self):
+        """check handles address not set"""
+        result = check_misago_address(request)
+
+        self.assertEqual(result, {
+            'is_correct': False,
+            'set_address': None,
+            'correct_address': request.absolute_uri,
+        })
+
+    @override_settings(MISAGO_ADDRESS=incorrect_address)
+    def test_address_set_invalid(self):
+        """check handles incorrect address"""
+        result = check_misago_address(request)
+
+        self.assertEqual(result, {
+            'is_correct': False,
+            'set_address': incorrect_address,
+            'correct_address': request.absolute_uri,
+        })
+
+    @override_settings(MISAGO_ADDRESS=correct_address)
+    def test_address_set_valid(self):
+        """check handles correct address"""
+        result = check_misago_address(request)
+
+        self.assertEqual(result, {
+            'is_correct': True,
+            'set_address': correct_address,
+            'correct_address': request.absolute_uri,
+        })

+ 0 - 8
misago/admin/tests/test_admin_views.py

@@ -196,14 +196,6 @@ class AdminViewAccessTests(AdminTestCase):
         self.assertContains(response, self.user.username)
 
 
-class AdminIndexViewTests(AdminTestCase):
-    def test_view_returns_200(self):
-        """admin index view returns 200"""
-        response = self.client.get(reverse('misago:admin:index'))
-
-        self.assertContains(response, self.user.username)
-
-
 class Admin404ErrorTests(AdminTestCase):
     def test_list_search_unicode_handling(self):
         """querystring creation handles unicode strings"""

+ 13 - 0
misago/admin/views/index.py

@@ -12,6 +12,7 @@ from django.http import Http404, JsonResponse
 from django.utils.translation import ugettext as _
 
 from misago import __version__
+from misago.conf import settings
 from misago.core.cache import cache
 from misago.threads.models import Post, Thread
 
@@ -38,6 +39,7 @@ def admin_index(request):
     return render(
         request, 'misago/admin/index.html', {
             'db_stats': db_stats,
+            'address_check': check_misago_address(request),
 
             'allow_version_check': ALLOW_VERSION_CHECK,
             'version_check': cache.get(VERSION_CHECK_CACHE_KEY),
@@ -45,6 +47,17 @@ def admin_index(request):
     )
 
 
+def check_misago_address(request):
+    set_address = settings.MISAGO_ADDRESS
+    correct_address = request.build_absolute_uri('/')
+
+    return {
+        'is_correct': set_address == correct_address,
+        'set_address': set_address,
+        'correct_address': correct_address,
+    }
+
+
 def check_version(request):
     if not ALLOW_VERSION_CHECK or request.method != "POST":
         raise Http404()

+ 5 - 0
misago/conf/defaults.py

@@ -7,6 +7,11 @@ instead of Django's `django.conf.settings`.
 """
 
 
+# Complete HTTP address of your Misago installation
+
+MISAGO_ADDRESS = None
+
+
 # Permissions system extensions
 # https://misago.readthedocs.io/en/latest/developers/acls.html#extending-permissions-system
 

+ 6 - 0
misago/project_template/project_name/settings.py

@@ -365,6 +365,12 @@ REST_FRAMEWORK = {
 # Misago specific settings
 # https://misago.readthedocs.io/en/latest/developers/settings.html
 
+# Complete HTTP address of your Misago installation
+# If you are unsure what to enter here, refer to your site's admin control panel for help
+
+MISAGO_ADDRESS = 'http://my-misago-site.com/'
+
+
 # PostgreSQL text search configuration to use in searches
 # Defaults to "simple", for list of installed configurations run "\dF" in "psql"
 # Standard configs as of PostgreSQL 9.5 are: dutch, english, finnish, french,

+ 29 - 2
misago/templates/misago/admin/index.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/base.html" %}
-{% load i18n %}
+{% load i18n misago_capture %}
 
 
 {% block title %}{% trans "Home" %} | {{ block.super }}{% endblock %}
@@ -19,7 +19,34 @@
   <div class="row">
     <div class="col-md-8">
 
-
+      <h2>{% trans "System checks" %}</h2>
+
+      {% if address_check.is_correct %}
+        <div class="alert alert-success" role="alert">
+          <p>{% trans "MISAGO_ADDRESS setting appears to be correct." %}</p>
+        </div>
+      {% elif address_check.set_address %}
+        <div class="alert alert-warning" role="alert">
+          <p class="lead">{% trans "The settings.py value for MISAGO_ADDRESS appears to be incorrect." %}</p>
+          <p>
+            {% capture trimmed as set_address %}
+              <code>{{ address_check.set_address }}</code>
+            {% endcapture %}
+            {% capture trimmed as correct_address %}
+              <code>{{ address_check.correct_address }}</code>
+            {% endcapture %}
+            {% blocktrans trimmed with configured_address=set_address|safe correct_address=correct_address|safe %}
+              Your MISAGO_ADDRESS is set to {{ configured_address }} while correct value appears to be {{ correct_address }}.
+            {% endblocktrans %}
+          </p>
+          <p>{% trans "Misago uses this setting to build correct links in e-mails sent to site users." %}</p>
+        </div>
+      {% else %}
+        <div class="alert alert-danger" role="alert">
+          <p class="lead">{% trans "The settings.py is missing MISAGO_ADDRESS value." %}</p>
+          <p>{% trans "Misago uses this setting to build correct links in e-mails sent to site users." %}</p>
+        </div>
+      {% endif %}
 
     </div>
     <div class="col-md-4">