diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index c8626267c..cc5e8f4f3 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -4,7 +4,7 @@ from django.db import models from django.utils.encoding import python_2_unicode_compatible, smart_text from django.utils.translation import ugettext as _, ugettext_lazy -import reversion +from reversion import revisions as reversion from modoboa.core import signals as core_signals from modoboa.lib.email_utils import split_mailbox diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index bf5197adf..8134fe401 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -1,12 +1,13 @@ """Models related to domains management.""" -from django.contrib.contenttypes import generic from django.db import models from django.db.models.manager import Manager from django.utils.encoding import python_2_unicode_compatible, smart_text from django.utils.translation import ugettext as _, ugettext_lazy -import reversion +from django.contrib.contenttypes.fields import GenericRelation + +from reversion import revisions as reversion from modoboa.core.models import User, ObjectAccess from modoboa.core import signals as core_signals @@ -41,7 +42,7 @@ class Domain(AdminObject): help_text=ugettext_lazy("Check to activate this domain"), default=True ) - owners = generic.GenericRelation(ObjectAccess) + owners = GenericRelation(ObjectAccess) type = models.CharField(default="domain", max_length=20) objects = DomainManager() diff --git a/modoboa/admin/models/domain_alias.py b/modoboa/admin/models/domain_alias.py index 1acf2ff92..92dbba536 100644 --- a/modoboa/admin/models/domain_alias.py +++ b/modoboa/admin/models/domain_alias.py @@ -4,9 +4,9 @@ from django.db import models from django.utils.encoding import python_2_unicode_compatible, smart_text from django.utils.translation import ugettext as _, ugettext_lazy -from django.contrib.contenttypes import generic +from django.contrib.contenttypes.fields import GenericRelation -import reversion +from reversion import revisions as reversion from modoboa.core import models as core_models from modoboa.core import signals as core_signals @@ -46,7 +46,7 @@ class DomainAlias(AdminObject): default=True ) - owners = generic.GenericRelation(core_models.ObjectAccess) + owners = GenericRelation(core_models.ObjectAccess) objects = DomainAliasManager() diff --git a/modoboa/admin/models/mailbox.py b/modoboa/admin/models/mailbox.py index c201bc7b9..4239642cb 100644 --- a/modoboa/admin/models/mailbox.py +++ b/modoboa/admin/models/mailbox.py @@ -10,7 +10,7 @@ from django.db.models.manager import Manager from django.utils.encoding import python_2_unicode_compatible, smart_text from django.utils.translation import ugettext as _, ugettext_lazy -import reversion +from reversion import revisions as reversion from .base import AdminObject from .domain import Domain diff --git a/modoboa/admin/templates/admin/forward.html b/modoboa/admin/templates/admin/forward.html index 3146beea6..49cc8815e 100644 --- a/modoboa/admin/templates/admin/forward.html +++ b/modoboa/admin/templates/admin/forward.html @@ -1,4 +1,4 @@ -{% load i18n form_tags %}{% load url from future %} +{% load i18n form_tags %}

{% trans "Forward" %} {% trans "Automatically forward emails to another address" %}


{% trans "Parameters" %} {% trans "Configure Modoboa" %}
{% csrf_token %} {% include "common/parameters.html" %} diff --git a/modoboa/core/templates/core/user_preferences.html b/modoboa/core/templates/core/user_preferences.html index 8bd449e74..a13dcf1ed 100644 --- a/modoboa/core/templates/core/user_preferences.html +++ b/modoboa/core/templates/core/user_preferences.html @@ -1,4 +1,4 @@ -{% load i18n %}{% load url from future %} +{% load i18n %}

{% trans "Preferences" %} {% trans "Customize Modoboa" %}


{% if forms %} diff --git a/modoboa/core/templates/core/user_profile.html b/modoboa/core/templates/core/user_profile.html index 62617fba7..c2425f31e 100644 --- a/modoboa/core/templates/core/user_profile.html +++ b/modoboa/core/templates/core/user_profile.html @@ -1,5 +1,4 @@ {% load i18n form_tags %} -{% load url from future %}

{% trans "Profile" %} {% trans "Update your personal information" %}


