Browse Source

fix #846: Admin version check.

Rafał Pitoń 8 years ago
parent
commit
6771a9fe3d

+ 24 - 24
misago/admin/views/index.py

@@ -1,8 +1,12 @@
-import json
-
 import requests
 from requests.exceptions import RequestException
 
+try:
+    from packaging.version import parse as parse_version
+    ALLOW_VERSION_CHECK = True
+except ImportError:
+    ALLOW_VERSION_CHECK = False
+
 from django.contrib.auth import get_user_model
 from django.http import Http404, JsonResponse
 from django.utils.translation import ugettext as _
@@ -34,13 +38,15 @@ def admin_index(request):
     return render(
         request, 'misago/admin/index.html', {
             'db_stats': db_stats,
+
+            'allow_version_check': ALLOW_VERSION_CHECK,
             'version_check': cache.get(VERSION_CHECK_CACHE_KEY),
         }
     )
 
 
 def check_version(request):
-    if request.method != "POST":
+    if not ALLOW_VERSION_CHECK or request.method != "POST":
         raise Http404()
 
     version = cache.get(VERSION_CHECK_CACHE_KEY, 'nada')
@@ -52,39 +58,33 @@ def check_version(request):
 
             if r.status_code != requests.codes.ok:
                 r.raise_for_status()
-            latest_version = json.loads(r.content)[0]['tag_name']
 
-            latest = [int(v) for v in latest_version.split(".")]
-            current = [int(v) for v in __version__.split(".")]
+            latest_version = r.json()[0]['tag_name']
 
