[mod] member management: auto_register option

This commit is contained in:
roydfalk 2024-06-20 16:32:59 +02:00
parent 3884b8ef40
commit fd57411a9d
5 changed files with 76 additions and 36 deletions

View file

@ -105,6 +105,21 @@ namespace _espe.api
), ),
} }
); );
if (! _espe.conf.get().settings.misc.auto_register) {
// do nothing
}
else {
// TODO: Werte in Konfiguration auslagern
await _espe.service.member.register(
member_id,
{
"email_use_veiled_address": false,
"email_use_nominal_address": false,
"email_redirect_to_private_address": false,
"password": null,
}
);
}
return Promise.resolve({ return Promise.resolve({
"status_code": 201, "status_code": 201,
"data": member_id "data": member_id

View file

@ -22,8 +22,6 @@ namespace _espe.conf
general : { general : {
language : (null | string); language : (null | string);
verbosity : ( verbosity : (
"none"
|
"debug" "debug"
| |
"notice" "notice"
@ -33,6 +31,8 @@ namespace _espe.conf
"warning" "warning"
| |
"error" "error"
|
"none"
); );
verification_secret : (null | string); verification_secret : (null | string);
}; };
@ -102,6 +102,7 @@ namespace _espe.conf
misc : { misc : {
prefix_for_veiled_email_addresses : string; prefix_for_veiled_email_addresses : string;
facultative_membership_number : boolean; facultative_membership_number : boolean;
auto_register : boolean;
}; };
summon_email : { summon_email : {
remark : string; remark : string;
@ -258,6 +259,7 @@ namespace _espe.conf
((node_settings_misc) => ({ ((node_settings_misc) => ({
"prefix_for_veiled_email_addresses": (node_settings_misc["prefix_for_veiled_email_addresses"] ?? "member-"), "prefix_for_veiled_email_addresses": (node_settings_misc["prefix_for_veiled_email_addresses"] ?? "member-"),
"facultative_membership_number": (node_settings_misc["facultative_membership_number"] ?? false), "facultative_membership_number": (node_settings_misc["facultative_membership_number"] ?? false),
"auto_register": (node_settings_misc["auto_register"] ?? false),
})) (node_settings["misc"] ?? {}) })) (node_settings["misc"] ?? {})
), ),
"summon_email": ( "summon_email": (

View file

@ -8,7 +8,8 @@
"email.registration.subject": "Registrierung erfolgt", "email.registration.subject": "Registrierung erfolgt",
"email.registration.body": "Das Mitglied '{{name_display}}' hat sich soeben registriert:\n\n{{url}}", "email.registration.body": "Das Mitglied '{{name_display}}' hat sich soeben registriert:\n\n{{url}}",
"email.activation.subject": "Freischaltung erfolgt", "email.activation.subject": "Freischaltung erfolgt",
"email.activation.body": "Hi, {{name_display}}\n\nDein Mitglieder-Konto wurde gerade freigeschalten. Du kannst dich nun anmelden:\n\nURL: {{url}}\nAnmelde-Name: {{name_login}}", "email.activation.body": "Hi, {{name_display}}\n\nDein Mitglieder-Konto wurde gerade freigeschalten. Du kannst dich nun anmelden:\n\nURL: {{url}}\nAnmelde-Name: {{name_login}}\n{{password_info}}",
"email.activation.password_info": "Passwort: {{password}}\n\nBitte ändere dein Passwort zeitnah!",
"email.password_change.initialization.subject": "Passwort-Änderung eingeleitet", "email.password_change.initialization.subject": "Passwort-Änderung eingeleitet",
"email.password_change.initialization.body": "Hi, {{name}}\n\nDie Funktion zum Ändern deines Passwortes wurde aufgerufen. Wenn du dein Passwort ändern willst, rufe folgenden Link auf:\n\n{{url}}\n", "email.password_change.initialization.body": "Hi, {{name}}\n\nDie Funktion zum Ändern deines Passwortes wurde aufgerufen. Wenn du dein Passwort ändern willst, rufe folgenden Link auf:\n\n{{url}}\n",
"email.password_change.execution.subject": "Passwort-Änderung abgeschlossen", "email.password_change.execution.subject": "Passwort-Änderung abgeschlossen",

View file

@ -8,7 +8,8 @@
"email.registration.subject": "Registration received", "email.registration.subject": "Registration received",
"email.registration.body": "The member '{{name_display}}' just registered:\n\n{{url}}", "email.registration.body": "The member '{{name_display}}' just registered:\n\n{{url}}",
"email.activation.subject": "Activated", "email.activation.subject": "Activated",
"email.activation.body": "Hi, {{name_display}}\n\nYour account has just been activated. You may login now:\n\nURL: {{url}}\nLogin name: {{name_login}}", "email.activation.body": "Hi, {{name_display}}\n\nYour account has just been activated. You may login now:\n\nURL: {{url}}\nLogin name: {{name_login}}\n{{password_info}}",
"email.activation.password_info": "Password: {{password}}\n\Please change your password soon!",
"email.password_change.initialization.subject": "Password change initialized", "email.password_change.initialization.subject": "Password change initialized",
"email.password_change.initialization.body": "Hi, {{name}}\n\nThe function for changing your password has been triggered. If you want to change your password, open the folloling link:\n\n{{url}}", "email.password_change.initialization.body": "Hi, {{name}}\n\nThe function for changing your password has been triggered. If you want to change your password, open the folloling link:\n\n{{url}}",
"email.password_change.execution.subject": "Password change concluded", "email.password_change.execution.subject": "Password change concluded",

View file

@ -191,9 +191,18 @@ namespace _espe.service.member
/** /**
*/ */
async function send_activation_email( async function send_activation_email(
member_object : _espe.type.member_object member_object : _espe.type.member_object,
options : {
password ?: (null | string);
} = {}
) : Promise<void> ) : Promise<void>
{ {
options = Object.assign(
{
"password": null,
},
options
);
if (! member_object.enabled) { if (! member_object.enabled) {
// do nothing // do nothing
} }
@ -219,6 +228,20 @@ namespace _espe.service.member
"name_display": name_display(member_object), "name_display": name_display(member_object),
"name_login": name_login(member_object), "name_login": name_login(member_object),
"url": (_espe.conf.get().settings.connections.login_url ?? "--"), "url": (_espe.conf.get().settings.connections.login_url ?? "--"),
"password_info": (
(
(options.password === undefined)
||
(options.password === null)
)
? ""
: lib_plankton.string.coin(
lib_plankton.translate.get("email.activation.body"),
{
"password": options.password,
}
)
),
} }
) )
); );
@ -424,28 +447,31 @@ namespace _espe.service.member
); );
const member_object : _espe.type.member_object = await get(member_id); const member_object : _espe.type.member_object = await get(member_id);
let flaws : Array<{incident : string; details : Record<string, any>;}> = []; let flaws : Array<{incident : string; details : Record<string, any>;}> = [];
const password_set : boolean = ( let password_value : string;
(data.password !== null) let password_generated : boolean;
&&
(data.password !== "")
);
if (member_object.registered) { if (member_object.registered) {
flaws.push({"incident": "already_registered", "details": {}}); flaws.push({"incident": "already_registered", "details": {}});
password_value = "";
password_generated = false;
} }
else { else {
if ( if (
password_set
&&
(data.password !== null) (data.password !== null)
&&
(data.password !== "")
) { ) {
flaws = flaws.concat( flaws = flaws.concat(
validate_password(data.password) validate_password(data.password)
.map(flaw => ({"incident": ("password_" + flaw.incident), "details": flaw.details})) .map(flaw => ({"incident": ("password_" + flaw.incident), "details": flaw.details}))
); );
password_value = data.password;
password_generated = false;
} }
else { else {
// do nothing password_value = generate_password();
password_generated = true;
} }
} }
@ -456,7 +482,7 @@ namespace _espe.service.member
member_object.email_use_veiled_address = data.email_use_veiled_address; member_object.email_use_veiled_address = data.email_use_veiled_address;
member_object.email_use_nominal_address = data.email_use_nominal_address; member_object.email_use_nominal_address = data.email_use_nominal_address;
member_object.email_redirect_to_private_address = data.email_redirect_to_private_address; member_object.email_redirect_to_private_address = data.email_redirect_to_private_address;
member_object.password_image = await password_image(data.password); member_object.password_image = await password_image(password_value);
member_object.registered = true; member_object.registered = true;
await _espe.repository.member.update(member_id, member_object); await _espe.repository.member.update(member_id, member_object);
signal_change(); signal_change();
@ -475,29 +501,24 @@ namespace _espe.service.member
} }
) )
); );
if (url === null) { /*await*/ _espe.helpers.notify_admins(
// do nothing lib_plankton.string.coin(
} "{{head}} | {{core}}",
else { {
/*await*/ _espe.helpers.notify_admins( "head": _espe.conf.get().settings.organisation.name,
lib_plankton.string.coin( "core": lib_plankton.translate.get("email.registration.subject"),
"{{head}} | {{core}}", }
{ ),
"head": _espe.conf.get().settings.organisation.name, lib_plankton.string.coin(
"core": lib_plankton.translate.get("email.registration.subject"), lib_plankton.translate.get("email.registration.body"),
} {
), "name_display": name_display(member_object),
lib_plankton.string.coin( "url": (url ?? "?"),
lib_plankton.translate.get("email.registration.body"), }
{ )
"name_display": name_display(member_object), );
"url": url,
}
)
);
}
} }
/*await*/ send_activation_email(member_object); /*await*/ send_activation_email(member_object, {"password": password_generated ? password_value : null});
} }
return Promise.resolve(flaws); return Promise.resolve(flaws);