diff --git a/modoboa/core/templatetags/core_tags.py b/modoboa/core/templatetags/core_tags.py index eb1f8cd1b..fa836c41c 100644 --- a/modoboa/core/templatetags/core_tags.py +++ b/modoboa/core/templatetags/core_tags.py @@ -7,6 +7,7 @@ from django.contrib.sessions.models import Session from django.core.urlresolvers import reverse from django.template.loader import render_to_string from django.utils import timezone +from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ from modoboa.lib import events @@ -149,11 +150,12 @@ def visirule(field): field.html_name not in field.form.visirules: return "" rule = field.form.visirules[field.html_name] - return " data-visibility-field='%s' data-visibility-value='%s' " \ - % (rule["field"], rule["value"]) + return mark_safe( + " data-visibility-field='{}' data-visibility-value='{}' " + .format(rule["field"], rule["value"])) -@register.assignment_tag +@register.simple_tag def get_version(): import pkg_resources return pkg_resources.get_distribution("modoboa").version @@ -234,10 +236,10 @@ def display_messages(msgs): else: timeout = "undefined" - return """ + return mark_safe(""" -""" % (level, text, timeout) +""" % (level, text, timeout)) diff --git a/modoboa/core/utils.py b/modoboa/core/utils.py index 7b6549936..683cb0c9d 100644 --- a/modoboa/core/utils.py +++ b/modoboa/core/utils.py @@ -2,7 +2,7 @@ from django.utils.translation import ugettext as _ -from django.contrib.sites.models import get_current_site +from django.contrib.sites.shortcuts import get_current_site from modoboa.core.extensions import exts_pool from modoboa.lib import parameters diff --git a/modoboa/lib/cryptutils.py b/modoboa/lib/cryptutils.py index 0c778cda8..74c1e2657 100644 --- a/modoboa/lib/cryptutils.py +++ b/modoboa/lib/cryptutils.py @@ -1,19 +1,26 @@ # coding: utf-8 -from Crypto.Cipher import AES +"""Crypto related utilities.""" + import base64 import random import string + +from Crypto.Cipher import AES + from modoboa.lib import parameters def random_key(l=16): - """Generate a random key + """Generate a random key. :param integer l: the key's length :return: a string """ - char_set = string.digits + string.letters + string.punctuation - return ''.join(random.sample(char_set * l, l)) + population = string.digits + string.letters + string.punctuation + while True: + key = "".join(random.sample(population * l, l)) + if len(key) == l: + return key def encrypt(clear): diff --git a/modoboa/lib/models.py b/modoboa/lib/models.py index f98bfdc34..8f87b50d7 100644 --- a/modoboa/lib/models.py +++ b/modoboa/lib/models.py @@ -1,7 +1,10 @@ -import reversion +"""Modoboa Lib models.""" + from django.db import models from django.conf import settings +from reversion import revisions as reversion + class Parameter(models.Model): name = models.CharField(max_length=255) diff --git a/modoboa/lib/templatetags/form_tags.py b/modoboa/lib/templatetags/form_tags.py index 4a2ae2034..5d6d542c9 100644 --- a/modoboa/lib/templatetags/form_tags.py +++ b/modoboa/lib/templatetags/form_tags.py @@ -4,6 +4,7 @@ Form rendering tags. from django import forms from django import template +from django.utils.safestring import mark_safe from django.template.loader import render_to_string from modoboa.lib.form_utils import SeparatorField @@ -20,7 +21,7 @@ def render_form(form, tpl=None): ret = "" for field in form: ret += "%s\n" % render_field(field) - return ret + return mark_safe(ret) def configure_field_classes(field): diff --git a/modoboa/relaydomains/models.py b/modoboa/relaydomains/models.py index b0a33c908..8beb5e1fa 100644 --- a/modoboa/relaydomains/models.py +++ b/modoboa/relaydomains/models.py @@ -4,7 +4,7 @@ from django.db import models from django.db.models.manager import Manager from django.utils.translation import ugettext as _, ugettext_lazy -import reversion +from reversion import revisions as reversion from modoboa.admin import models as admin_models from modoboa.lib import parameters diff --git a/modoboa/static/js/twocols_nav.js b/modoboa/static/js/twocols_nav.js index 404cf6f5c..c7dda2be5 100644 --- a/modoboa/static/js/twocols_nav.js +++ b/modoboa/static/js/twocols_nav.js @@ -69,7 +69,7 @@ TwocolsNav.prototype = { toggle_field_visibility: function($field, $parent, value) { if ($parent.attr("disabled") === undefined && - $field.attr("data-visibility-value") == value) { + $field.attr("data-visibility-value") === value) { $field.attr("disabled", null); $field.show(); this.propagate_change($field); diff --git a/modoboa/templates/layout_simple.html b/modoboa/templates/layout_simple.html index 9a5bdcf2d..5848b087c 100644 --- a/modoboa/templates/layout_simple.html +++ b/modoboa/templates/layout_simple.html @@ -1,5 +1,4 @@ -{% load url from future %} {% load static %} diff --git a/modoboa/templates/nlayout.html b/modoboa/templates/nlayout.html index 1cf9778c8..2ca442bea 100644 --- a/modoboa/templates/nlayout.html +++ b/modoboa/templates/nlayout.html @@ -1,6 +1,6 @@ {% load static %} -{% load i18n core_tags lib_tags %}{% load url from future %} +{% load i18n core_tags lib_tags %} diff --git a/modoboa/templates/registration/login.html b/modoboa/templates/registration/login.html index 838588b14..92b4cf664 100644 --- a/modoboa/templates/registration/login.html +++ b/modoboa/templates/registration/login.html @@ -1,7 +1,6 @@ {% load i18n core_tags lib_tags form_tags %} {% load static %} -{% load url from future %} diff --git a/requirements.txt b/requirements.txt index b431de858..f8abf92e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -django<=1.8.99 -django-reversion==1.9.3 +django>=1.9,<=1.9.99 +django-reversion==1.10.2 dj-database-url pycrypto argparse @@ -9,7 +9,7 @@ bcrypt==2.0.0 django-versionfield2>=0.3.3 requests django-xforwardedfor-middleware -django-passwords==0.3.4 +django-passwords==0.3.10 rfc6266 progressbar==2.3 djangorestframework==3.3.1 diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index 0927dd493..01c00d775 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -83,9 +83,9 @@ AUTHENTICATION_BACKENDS = ( 'modoboa.lib.authbackends.SimpleBackend', ) -TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( +TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + [ 'modoboa.core.context_processors.top_notifications', -) +] ROOT_URLCONF = 'test_project.urls'