-            for i in range(3):
-                if latest[i] > current[i]:
-                    message = _("Outdated: %(current)s < %(latest)s")
-                    formats = {
+            latest = parse_version(latest_version)
+            current = parse_version(__version__)
+
+            if latest > current:
+                version = {
+                    'is_error': True,
+                    'message': _("Outdated: %(current)s! (latest: %(latest)s)") % {
                         'latest': latest_version,
                         'current': __version__,
-                    }
-
-                    version = {
-                        'is_error': True,
-                        'message': message % formats,
-                    }
-                    break
-            else:
-                formats = {
-                    'current': __version__,
+                    },
                 }
+            else:
                 version = {
                     'is_error': False,
-                    'message': _("Up to date! (%(current)s)") % formats,
+                    'message': _("Up to date! (%(current)s)") % {
+                        'current': __version__,
+                    },
                 }
 
             cache.set(VERSION_CHECK_CACHE_KEY, version, 180)
-        except (RequestException, IndexError, KeyError, ValueError):
-            message = _("Failed to connect to GitHub API. Try again later.")
+        except (RequestException, IndexError, KeyError, ValueError) as e:
             version = {
                 'is_error': True,
-                'message': message,
+                'message': _("Failed to connect to GitHub API. Try again later."),
             }
 
     return JsonResponse(version)

+ 16 - 12
misago/locale/en/LC_MESSAGES/django.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-14 02:25+0200\n"
+"POT-Creation-Date: 2017-05-17 22:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -142,17 +142,17 @@ msgstr ""
 msgid "Action is not allowed."
 msgstr ""
 
-#: admin/views/index.py:62
+#: admin/views/index.py:70
 #, python-format
-msgid "Outdated: %(current)s < %(latest)s"
+msgid "Outdated: %(current)s! (latest: %(latest)s)"
 msgstr ""
 
-#: admin/views/index.py:79
+#: admin/views/index.py:78
 #, python-format
 msgid "Up to date! (%(current)s)"
 msgstr ""
 
-#: admin/views/index.py:84
+#: admin/views/index.py:87
 msgid "Failed to connect to GitHub API. Try again later."
 msgstr ""
 
@@ -199,7 +199,7 @@ msgstr ""
 msgid "Only members with valid permissions can post in closed categories."
 msgstr ""
 
-#: categories/forms.py:75 templates/misago/admin/index.html:77
+#: categories/forms.py:75 templates/misago/admin/index.html:83
 #: templates/misago/admin/users/delete.html:32 templates/misago/navbar.html:18
 #: templates/misago/navbar.html:34 templates/misago/profile/threads.html:4
 #: templates/misago/threadslist/category.html:52
@@ -1233,15 +1233,19 @@ msgstr ""
 msgid "Misago version"
 msgstr ""
 
-#: templates/misago/admin/index.html:55
+#: templates/misago/admin/index.html:56
 msgid "Check version"
 msgstr ""
 
-#: templates/misago/admin/index.html:70
+#: templates/misago/admin/index.html:62
+msgid "This feature requires \"packaging\" python module."
+msgstr ""
+
+#: templates/misago/admin/index.html:76
 msgid "DB Contents"
 msgstr ""
 
-#: templates/misago/admin/index.html:81
+#: templates/misago/admin/index.html:87
 #: templates/misago/admin/users/delete.html:36
 #: templates/misago/admin/users/list.html:23
 #: templates/misago/profile/posts.html:4
@@ -1250,7 +1254,7 @@ msgstr ""
 msgid "Posts"
 msgstr ""
 
-#: templates/misago/admin/index.html:85 templates/misago/navbar.html:40
+#: templates/misago/admin/index.html:91 templates/misago/navbar.html:40
 #: templates/misago/userslists/base.html:5
 #: templates/misago/userslists/base.html:14 users/admin.py:70
 #: users/migrations/0002_users_settings.py:16
@@ -1258,11 +1262,11 @@ msgstr ""
 msgid "Users"
 msgstr ""
 
-#: templates/misago/admin/index.html:90
+#: templates/misago/admin/index.html:96
 msgid "Inactive users"
 msgstr ""
 
-#: templates/misago/admin/index.html:116
+#: templates/misago/admin/index.html:122
 msgid "Checking..."
 msgstr ""
 

+ 2 - 2
misago/locale/en/LC_MESSAGES/djangojs.po

@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-14 02:25+0200\n"
+"POT-Creation-Date: 2017-05-17 22:20+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -297,7 +297,7 @@ msgstr ""
 msgid "Dismiss"
 msgstr ""
 
-#: static/misago/js/misago.js:2
+#: static/misago/js/misago.js:3
 msgid "Uploading %(filename)s... %(progress)s"
 msgstr ""
 

+ 20 - 14
misago/templates/misago/admin/index.html

@@ -38,23 +38,29 @@
         <tbody>
           <tr>
             <td class="text-center">
-              {% if version_check %}
-              <p class="lead text-{% if version_check.is_error %}error{% else %}success{% endif %}">
-                {% if version_check.is_error %}
-                <span class="fa fa-times fa-lg fa-fw"></span>
+              {% if allow_version_check %}
+                {% if version_check %}
+                <p class="lead text-{% if version_check.is_error %}danger{% else %}success{% endif %}">
+                  {% if version_check.is_error %}
+                  <span class="fa fa-times fa-lg fa-fw"></span>
+                  {% else %}
+                  <span class="fa fa-check fa-lg fa-fw"></span>
+                  {% endif %}
+                  {{ version_check.message }}
+                </p>
                 {% else %}
-                <span class="fa fa-check fa-lg fa-fw"></span>
+                <form method="POST">
+                  {% csrf_token %}
+                  <button type="submit" class="btn btn-default">
+                    <span class="fa fa-question-circle fa-fw"></span>
+                    <span class="name">{% trans "Check version" %}</span>
+                  </button>
+                </form>
                 {% endif %}
-                {{ version_check.message }}
-              </p>
               {% else %}
-              <form method="POST">
-                {% csrf_token %}
-                <button type="submit" class="btn btn-default">
-                  <span class="fa fa-question-circle fa-fw"></span>
-                  <span class="name">{% trans "Check version" %}</span>
-                </button>
-              </form>
+                <p class="lead">
+                  {% trans 'This feature requires "packaging" python module.' %}
+                </p>
               {% endif %}
             </td>
           </tr>