[mod] outputs

This commit is contained in:
roydfalk 2024-08-21 15:18:40 +02:00
parent 587552f9a5
commit b1d3b91638
3 changed files with 258 additions and 38 deletions

View file

@ -79,6 +79,7 @@ namespace _espe.conf
}
>;
server : {
host : string;
port : int;
path_base : string;
};
@ -238,6 +239,7 @@ namespace _espe.conf
],
"server": (
((node_server) => ({
"host": "::",
"port": (node_server["port"] ?? 4916),
"path_base": (node_server["path_base"] ?? ""),
})) (conf_raw["server"] ?? {})
@ -433,6 +435,7 @@ namespace _espe.conf
),
"server": (
((node_server) => ({
"host": "::",
"port": (node_server["port"] ?? 4916),
"path_base": (node_server["path_base"] ?? ""),
})) (conf_raw["server"] ?? {})
@ -628,6 +631,189 @@ namespace _espe.conf
),
"server": (
((node_server) => ({
"host": "::",
"port": (node_server["port"] ?? 4916),
"path_base": (node_server["path_base"] ?? ""),
})) (conf_raw["server"] ?? {})
),
"database": (
((node_database) => {
const kind : string = (node_database["kind"] ?? "sqlite");
const node_database_data_raw = (node_database["data"] ?? {});
switch (kind) {
case "sqlite": {
return {
"kind": kind,
"data": {
"path": (node_database_data_raw["path"] ?? "data.sqlite"),
}
};
break;
}
case "postgresql": {
return {
"kind": kind,
"data": node_database_data_raw,
};
break;
}
default: {
throw (new Error("unhandled"));
break;
}
}
}) (conf_raw["database"] ?? {})
),
"email_sending": (
((node_email_sending) => {
const kind : string = (node_email_sending["kind"] ?? "console");
const data_raw = (node_email_sending["data"] ?? {});
switch (kind) {
case "regular": {
return {
"kind": kind,
"data": {
"smtp_credentials": (data_raw["smtp_credentials"] ?? null),
"sender": data_raw["sender"],
}
};
break;
}
case "redirect": {
return {
"kind": kind,
"data": {
"smtp_credentials": (data_raw["smtp_credentials"] ?? null),
"sender": data_raw["sender"],
"target": data_raw["target"],
}
};
break;
}
case "console": {
return {
"kind": kind,
"data": {
}
};
break;
}
case "drop": {
return {
"kind": kind,
"data": {
}
};
break;
}
default: {
throw (new Error("unhandled"));
break;
}
}
}) (conf_raw["email_sending"] ?? {})
),
"session_management": (
((node_session_management) => ({
"in_memory": (node_session_management["in_memory"] ?? true),
"drop_all_at_start": (node_session_management["drop_all_at_start"] ?? true),
"lifetime": (node_session_management["lifetime"] ?? 900),
})) (conf_raw["session_management"] ?? {})
),
"settings": (
((node_settings) => ({
"organisation": {
"name": ((node_settings["organisation"] ?? {})["name"] ?? "Example Orginsation"), // TODO: mandatory?
"domain": ((node_settings["organisation"] ?? {})["domain"] ?? "example.org"), // TODO: mandatory?
},
"misc": (
((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": (
((node_settings_summon_email) => ({
"remark": (node_settings_summon_email["remark"] ?? null),
})) (node_settings["summon_email"] ?? {})
),
"password_policy": (
((node_settings_password_policy) => ({
"minimum_length": (
("minimum_length" in node_settings_password_policy)
? node_settings_password_policy["minimum_length"]
: 8
),
"maximum_length": (
("maximum_length" in node_settings_password_policy)
? node_settings_password_policy["maximum_length"]
: 240
),
"must_contain_letter": (node_settings_password_policy["must_contain_letter"] ?? true),
"must_contain_number": (node_settings_password_policy["must_contain_number"] ?? true),
"must_contain_special_character": (node_settings_password_policy["must_contain_special_character"] ?? true),
})) (node_settings["password_policy"] ?? {})
),
"password_change": (
((node_settings_password_change) => ({
"cooldown_time": (node_settings_password_change["cooldown_time"] ?? 86400),
})) (node_settings["password_change"] ?? {})
),
"name_index": (
((node_settings_password_policy) => ({
"veil": (node_settings_password_policy["veil"] ?? true),
"salt": (node_settings_password_policy["salt"] ?? ""),
})) (node_settings["name_index"] ?? {})
),
"connections": (
((node_settings_connections) => ({
"frontend_url_base": (node_settings_connections["frontend_url_base"] ?? null),
"login_url": (node_settings_connections["login_url"] ?? null),
})) (node_settings["connections"] ?? {})
),
})) (conf_raw["settings"] ?? {})
),
"admins": (conf_raw["admins"] ?? []),
"outputs": (conf_raw["outputs"] ?? []),
};
break;
}
case 4: {
_data = {
"general": (
((node_general) => ({
"language": (node_general["language"] ?? null),
"verification_secret": (node_general["verification_secret"] ?? null),
})) (conf_raw["general"] ?? {})
),
"log": (
((node_log) => node_log.map(
(node_log_entry : any) => ({
"kind": node_log_entry["kind"],
"data": Object.assign(
{
"format": "human_readable",
"threshold": "notice",
},
(node_log_entry["data"] ?? {})
)
})
)) (
conf_raw["log"]
??
[
{
"kind": "console",
"data": {
}
},
]
)
),
"server": (
((node_server) => ({
"host": (node_server["host"] ?? "::"),
"port": (node_server["port"] ?? 4916),
"path_base": (node_server["path_base"] ?? ""),
})) (conf_raw["server"] ?? {})

View file

@ -176,11 +176,14 @@ async function main(
// init
await _espe.conf.load(args["conf_path"]);
if (_espe.conf.get().general.language === null) {
// do nothing
}
else {
lib_plankton.translate.promote(_espe.conf.get().general.language);
{
const language : (null | string) = _espe.conf.get().general.language;
if (language === null) {
// do nothing
}
else {
lib_plankton.translate.promote(language);
}
}
lib_plankton.log.conf_push(
_espe.conf.get().log.map(
@ -306,6 +309,7 @@ async function main(
}
);
// outputs
_espe.service.member.listen_change(
() => {
lib_plankton.log.info(
@ -313,44 +317,62 @@ async function main(
{
}
);
_espe.conf.get().outputs.forEach(
output_description => {
const procedure : (() => Promise<void>) = (
(() => {
switch (output_description.kind) {
default: {
lib_plankton.log.warning(
"output_kind_unhandled",
{
"description": output_description,
}
);
return (() => Promise.resolve<void>(undefined));
break;
}
case "authelia_file": {
return (() => _espe.service.member.output_authelia_file(output_description.data));
break;
}
case "http": {
return (() => _espe.service.member.output_http(output_description.data));
break;
}
case "authelia_call": {
return (() => _espe.service.member.output_authelia_call(output_description.data));
break;
}
}
}) ()
);
(
procedure()
.then(
() => {
}
)
.catch(
(error) => {
lib_plankton.log.warning(
"output_procedure_failed",
{
"error": String(error),
}
);
}
)
);
}
);
}
);
// outputs
{
_espe.conf.get().outputs.forEach(
output_description => {
switch (output_description.kind) {
default: {
lib_plankton.log.warning(
"output_kind_unhandled",
{
"description": output_description,
}
);
break;
}
case "authelia_file": {
_espe.service.member.output_authelia_file(output_description.data);
break;
}
case "http": {
_espe.service.member.output_http(output_description.data);
break;
}
case "authelia_call": {
_espe.service.member.output_authelia_call(output_description.data);
break;
}
}
}
);
}
const rest_subject : lib_plankton.rest.type_rest = _espe.api.make();
const server : lib_plankton.server.type_subject = lib_plankton.server.make(
_espe.conf.get().server.port,
async (input, metadata) => {
const http_request : lib_plankton.http.type_request = lib_plankton.http.decode_request(input);
const http_request : lib_plankton.http.type_request = lib_plankton.http.decode_request(input.toString());
const http_response : lib_plankton.http.type_response = await lib_plankton.rest.call(
rest_subject,
http_request,
@ -362,6 +384,12 @@ async function main(
);
const output : string = lib_plankton.http.encode_response(http_response);
return output;
},
{
"host": _espe.conf.get().server.host,
"port": _espe.conf.get().server.port,
// DANGER! DANGER!
"threshold": 0.125,
}
);

View file

@ -967,7 +967,13 @@ namespace _espe.service.member
"headers": {
"Content-Type": "application/json",
},
"body": lib_plankton.json.encode(await _espe.service.member.export_authelia_user_data()),
// @ts-ignore
"body": Buffer.from(
lib_plankton.json.encode(
(await _espe.service.member.export_authelia_user_data())
),
"utf8"
),
};
const http_response : lib_plankton.http.type_response = await lib_plankton.http.call(
http_request