mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n form_tags %}{% load url from future %}
|
||||
{% load i18n form_tags %}
|
||||
<h2>{% trans "Forward" %} <small>{% trans "Automatically forward emails to another address" %}</small></h2>
|
||||
<hr>
|
||||
<form class="form-horizontal" method="POST" action="{% url 'user_forward' %}"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "admin/listing.html" %}
|
||||
{% load admin_tags lib_tags i18n %}{% load url from future %}
|
||||
{% load admin_tags lib_tags i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% block pagetitle %}{% trans "Identities" %}{% endblock %}
|
||||
|
||||
@@ -5,6 +5,7 @@ Admin extension tags.
|
||||
from django import template
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
|
||||
from modoboa.lib import events
|
||||
@@ -192,7 +193,7 @@ def identity_actions(user, ident):
|
||||
return render_actions(actions)
|
||||
|
||||
|
||||
@register.assignment_tag
|
||||
@register.simple_tag
|
||||
def check_identity_status(identity):
|
||||
"""Check if identity is enabled or not."""
|
||||
if identity.__class__.__name__ == "User":
|
||||
@@ -232,7 +233,7 @@ def domain_aliases(domain):
|
||||
res = ''
|
||||
for alias in domain.aliases.all():
|
||||
res += '%s<br/>' % alias.name
|
||||
return res
|
||||
return mark_safe(res)
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
@@ -283,4 +284,4 @@ def get_extra_admin_content(user, target, currentpage):
|
||||
res = events.raiseQueryEvent(
|
||||
"ExtraAdminContent", user, target, currentpage
|
||||
)
|
||||
return "".join(res)
|
||||
return mark_safe("".join(res))
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
"""Alias related views."""
|
||||
|
||||
from django.contrib.auth.decorators import (
|
||||
login_required, permission_required
|
||||
@@ -7,7 +8,7 @@ from django.db import IntegrityError
|
||||
from django.shortcuts import render
|
||||
from django.utils.translation import ugettext as _, ungettext
|
||||
|
||||
import reversion
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from modoboa.core import signals as core_signals
|
||||
from modoboa.lib.exceptions import PermDeniedException, Conflict
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
"""
|
||||
Domain related views.
|
||||
"""
|
||||
"""Domain related views."""
|
||||
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.utils.translation import ugettext as _, ungettext
|
||||
@@ -11,7 +9,7 @@ from django.contrib.auth.decorators import (
|
||||
login_required, permission_required, user_passes_test
|
||||
)
|
||||
|
||||
import reversion
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from modoboa.core.models import User
|
||||
from modoboa.core import signals as core_signals
|
||||
@@ -38,8 +36,8 @@ def index(request):
|
||||
|
||||
@login_required
|
||||
@user_passes_test(
|
||||
lambda u: u.has_perm("admin.view_domains")
|
||||
or u.has_perm("admin.view_mailboxes")
|
||||
lambda u: u.has_perm("admin.view_domains") or
|
||||
u.has_perm("admin.view_mailboxes")
|
||||
)
|
||||
def _domains(request):
|
||||
sort_order, sort_dir = get_sort_order(request.GET, "name")
|
||||
|
||||
@@ -7,7 +7,7 @@ from django.shortcuts import render
|
||||
from django.utils.translation import ugettext as _, ungettext
|
||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
|
||||
import reversion
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from modoboa.core.models import User
|
||||
from modoboa.lib import parameters, events
|
||||
|
||||
@@ -10,7 +10,7 @@ from django.db import transaction
|
||||
from django.shortcuts import render
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
import reversion
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from modoboa.lib import events
|
||||
from modoboa.lib.exceptions import ModoboaException, Conflict
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
import reversion
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from modoboa.lib.web_utils import (
|
||||
render_to_json_response, _render_to_string
|
||||
|
||||
@@ -7,6 +7,7 @@ import getpass
|
||||
import os
|
||||
import sys
|
||||
|
||||
import django
|
||||
from django.template import Context, Template
|
||||
|
||||
import dj_database_url
|
||||
@@ -167,6 +168,7 @@ class PostfixMapsCommand(Command):
|
||||
|
||||
def handle(self, parsed_args):
|
||||
"""Command entry point."""
|
||||
django.setup()
|
||||
dbinfo = None
|
||||
if parsed_args.dburl:
|
||||
dbinfo = dj_database_url.config(default=parsed_args.dburl[0])
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.db.models.signals import post_delete
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
import reversion
|
||||
from reversion import revisions as reversion
|
||||
|
||||
|
||||
@receiver(reversion.post_revision_commit)
|
||||
|
||||
@@ -6,14 +6,14 @@ from django.contrib.auth.hashers import make_password, is_password_usable
|
||||
from django.contrib.auth.models import (
|
||||
UserManager, Group, PermissionsMixin
|
||||
)
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
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.password_hashers import get_password_hasher
|
||||
from modoboa.lib import events, parameters
|
||||
@@ -470,7 +470,7 @@ class ObjectAccess(models.Model):
|
||||
user = models.ForeignKey(User)
|
||||
content_type = models.ForeignKey(ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||
content_object = GenericForeignKey('content_type', 'object_id')
|
||||
is_owner = models.BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}{% load url from future %}
|
||||
{% load i18n lib_tags %}
|
||||
<h2>{% trans "Parameters" %} <small>{% trans "Configure Modoboa" %}</small></h2><hr />
|
||||
<form id="settings_form" method="POST" action="{% url 'core:parameter_save' %}" class="form-horizontal">{% csrf_token %}
|
||||
{% include "common/parameters.html" %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n %}{% load url from future %}
|
||||
{% load i18n %}
|
||||
<h2>{% trans "Preferences" %} <small>{% trans "Customize Modoboa" %}</small></h2>
|
||||
<hr>
|
||||
{% if forms %}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{% load i18n form_tags %}
|
||||
{% load url from future %}
|
||||
|
||||
<h2>{% trans "Profile" %} <small>{% trans "Update your personal information" %}</small></h2>
|
||||
<hr>
|
||||
|
||||
@@ -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("""
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('body').notify('%s', '%s', %s);
|
||||
});
|
||||
</script>
|
||||
""" % (level, text, timeout)
|
||||
""" % (level, text, timeout))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
{% load url from future %}
|
||||
{% load static %}
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
<head>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
{% load static %}
|
||||
{% load i18n core_tags lib_tags %}{% load url from future %}
|
||||
{% load i18n core_tags lib_tags %}
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
{% load i18n core_tags lib_tags form_tags %}
|
||||
{% load static %}
|
||||
{% load url from future %}
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
+3
-3
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user