mirror of
https://github.com/YunoHost/moulinette.git
synced 2024-09-03 20:06:31 +02:00
Merge branch 'dev' of https://github.com/YunoHost/moulinette into dev
This commit is contained in:
commit
6d4e130ad4
3 changed files with 51 additions and 57 deletions
|
@ -121,19 +121,19 @@ user:
|
||||||
metavar: PASSWORD
|
metavar: PASSWORD
|
||||||
--add-mailforward:
|
--add-mailforward:
|
||||||
help: Mailforward addresses to add
|
help: Mailforward addresses to add
|
||||||
nargs: "+"
|
nargs: "*"
|
||||||
metavar: MAIL
|
metavar: MAIL
|
||||||
--remove-mailforward:
|
--remove-mailforward:
|
||||||
help: Mailforward addresses to remove
|
help: Mailforward addresses to remove
|
||||||
nargs: "+"
|
nargs: "*"
|
||||||
metavar: MAIL
|
metavar: MAIL
|
||||||
--add-mailalias:
|
--add-mailalias:
|
||||||
help: Mail aliases to add
|
help: Mail aliases to add
|
||||||
nargs: "+"
|
nargs: "*"
|
||||||
metavar: MAIL
|
metavar: MAIL
|
||||||
--remove-mailalias:
|
--remove-mailalias:
|
||||||
help: Mail aliases to remove
|
help: Mail aliases to remove
|
||||||
nargs: "+"
|
nargs: "*"
|
||||||
metavar: MAIL
|
metavar: MAIL
|
||||||
|
|
||||||
### user_info()
|
### user_info()
|
||||||
|
|
|
@ -104,11 +104,9 @@ def domain_add(domains, web=False):
|
||||||
domain +'. IN SOA ns.'+ domain +'. root.'+ domain +'. '+ timestamp +' 10800 3600 604800 38400',
|
domain +'. IN SOA ns.'+ domain +'. root.'+ domain +'. '+ timestamp +' 10800 3600 604800 38400',
|
||||||
domain +'. IN NS ns.'+ domain +'.',
|
domain +'. IN NS ns.'+ domain +'.',
|
||||||
domain +'. IN A '+ ip,
|
domain +'. IN A '+ ip,
|
||||||
domain +'. IN MX 5 mail.'+ domain +'.',
|
domain +'. IN MX 5 '+ domain +'.',
|
||||||
domain +'. IN TXT "v=spf1 a mx a:'+ domain +' ?all"',
|
domain +'. IN TXT "v=spf1 a mx a:'+ domain +' ?all"',
|
||||||
'mail.'+ domain +'. IN A '+ ip,
|
|
||||||
'ns.'+ domain +'. IN A '+ ip,
|
'ns.'+ domain +'. IN A '+ ip,
|
||||||
'root.'+ domain +'. IN A '+ ip
|
|
||||||
]
|
]
|
||||||
with open('/var/lib/bind/' + domain + '.zone', 'w') as zone:
|
with open('/var/lib/bind/' + domain + '.zone', 'w') as zone:
|
||||||
for line in zone_lines:
|
for line in zone_lines:
|
||||||
|
|
|
@ -8,6 +8,7 @@ import random
|
||||||
import string
|
import string
|
||||||
import getpass
|
import getpass
|
||||||
from yunohost import YunoHostError, YunoHostLDAP, win_msg, colorize, validate, get_required_args
|
from yunohost import YunoHostError, YunoHostLDAP, win_msg, colorize, validate, get_required_args
|
||||||
|
from yunohost_domain import domain_list
|
||||||
|
|
||||||
def user_list(fields=None, filter=None, limit=None, offset=None):
|
def user_list(fields=None, filter=None, limit=None, offset=None):
|
||||||
"""
|
"""
|
||||||
|
@ -23,7 +24,7 @@ def user_list(fields=None, filter=None, limit=None, offset=None):
|
||||||
Dict
|
Dict
|
||||||
"""
|
"""
|
||||||
with YunoHostLDAP() as yldap:
|
with YunoHostLDAP() as yldap:
|
||||||
user_attrs = ['uid', 'mail', 'cn', 'mailalias']
|
user_attrs = ['uid', 'mail', 'cn', 'maildrop']
|
||||||
attrs = []
|
attrs = []
|
||||||
result_list = []
|
result_list = []
|
||||||
if offset: offset = int(offset)
|
if offset: offset = int(offset)
|
||||||
|
@ -53,9 +54,9 @@ def user_list(fields=None, filter=None, limit=None, offset=None):
|
||||||
'Mail': user['mail'][0]
|
'Mail': user['mail'][0]
|
||||||
}
|
}
|
||||||
if len(user['mail']) > 1:
|
if len(user['mail']) > 1:
|
||||||
entry['Mail Forward'] = user['mail'][1:]
|
entry['Mail Aliases'] = user['mail'][1:]
|
||||||
if 'mailalias' in user:
|
if 'maildrop' in user:
|
||||||
entry['Mail Aliases'] = user['mailalias']
|
entry['Mail Forward'] = user['maildrop']
|
||||||
|
|
||||||
result_list.append(entry)
|
result_list.append(entry)
|
||||||
i += 1
|
i += 1
|
||||||
|
@ -85,15 +86,15 @@ def user_create(username, firstname, lastname, mail, password):
|
||||||
|
|
||||||
yldap.validate_uniqueness({
|
yldap.validate_uniqueness({
|
||||||
'uid' : username,
|
'uid' : username,
|
||||||
'mail' : mail,
|
'mail' : mail
|
||||||
'mailalias' : mail
|
|
||||||
})
|
})
|
||||||
|
|
||||||
# Check if unix user already exists (doesn't work)
|
# Check if unix user already exists (doesn't work)
|
||||||
#if not os.system("getent passwd " + username):
|
#if not os.system("getent passwd " + username):
|
||||||
# raise YunoHostError(17, _("Username not available"))
|
# raise YunoHostError(17, _("Username not available"))
|
||||||
|
|
||||||
#TODO: check if mail belongs to a domain
|
if mail[mail.find('@')+1:] not in domain_list()['Domains']:
|
||||||
|
raise YunoHostError(22, _("Domain not found : ")+ mail[mail.find('@')+1:])
|
||||||
|
|
||||||
# Get random UID/GID
|
# Get random UID/GID
|
||||||
uid_check = gid_check = 0
|
uid_check = gid_check = 0
|
||||||
|
@ -117,6 +118,7 @@ def user_create(username, firstname, lastname, mail, password):
|
||||||
'cn' : fullname,
|
'cn' : fullname,
|
||||||
'uid' : username,
|
'uid' : username,
|
||||||
'mail' : mail,
|
'mail' : mail,
|
||||||
|
'maildrop' : username,
|
||||||
'userPassword' : pwd,
|
'userPassword' : pwd,
|
||||||
'gidNumber' : uid,
|
'gidNumber' : uid,
|
||||||
'uidNumber' : uid,
|
'uidNumber' : uid,
|
||||||
|
@ -185,8 +187,9 @@ def user_update(username, firstname=None, lastname=None, mail=None, change_passw
|
||||||
Dict
|
Dict
|
||||||
"""
|
"""
|
||||||
with YunoHostLDAP() as yldap:
|
with YunoHostLDAP() as yldap:
|
||||||
attrs_to_fetch = ['givenName', 'sn', 'mail', 'mailAlias']
|
attrs_to_fetch = ['givenName', 'sn', 'mail', 'maildrop']
|
||||||
new_attr_dict = {}
|
new_attr_dict = {}
|
||||||
|
domains = domain_list()['Domains']
|
||||||
|
|
||||||
# Populate user informations
|
# Populate user informations
|
||||||
result = yldap.search(base='ou=users,dc=yunohost,dc=org', filter='uid=' + username, attrs=attrs_to_fetch)
|
result = yldap.search(base='ou=users,dc=yunohost,dc=org', filter='uid=' + username, attrs=attrs_to_fetch)
|
||||||
|
@ -213,57 +216,50 @@ def user_update(username, firstname=None, lastname=None, mail=None, change_passw
|
||||||
new_attr_dict['userPassword'] = '{CRYPT}' + crypt.crypt(str(change_password), salt)
|
new_attr_dict['userPassword'] = '{CRYPT}' + crypt.crypt(str(change_password), salt)
|
||||||
|
|
||||||
if mail:
|
if mail:
|
||||||
yldap.validate_uniqueness({
|
yldap.validate_uniqueness({ 'mail': mail })
|
||||||
'mail' : mail,
|
if mail[mail.find('@')+1:] not in domains:
|
||||||
'mailalias' : mail
|
raise YunoHostError(22, _("Domain not found : ")+ mail[mail.find('@')+1:])
|
||||||
})
|
|
||||||
del user['mail'][0]
|
del user['mail'][0]
|
||||||
new_attr_dict['mail'] = [mail] + user['mail']
|
new_attr_dict['mail'] = [mail] + user['mail']
|
||||||
|
|
||||||
if add_mailforward:
|
|
||||||
if not isinstance(add_mailforward, list):
|
|
||||||
add_mailforward = [ add_mailforward ]
|
|
||||||
for mail in add_mailforward:
|
|
||||||
yldap.validate_uniqueness({
|
|
||||||
'mail' : mail,
|
|
||||||
'mailalias' : mail
|
|
||||||
})
|
|
||||||
user['mail'].append(mail)
|
|
||||||
new_attr_dict['mail'] = user['mail']
|
|
||||||
|
|
||||||
if remove_mailforward:
|
|
||||||
if not isinstance(remove_mailforward, list):
|
|
||||||
remove_mailforward = [ remove_mailforward ]
|
|
||||||
for mail in remove_mailforward:
|
|
||||||
if len(user['mail']) > 1 and mail in user['mail'][1:]:
|
|
||||||
user['mail'].remove(mail)
|
|
||||||
else:
|
|
||||||
raise YunoHostError(22, _("Invalid mail forward : ") + mail)
|
|
||||||
new_attr_dict['mail'] = user['mail']
|
|
||||||
|
|
||||||
if add_mailalias:
|
if add_mailalias:
|
||||||
if not isinstance(add_mailalias, list):
|
if not isinstance(add_mailalias, list):
|
||||||
add_mailalias = [ add_mailalias ]
|
add_mailalias = [ add_mailalias ]
|
||||||
for mail in add_mailalias:
|
for mail in add_mailalias:
|
||||||
yldap.validate_uniqueness({
|
yldap.validate_uniqueness({ 'mail': mail })
|
||||||
'mail' : mail,
|
if mail[mail.find('@')+1:] not in domains:
|
||||||
'mailalias' : mail
|
raise YunoHostError(22, _("Domain not found : ")+ mail[mail.find('@')+1:])
|
||||||
})
|
user['mail'].append(mail)
|
||||||
if 'mailalias' in user:
|
new_attr_dict['mail'] = user['mail']
|
||||||
user['mailalias'].append(mail)
|
|
||||||
else:
|
|
||||||
user['mailalias'] = [ mail ]
|
|
||||||
new_attr_dict['mailalias'] = user['mailalias']
|
|
||||||
|
|
||||||
if remove_mailalias:
|
if remove_mailalias:
|
||||||
if not isinstance(remove_mailalias, list):
|
if not isinstance(remove_mailalias, list):
|
||||||
remove_mailalias = [ remove_mailalias ]
|
remove_mailalias = [ remove_mailalias ]
|
||||||
for mail in remove_mailalias:
|
for mail in remove_mailalias:
|
||||||
if 'mailalias' in user and mail in user['mailalias']:
|
if len(user['mail']) > 1 and mail in user['mail'][1:]:
|
||||||
user['mailalias'].remove(mail)
|
user['mail'].remove(mail)
|
||||||
else:
|
else:
|
||||||
raise YunoHostError(22, _("Invalid mail alias : ") + mail)
|
raise YunoHostError(22, _("Invalid mail alias : ") + mail)
|
||||||
new_attr_dict['mailalias'] = user['mailalias']
|
new_attr_dict['mail'] = user['mail']
|
||||||
|
|
||||||
|
if add_mailforward:
|
||||||
|
if not isinstance(add_mailforward, list):
|
||||||
|
add_mailforward = [ add_mailforward ]
|
||||||
|
for mail in add_mailforward:
|
||||||
|
if mail in user['maildrop'][1:]:
|
||||||
|
continue
|
||||||
|
user['maildrop'].append(mail)
|
||||||
|
new_attr_dict['maildrop'] = user['maildrop']
|
||||||
|
|
||||||
|
if remove_mailforward:
|
||||||
|
if not isinstance(remove_mailforward, list):
|
||||||
|
remove_mailforward = [ remove_mailforward ]
|
||||||
|
for mail in remove_mailforward:
|
||||||
|
if len(user['maildrop']) > 1 and mail in user['maildrop'][1:]:
|
||||||
|
user['maildrop'].remove(mail)
|
||||||
|
else:
|
||||||
|
raise YunoHostError(22, _("Invalid mail forward : ") + mail)
|
||||||
|
new_attr_dict['maildrop'] = user['maildrop']
|
||||||
|
|
||||||
if yldap.update('uid=' + username + ',ou=users', new_attr_dict):
|
if yldap.update('uid=' + username + ',ou=users', new_attr_dict):
|
||||||
win_msg(_("User successfully updated"))
|
win_msg(_("User successfully updated"))
|
||||||
|
@ -285,10 +281,10 @@ def user_info(user_or_mail):
|
||||||
Dict
|
Dict
|
||||||
"""
|
"""
|
||||||
with YunoHostLDAP() as yldap:
|
with YunoHostLDAP() as yldap:
|
||||||
user_attrs = ['cn', 'mail', 'uid', 'mailAlias']
|
user_attrs = ['cn', 'mail', 'uid', 'maildrop']
|
||||||
|
|
||||||
if len(user_or_mail.split('@')) is 2:
|
if len(user_or_mail.split('@')) is 2:
|
||||||
filter = '(|(mail='+ user_or_mail +')(mailalias='+ user_or_mail +'))'
|
filter = 'mail='+ user_or_mail
|
||||||
else:
|
else:
|
||||||
filter = 'uid='+ user_or_mail
|
filter = 'uid='+ user_or_mail
|
||||||
|
|
||||||
|
@ -306,10 +302,10 @@ def user_info(user_or_mail):
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(user['mail']) > 1:
|
if len(user['mail']) > 1:
|
||||||
result_dict['Mail Forward'] = user['mail'][1:]
|
result_dict['Mail Aliases'] = user['mail'][1:]
|
||||||
|
|
||||||
if 'mailalias' in user:
|
if len(user['maildrop']) > 1:
|
||||||
result_dict['Mail Aliases'] = user['mailalias']
|
result_dict['Mail Forward'] = user['maildrop'][1:]
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result_dict
|
return result_dict
|
||||||
|
|
Loading…
Add table
Reference in a new issue