From 3815bb5557c61023330d94d05e1901f10b49a0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Lebleu?= Date: Mon, 2 Jun 2014 21:18:20 +0200 Subject: [PATCH] [enh] Review user actions and actionsmap to fit to moulinette --- actionsmap/yunohost.yml | 60 ++++++++++++++++++++++++++--------------- locales/en.json | 12 ++++++++- locales/fr.json | 12 ++++++++- user.py | 32 +++++++++------------- 4 files changed, 73 insertions(+), 43 deletions(-) diff --git a/actionsmap/yunohost.yml b/actionsmap/yunohost.yml index f9d9e346d..6549d7c85 100644 --- a/actionsmap/yunohost.yml +++ b/actionsmap/yunohost.yml @@ -39,7 +39,7 @@ _global: authenticator: default: vendor: ldap - help: Admin Password + help: admin_password parameters: uri: ldap://localhost:389 base_dn: dc=yunohost,dc=org @@ -95,34 +95,43 @@ user: configuration: authenticate: all arguments: - -u: - full: --username - help: Must be unique + username: + help: The unique username to create extra: - ask: "Username" pattern: - '^[a-z0-9_]+$' - - "Must be alphanumeric and underscore characters only" + - pattern_username -f: full: --firstname extra: - ask: "Firstname" + ask: ask_firstname + required: True + pattern: + - "^([^\\W\\d_]{2,30}[ ,.']{0,3})+$" + - pattern_firstname -l: full: --lastname extra: - ask: "Lastname" + ask: ask_lastname + required: True + pattern: + - "^([^\\W\\d_]{2,30}[ ,.']{0,3})+$" + - pattern_lastname -m: full: --mail - help: Main mail address must be unique + help: Main unique email address extra: - ask: "Mail address" + ask: ask_email + required: True pattern: - '^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$' - - "Must be a valid email address (e.g. someone@domain.org)" + - pattern_email -p: full: --password + help: User password extra: - password: "User password" + password: ask_password + required: True ### user_delete() delete: @@ -131,15 +140,12 @@ user: configuration: authenticate: all arguments: - -u: - full: --users - help: Username of users to delete - nargs: "*" + username: + help: Username to delete extra: - ask: "Users to delete" pattern: - '^[a-z0-9_]+$' - - "Must be alphanumeric and underscore characters only" + - pattern_username --purge: action: store_true @@ -151,13 +157,25 @@ user: authenticate: all arguments: username: - help: Username of user to update + help: Username to update -f: full: --firstname + extra: + pattern: + - "^([^\\W\\d_]{2,30}[ ,.']{0,3})+$" + - pattern_firstname -l: full: --lastname + extra: + pattern: + - "^([^\\W\\d_]{2,30}[ ,.']{0,3})+$" + - pattern_lastname -m: full: --mail + extra: + pattern: + - '^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$' + - pattern_email -p: full: --change-password help: New password to set @@ -181,14 +199,14 @@ user: ### user_info() info: - action_help: Get user informations + action_help: Get user information api: GET /users/ configuration: authenticate: all authenticator: ldap-anonymous arguments: username: - help: Username or mail to get informations + help: Username or email to get information ############################# diff --git a/locales/en.json b/locales/en.json index ca81725f7..384d2c66b 100644 --- a/locales/en.json +++ b/locales/en.json @@ -134,6 +134,16 @@ "user_deleted" : "User successfully deleted", "user_update_failed" : "Unable to update user", "user_updated" : "User successfully updated", - "user_info_failed" : "Unable to retrieve user information" + "user_info_failed" : "Unable to retrieve user information", + + "admin_password" : "Administration password", + "ask_firstname" : "First name", + "ask_lastname" : "Last name", + "ask_email" : "Email address", + "ask_password" : "Password", + "pattern_username" : "Must be alphanumeric and underscore characters only", + "pattern_firstname" : "Must be a valid first name", + "pattern_lastname" : "Must be a valid last name", + "pattern_email" : "Must be a valid email address (e.g. someone@domain.org)" } diff --git a/locales/fr.json b/locales/fr.json index 756430826..e49a6ae1c 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -134,6 +134,16 @@ "user_deleted" : "Utilisateur supprimé avec succès", "user_update_failed" : "Impossible de modifier l'utilisateur", "user_updated" : "Utilisateur modifié avec succès", - "user_info_failed" : "Impossible de récupérer les informations de l'utilisateur" + "user_info_failed" : "Impossible de récupérer les informations de l'utilisateur", + + "admin_password" : "Mot de passe d'administration", + "ask_firstname" : "Prénom", + "ask_lastname" : "Nom", + "ask_email" : "Adresse mail", + "ask_password" : "Mot de passe", + "pattern_username" : "Doit être composé uniquement de caractères alphanumérique et de tiret bas", + "pattern_firstname" : "Doit être un prénom valide", + "pattern_lastname" : "Doit être un nom valide", + "pattern_email" : "Doit être une adresse mail valide (ex. : someone@domain.org)" } diff --git a/user.py b/user.py index 9e2946343..67c81b03c 100644 --- a/user.py +++ b/user.py @@ -186,38 +186,30 @@ def user_create(auth, username, firstname, lastname, mail, password): raise MoulinetteError(169, m18n.n('user_creation_failed')) -def user_delete(auth, users, purge=False): +def user_delete(auth, username, purge=False): """ Delete user Keyword argument: - users -- Username of users to delete + username -- Username to delete purge """ from yunohost.app import app_ssowatconf - if not isinstance(users, list): - users = [ users ] - deleted = [] - - for user in users: - if auth.remove('uid=%s,ou=users' % user): - # Update SFTP user group - memberlist = auth.search(filter='cn=sftpusers', attrs=['memberUid'])[0]['memberUid'] - try: memberlist.remove(user) - except: pass - if auth.update('cn=sftpusers,ou=groups', { 'memberUid': memberlist }): - if purge: - os.system('rm -rf /home/%s' % user) - deleted.append(user) - continue - else: - raise MoulinetteError(169, m18n.n('user_deletion_failed')) + if auth.remove('uid=%s,ou=users' % username): + # Update SFTP user group + memberlist = auth.search(filter='cn=sftpusers', attrs=['memberUid'])[0]['memberUid'] + try: memberlist.remove(username) + except: pass + if auth.update('cn=sftpusers,ou=groups', { 'memberUid': memberlist }): + if purge: + os.system('rm -rf /home/%s' % username) + else: + raise MoulinetteError(169, m18n.n('user_deletion_failed')) app_ssowatconf(auth) msignals.display(m18n.n('user_deleted'), 'success') - return { 'users': deleted } def user_update(auth, username, firstname=None, lastname=None, mail=None, change_password=None, add_mailforward=None, remove_mailforward=None, add_mailalias=None, remove_mailalias=None):