[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({
"status_code": 201,
"data": member_id

View file

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

View file

@ -8,7 +8,8 @@
"email.registration.subject": "Registrierung erfolgt",
"email.registration.body": "Das Mitglied '{{name_display}}' hat sich soeben registriert:\n\n{{url}}",
"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.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",

View file

@ -8,7 +8,8 @@
"email.registration.subject": "Registration received",
"email.registration.body": "The member '{{name_display}}' just registered:\n\n{{url}}",
"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.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",

View file

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