mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Merge branch 'aliases' of github.com:YunoHost/yunohost into aliases
This commit is contained in:
commit
176ee5aa33
1 changed files with 38 additions and 25 deletions
|
@ -29,6 +29,7 @@ import errno
|
||||||
from moulinette.core import MoulinetteError
|
from moulinette.core import MoulinetteError
|
||||||
from yunohost.domain import domain_list
|
from yunohost.domain import domain_list
|
||||||
|
|
||||||
|
|
||||||
def alias_list(auth):
|
def alias_list(auth):
|
||||||
"""
|
"""
|
||||||
List aliases
|
List aliases
|
||||||
|
@ -36,9 +37,9 @@ def alias_list(auth):
|
||||||
"""
|
"""
|
||||||
_ensure_ldap_ou_is_created(auth)
|
_ensure_ldap_ou_is_created(auth)
|
||||||
ldap_filter = '(&(objectclass=mailAccount)(objectclass=mailAlias))'
|
ldap_filter = '(&(objectclass=mailAccount)(objectclass=mailAlias))'
|
||||||
ldap_attrs = [ 'mail', 'maildrop' ]
|
ldap_attrs = ['mail', 'maildrop']
|
||||||
result = auth.search('ou=aliases,dc=yunohost,dc=org', ldap_filter, ldap_attrs)
|
result = auth.search('ou=aliases,dc=yunohost,dc=org', ldap_filter, ldap_attrs)
|
||||||
return { 'alias' : result }
|
return {'alias': result}
|
||||||
|
|
||||||
|
|
||||||
def alias_create(auth, alias, mailforward):
|
def alias_create(auth, alias, mailforward):
|
||||||
|
@ -54,11 +55,11 @@ def alias_create(auth, alias, mailforward):
|
||||||
|
|
||||||
# Validate uniqueness of alias and mail in LDAP
|
# Validate uniqueness of alias and mail in LDAP
|
||||||
auth.validate_uniqueness({
|
auth.validate_uniqueness({
|
||||||
'mail' : alias
|
'mail': alias,
|
||||||
})
|
})
|
||||||
|
|
||||||
# Check that the mail domain exists
|
# Check that the mail domain exists
|
||||||
alias_domain = alias[alias.find('@')+1:]
|
alias_domain = alias[alias.find('@') + 1:]
|
||||||
if alias_domain not in domain_list(auth)['domains']:
|
if alias_domain not in domain_list(auth)['domains']:
|
||||||
raise MoulinetteError(errno.EINVAL,
|
raise MoulinetteError(errno.EINVAL,
|
||||||
m18n.n('mail_domain_unknown',
|
m18n.n('mail_domain_unknown',
|
||||||
|
@ -67,16 +68,18 @@ def alias_create(auth, alias, mailforward):
|
||||||
# Adapt values for LDAP
|
# Adapt values for LDAP
|
||||||
rdn = 'mail=%s,ou=aliases' % alias
|
rdn = 'mail=%s,ou=aliases' % alias
|
||||||
attr_dict = {
|
attr_dict = {
|
||||||
'objectClass' : ['mailAccount', 'mailAlias'],
|
'objectClass': ['mailAccount', 'mailAlias'],
|
||||||
'mail' : alias,
|
'mail': alias,
|
||||||
'maildrop' : mailforward.split(",")
|
'maildrop': mailforward.split(",")
|
||||||
}
|
}
|
||||||
|
|
||||||
if not auth.add(rdn, attr_dict):
|
success = auth.add(rdn, attr_dict)
|
||||||
|
if not success:
|
||||||
raise MoulinetteError(169, m18n.n('alias_creation_failed'))
|
raise MoulinetteError(169, m18n.n('alias_creation_failed'))
|
||||||
|
|
||||||
msignals.display(m18n.n('alias_created'), 'success')
|
msignals.display(m18n.n('alias_created'), 'success')
|
||||||
return { 'alias' : alias, 'maildrop' : attr_dict['maildrop'] }
|
return {'alias': alias, 'maildrop': attr_dict['maildrop']}
|
||||||
|
|
||||||
|
|
||||||
def alias_update(auth, alias, add_mailforward=None, remove_mailforward=None):
|
def alias_update(auth, alias, add_mailforward=None, remove_mailforward=None):
|
||||||
"""
|
"""
|
||||||
|
@ -88,17 +91,24 @@ def alias_update(auth, alias, add_mailforward=None, remove_mailforward=None):
|
||||||
"""
|
"""
|
||||||
_ensure_ldap_ou_is_created(auth)
|
_ensure_ldap_ou_is_created(auth)
|
||||||
|
|
||||||
|
# normalize input
|
||||||
|
if not isinstance(add_mailforward, list):
|
||||||
|
add_mailforward = [add_mailforward]
|
||||||
|
|
||||||
|
if not isinstance(add_mailforward, list):
|
||||||
|
add_mailforward = [add_mailforward]
|
||||||
|
|
||||||
alias_attrs = [
|
alias_attrs = [
|
||||||
'mail', 'maildrop'
|
'mail', 'maildrop'
|
||||||
]
|
]
|
||||||
|
|
||||||
if len(alias.split('@')) is 2:
|
if len(alias.split('@')) == 2:
|
||||||
filter = 'mail=' + alias
|
ldap_filter = 'mail=%s' % alias
|
||||||
else:
|
else:
|
||||||
# TODO better error message
|
# TODO better error message
|
||||||
raise MoulinetteError(167, m18n.n('alias_info_failed'))
|
raise MoulinetteError(167, m18n.n('alias_info_failed'))
|
||||||
|
|
||||||
result = auth.search('ou=aliases,dc=yunohost,dc=org', filter, alias_attrs)
|
result = auth.search('ou=aliases,dc=yunohost,dc=org', ldap_filter, alias_attrs)
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
raise MoulinetteError(errno.EINVAL, m18n.n('alias_unknown'))
|
raise MoulinetteError(errno.EINVAL, m18n.n('alias_unknown'))
|
||||||
|
@ -107,24 +117,22 @@ def alias_update(auth, alias, add_mailforward=None, remove_mailforward=None):
|
||||||
|
|
||||||
# Get modifications from arguments
|
# Get modifications from arguments
|
||||||
if add_mailforward:
|
if add_mailforward:
|
||||||
if not isinstance(add_mailforward, list):
|
|
||||||
add_mailforward = [ add_mailforward ]
|
|
||||||
for mail in add_mailforward:
|
for mail in add_mailforward:
|
||||||
if mail not in current_alias_info['maildrop']:
|
if mail not in current_alias_info['maildrop']:
|
||||||
current_alias_info['maildrop'].append(mail)
|
current_alias_info['maildrop'].append(mail)
|
||||||
|
|
||||||
if remove_mailforward:
|
if remove_mailforward:
|
||||||
if not isinstance(add_mailforward, list):
|
|
||||||
add_mailforward = [ add_mailforward ]
|
|
||||||
for mail in remove_mailforward:
|
for mail in remove_mailforward:
|
||||||
if mail in current_alias_info['maildrop'][1:]:
|
if mail in current_alias_info['maildrop'][1:]:
|
||||||
current_alias_info['maildrop'].remove(mail)
|
current_alias_info['maildrop'].remove(mail)
|
||||||
|
|
||||||
if auth.update('mail=%s,ou=aliases' % alias, current_alias_info):
|
success = auth.update('mail=%s,ou=aliases' % alias, current_alias_info)
|
||||||
msignals.display(m18n.n('alias_updated'), 'success')
|
if not success:
|
||||||
return alias_info(auth, alias)
|
raise MoulinetteError(169, m18n.n('alias_update_failed'))
|
||||||
else:
|
|
||||||
raise MoulinetteError(169, m18n.n('alias_update_failed'))
|
msignals.display(m18n.n('alias_updated'), 'success')
|
||||||
|
return alias_info(auth, alias)
|
||||||
|
|
||||||
|
|
||||||
def alias_delete(auth, alias):
|
def alias_delete(auth, alias):
|
||||||
"""
|
"""
|
||||||
|
@ -136,7 +144,8 @@ def alias_delete(auth, alias):
|
||||||
"""
|
"""
|
||||||
_ensure_ldap_ou_is_created(auth)
|
_ensure_ldap_ou_is_created(auth)
|
||||||
|
|
||||||
if not auth.remove('mail=%s,ou=aliases' % alias):
|
success = auth.remove('mail=%s,ou=aliases' % alias)
|
||||||
|
if not success:
|
||||||
raise MoulinetteError(169, m18n.n('alias_deletion_failed'))
|
raise MoulinetteError(169, m18n.n('alias_deletion_failed'))
|
||||||
|
|
||||||
msignals.display(m18n.n('alias_deleted'), 'success')
|
msignals.display(m18n.n('alias_deleted'), 'success')
|
||||||
|
@ -169,6 +178,7 @@ def alias_info(auth, alias):
|
||||||
|
|
||||||
return result[0]
|
return result[0]
|
||||||
|
|
||||||
|
|
||||||
def _ensure_ldap_ou_is_created(auth):
|
def _ensure_ldap_ou_is_created(auth):
|
||||||
"""
|
"""
|
||||||
Make sure the 'ou=aliases' tree is created, for holding aliases entries.
|
Make sure the 'ou=aliases' tree is created, for holding aliases entries.
|
||||||
|
@ -179,8 +189,11 @@ def _ensure_ldap_ou_is_created(auth):
|
||||||
"""
|
"""
|
||||||
rdn = 'ou=aliases'
|
rdn = 'ou=aliases'
|
||||||
attr_dict = {
|
attr_dict = {
|
||||||
'objectClass' : ['organizationalUnit', 'top'],
|
'objectClass': ['organizationalUnit', 'top'],
|
||||||
}
|
}
|
||||||
if not auth.search('dc=yunohost,dc=org', rdn, attr_dict['objectClass']) :
|
|
||||||
|
result = auth.search('dc=yunohost,dc=org', rdn, attr_dict['objectClass'])
|
||||||
|
|
||||||
|
if not result:
|
||||||
if auth.add(rdn, attr_dict):
|
if auth.add(rdn, attr_dict):
|
||||||
msignals.display(m18n.n('alias_init'), 'success')
|
msignals.display(m18n.n('alias_init'), 'success')
|
||||||
|
|
Loading…
Add table
Reference in a new issue