mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-19 05:58:34 +02:00
@@ -29,21 +29,15 @@ class Amavis(ModoExtension):
|
||||
for existing domains to let Amavis consider them local.
|
||||
"""
|
||||
from modoboa.extensions.admin.models import Domain
|
||||
from modoboa.extensions.amavis.models import Users
|
||||
from modoboa.extensions.amavis.lib import (
|
||||
create_user_and_policy, create_user_and_use_policy
|
||||
)
|
||||
|
||||
for dom in Domain.objects.all():
|
||||
try:
|
||||
Users.objects.get(email="@%s" % dom.name)
|
||||
except Users.DoesNotExist:
|
||||
create_user_and_policy(dom.name)
|
||||
policy = create_user_and_policy("@{0}".format(dom.name))
|
||||
for domalias in dom.domainalias_set.all():
|
||||
try:
|
||||
Users.objects.get(email='@%s' % domalias.name)
|
||||
except Users.DoesNotExist:
|
||||
create_user_and_use_policy(domalias.name, dom.name)
|
||||
domalias_pattern = "@{0}".format(domalias.name)
|
||||
create_user_and_use_policy(domalias_pattern, policy)
|
||||
|
||||
def load(self):
|
||||
from .app_settings import ParametersForm, UserSettings
|
||||
|
||||
@@ -44,7 +44,8 @@ def on_domain_deleted(domain):
|
||||
@events.observe("DomainAliasCreated")
|
||||
def on_domain_alias_created(user, domainalias):
|
||||
create_user_and_use_policy(
|
||||
"@{0}".format(domainalias.name), domainalias.target.name
|
||||
"@{0}".format(domainalias.name),
|
||||
"@{0}".format(domainalias.target.name)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -235,6 +235,8 @@ def create_user_and_policy(name, priority=7):
|
||||
:param str name: name
|
||||
:return: the new ``Policy`` object
|
||||
"""
|
||||
if Users.objects.filter(email=name).exists():
|
||||
return Policy.objects.get(policy_name=name[:32])
|
||||
policy = Policy.objects.create(policy_name=name[:32])
|
||||
Users.objects.create(
|
||||
email=name, fullname=name, priority=priority, policy=policy
|
||||
@@ -242,14 +244,15 @@ def create_user_and_policy(name, priority=7):
|
||||
return policy
|
||||
|
||||
|
||||
def create_user_and_use_policy(name, policy_name, priority=7):
|
||||
def create_user_and_use_policy(name, policy, priority=7):
|
||||
"""Create a *users* record and use an existing policy.
|
||||
|
||||
:param str name: user record name
|
||||
:param str policy_name: policy name
|
||||
:param str policy: string or Policy instance
|
||||
"""
|
||||
policy = Policy.objects.get(policy_name="@{0}".format(policy_name[:32]))
|
||||
Users.objects.create(
|
||||
if isinstance(policy, basestring):
|
||||
policy = Policy.objects.get(policy_name=policy[:32])
|
||||
Users.objects.get_or_create(
|
||||
email=name, fullname=name, priority=priority, policy=policy
|
||||
)
|
||||
|
||||
@@ -319,9 +322,9 @@ def setup_manual_learning_for_domain(domain):
|
||||
|
||||
:return: True if learning has been setup, False otherwise
|
||||
"""
|
||||
if Policy.objects.filter(sa_username=domain.name).count():
|
||||
if Policy.objects.filter(sa_username=domain.name).exists():
|
||||
return False
|
||||
policy = Policy.objects.get(policy_name=domain.name)
|
||||
policy = Policy.objects.get(policy_name=domain.name[:32])
|
||||
policy.sa_username = domain.name
|
||||
policy.save()
|
||||
return True
|
||||
@@ -333,8 +336,9 @@ def setup_manual_learning_for_mbox(mbox):
|
||||
:return: True if learning has been setup, False otherwise
|
||||
"""
|
||||
result = False
|
||||
if not Policy.objects.filter(policy_name=mbox.full_address).exists():
|
||||
policy = create_user_and_policy(mbox.full_address)
|
||||
pname = mbox.full_address[:32]
|
||||
if not Policy.objects.filter(policy_name=pname).exists():
|
||||
policy = create_user_and_policy(pname)
|
||||
for alias in mbox.alias_addresses:
|
||||
create_user_and_use_policy(alias, policy)
|
||||
result = True
|
||||
|
||||
@@ -48,21 +48,15 @@ def init_amavis_dependant_features():
|
||||
We create records for *users* and *policy* tables for each defined
|
||||
relay domain or relay domain alias.
|
||||
"""
|
||||
from modoboa.extensions.amavis.models import Users
|
||||
from modoboa.extensions.amavis.lib import (
|
||||
create_user_and_policy, create_user_and_use_policy
|
||||
)
|
||||
|
||||
for rdom in RelayDomain.objects.all():
|
||||
try:
|
||||
Users.objects.get(email="@%s" % rdom.name)
|
||||
except Users.DoesNotExist:
|
||||
create_user_and_policy(rdom.name)
|
||||
policy = create_user_and_policy("@{0}".format(rdom.name))
|
||||
for rdomalias in rdom.relaydomainalias_set.all():
|
||||
try:
|
||||
Users.objects.get(email='@%s' % rdomalias.name)
|
||||
except Users.DoesNotExist:
|
||||
create_user_and_use_policy(rdomalias.name, rdom.name)
|
||||
rdomalias_pattern = "@{0}".format(rdomalias.name)
|
||||
create_user_and_use_policy(rdomalias_pattern, policy)
|
||||
|
||||
|
||||
class PostfixRelayDomains(ModoExtension):
|
||||
|
||||
@@ -25,7 +25,9 @@ def on_relay_domain_deleted(rdomain):
|
||||
@events.observe("RelayDomainAliasCreated")
|
||||
def on_relay_domain_alias_created(user, rdomainalias):
|
||||
create_user_and_use_policy(
|
||||
"@{0}".format(rdomainalias.name), rdomainalias.target.name)
|
||||
"@{0}".format(rdomainalias.name),
|
||||
"@{0}".format(rdomainalias.target.name)
|
||||
)
|
||||
|
||||
|
||||
@events.observe("RelayDomainAliasDeleted")
|
||||
|
||||
Reference in New Issue
Block a user