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 yunohost.domain import domain_list
|
||||
|
||||
|
||||
def alias_list(auth):
|
||||
"""
|
||||
List aliases
|
||||
|
@ -36,9 +37,9 @@ def alias_list(auth):
|
|||
"""
|
||||
_ensure_ldap_ou_is_created(auth)
|
||||
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)
|
||||
return { 'alias' : result }
|
||||
return {'alias': result}
|
||||
|
||||
|
||||
def alias_create(auth, alias, mailforward):
|
||||
|
@ -54,11 +55,11 @@ def alias_create(auth, alias, mailforward):
|
|||
|
||||
# Validate uniqueness of alias and mail in LDAP
|
||||
auth.validate_uniqueness({
|
||||
'mail' : alias
|
||||
'mail': alias,
|
||||
})
|
||||
|
||||
# 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']:
|
||||
raise MoulinetteError(errno.EINVAL,
|
||||
m18n.n('mail_domain_unknown',
|
||||
|
@ -67,16 +68,18 @@ def alias_create(auth, alias, mailforward):
|
|||
# Adapt values for LDAP
|
||||
rdn = 'mail=%s,ou=aliases' % alias
|
||||
attr_dict = {
|
||||
'objectClass' : ['mailAccount', 'mailAlias'],
|
||||
'mail' : alias,
|
||||
'maildrop' : mailforward.split(",")
|
||||
'objectClass': ['mailAccount', 'mailAlias'],
|
||||
'mail': alias,
|
||||
'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'))
|
||||
|
||||
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):
|
||||
"""
|
||||
|
@ -88,17 +91,24 @@ def alias_update(auth, alias, add_mailforward=None, remove_mailforward=None):
|
|||
"""
|
||||
_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 = [
|
||||
'mail', 'maildrop'
|
||||
]
|
||||
|
||||
if len(alias.split('@')) is 2:
|
||||
filter = 'mail=' + alias
|
||||
if len(alias.split('@')) == 2:
|
||||
ldap_filter = 'mail=%s' % alias
|
||||
else:
|
||||
# TODO better error message
|
||||
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:
|
||||
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
|
||||
if add_mailforward:
|
||||
if not isinstance(add_mailforward, list):
|
||||
add_mailforward = [ add_mailforward ]
|
||||
for mail in add_mailforward:
|
||||
if mail not in current_alias_info['maildrop']:
|
||||
current_alias_info['maildrop'].append(mail)
|
||||
|
||||
if remove_mailforward:
|
||||
if not isinstance(add_mailforward, list):
|
||||
add_mailforward = [ add_mailforward ]
|
||||
for mail in remove_mailforward:
|
||||
if mail in current_alias_info['maildrop'][1:]:
|
||||
current_alias_info['maildrop'].remove(mail)
|
||||
|
||||
if auth.update('mail=%s,ou=aliases' % alias, current_alias_info):
|
||||
msignals.display(m18n.n('alias_updated'), 'success')
|
||||
return alias_info(auth, alias)
|
||||
else:
|
||||
raise MoulinetteError(169, m18n.n('alias_update_failed'))
|
||||
success = auth.update('mail=%s,ou=aliases' % alias, current_alias_info)
|
||||
if not success:
|
||||
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):
|
||||
"""
|
||||
|
@ -136,7 +144,8 @@ def alias_delete(auth, alias):
|
|||
"""
|
||||
_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'))
|
||||
|
||||
msignals.display(m18n.n('alias_deleted'), 'success')
|
||||
|
@ -169,18 +178,22 @@ def alias_info(auth, alias):
|
|||
|
||||
return result[0]
|
||||
|
||||
|
||||
def _ensure_ldap_ou_is_created(auth):
|
||||
"""
|
||||
Make sure the 'ou=aliases' tree is created, for holding aliases entries.
|
||||
Raises an exception in case of error.
|
||||
|
||||
|
||||
Keyword argument:
|
||||
auth -- the auth object from moulinette, managing the LDAP connection
|
||||
"""
|
||||
rdn = 'ou=aliases'
|
||||
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):
|
||||
msignals.display(m18n.n('alias_init'), 'success')
|
||||
|
|
Loading…
Add table
Reference in a new issue