diff --git a/build-images.sh b/build-images.sh index 57b6be49..473ab5fd 100644 --- a/build-images.sh +++ b/build-images.sh @@ -70,7 +70,10 @@ if ! buildah containers --format "{{.ContainerName}}" | grep -q nodebuilder-samb fi echo "Downloading user manager ${user_manager_version} UI..." -curl -f -O -L https://github.com/NethServer/ns8-user-manager/releases/download/${user_manager_version}/ns8-user-manager-${user_manager_version}.tar.gz +user_manager_version=mail_notify #FIXME +#curl -f -L -O https://github.com/NethServer/ns8-user-manager/releases/download/${user_manager_version}/ns8-user-manager-${user_manager_version}.tar.gz +curl -f -L -o ns8-user-manager-${user_manager_version}.tar.gz https://github.com/NethServer/ns8-user-manager/archive/refs/heads/mail_notify.tar.gz +#curl -f -O -L https://github.com/NethServer/ns8-user-manager/releases/download/${user_manager_version}/ns8-user-manager-${user_manager_version}.tar.gz echo "Build static UI files with node..." buildah run \ diff --git a/imageroot/api-moduled/handlers/add-user/post b/imageroot/api-moduled/handlers/add-user/post index 989c39d8..0f0a2900 100755 --- a/imageroot/api-moduled/handlers/add-user/post +++ b/imageroot/api-moduled/handlers/add-user/post @@ -29,6 +29,7 @@ groups = request.get('groups', []) password = request.get('password', '') display_name = request.get('display_name', '') locked = request.get('locked', False) +mail = request.get('mail', '') sambatool_cmd = ['podman', 'exec', '-i', 'samba-dc', 'samba-tool'] adduser_cmd = sambatool_cmd + ['user', 'create', user] @@ -55,4 +56,14 @@ if display_name: 'pdbedit', '-u', user, f'--fullname={display_name}'] subprocess.run(setname_cmd, stdout=sys.stderr, check=True, text=True) +if mail: + # retrieve the user's DN, example: + # dn: CN=Administrator,CN=Users,DC=ad,DC=leader,DC=cluster0,DC=gs,DC=nethserver,DC=net + getdn_cmd = sambatool_cmd + ['user', 'show', user, '--attributes=dn'] + proc = subprocess.run(getdn_cmd, check=True, capture_output=True, text=True) + dn = proc.stdout.strip() + ldbedit_cmd = ['podman', 'exec', '-i', 'samba-dc', 'ldbmodify', '-i', '-H', '/var/lib/samba/private/sam.ldb'] + ldbedit_input = f'{dn}\nchangetype: modify\nreplace: mail\nmail: {mail}\n' + subprocess.run(ldbedit_cmd, input=ldbedit_input, stdout=sys.stderr, check=True, text=True) + json.dump({"status": "success", "message": "user_created"}, fp=sys.stdout) diff --git a/imageroot/api-moduled/handlers/add-user/validate-input.json b/imageroot/api-moduled/handlers/add-user/validate-input.json index 925545d5..fd896ee1 100644 --- a/imageroot/api-moduled/handlers/add-user/validate-input.json +++ b/imageroot/api-moduled/handlers/add-user/validate-input.json @@ -12,7 +12,8 @@ "locked": false, "groups": [ "developers" - ] + ], + "mail": "alice@nethserver.org" } ], "required": [ @@ -51,6 +52,11 @@ "type": "string", "minLength": 1 } + }, + "mail": { + "title": "Email address", + "type": "string", + "format": "email" } }, "$defs": {} diff --git a/imageroot/api-moduled/handlers/alter-user/post b/imageroot/api-moduled/handlers/alter-user/post index 89b690f4..004d0f50 100755 --- a/imageroot/api-moduled/handlers/alter-user/post +++ b/imageroot/api-moduled/handlers/alter-user/post @@ -58,4 +58,15 @@ if 'display_name' in request: 'pdbedit', '-u', user, f'--fullname={display_name}'] subprocess.run(setname_cmd, stdout=sys.stderr, check=True, text=True) +if 'mail' in request: + mail = request['mail'] + # retrieve the user's DN, example: + # dn: CN=Administrator,CN=Users,DC=ad,DC=leader,DC=cluster0,DC=gs,DC=nethserver,DC=net + getdn_cmd = sambatool_cmd + ['user', 'show', user, '--attributes=dn'] + proc = subprocess.run(getdn_cmd, check=True, capture_output=True, text=True) + dn = proc.stdout.strip() + ldbedit_cmd = ['podman', 'exec', '-i', 'samba-dc', 'ldbmodify', '-i', '-H', '/var/lib/samba/private/sam.ldb'] + ldbedit_input = f'{dn}\nchangetype: modify\nreplace: mail\nmail: {mail}\n' + subprocess.run(ldbedit_cmd, input=ldbedit_input, stdout=sys.stderr, check=True, text=True) + json.dump({"status": "success", "message": "user_altered"}, fp=sys.stdout) diff --git a/imageroot/api-moduled/handlers/alter-user/validate-input.json b/imageroot/api-moduled/handlers/alter-user/validate-input.json index 1f5d62b6..80df6dc5 100644 --- a/imageroot/api-moduled/handlers/alter-user/validate-input.json +++ b/imageroot/api-moduled/handlers/alter-user/validate-input.json @@ -12,7 +12,8 @@ "locked": false, "groups": [ "developers","managers" - ] + ], + "mail": "alice@nethserver.org" } ], "required": [ @@ -51,6 +52,11 @@ "uniqueItems": true, "minLength": 1 } + }, + "mail": { + "title": "Email address", + "type": "string", + "format": "email" } }, "$defs": {} diff --git a/imageroot/api-moduled/handlers/list-users/post b/imageroot/api-moduled/handlers/list-users/post index c7a4ce64..a74cdfa6 100755 --- a/imageroot/api-moduled/handlers/list-users/post +++ b/imageroot/api-moduled/handlers/list-users/post @@ -16,8 +16,8 @@ request = json.load(sys.stdin) domain = Ldapproxy().get_domain(os.environ['REALM'].lower()) -users = Ldapclient.factory(**domain).list_users() +users = Ldapclient.factory(**domain).list_users(extra_info=True) users = sorted(users, key=lambda rec: rec['user']) -json.dump({"status": "success", "message": "users_listed", "users": users}, fp=sys.stdout) \ No newline at end of file +json.dump({"status": "success", "message": "users_listed", "users": users}, fp=sys.stdout)