[mod] session management:Datenbank anbinden

This commit is contained in:
roydfalk 2024-04-26 11:02:52 +02:00
parent 208aa12fd9
commit 46ee340e17
2 changed files with 153 additions and 136 deletions

View file

@ -83,8 +83,9 @@ namespace _espe.conf
} }
); );
session_management : { session_management : {
lifetime : int; in_memory : boolean;
drop_all_at_start : boolean; drop_all_at_start : boolean;
lifetime : int;
}; };
settings : { settings : {
target_domain : string; target_domain : string;
@ -114,123 +115,137 @@ namespace _espe.conf
* @todo mandatory fields * @todo mandatory fields
*/ */
export async function load( export async function load(
path : (null | string) path : string
) : Promise<void> ) : Promise<void>
{ {
const conf_raw : any = ( let conf_raw : any;
(path !== null) if (! (await lib_plankton.file.exists(path))) {
? (lib_plankton.json.decode(await lib_plankton.file.read(path)) as type_conf) // return Promise.reject<void>(new Error("configuration file not found: " + path + "; using fallback"));
: {} conf_raw = {};
); }
_data = { else {
"general": ( try {
((node_general) => ({ conf_raw = lib_plankton.json.decode(await lib_plankton.file.read(path));
"verbosity": (node_general["verbosity"] ?? "notice"), }
"verification_secret": (node_general["verification_secret"] ?? null), catch (error) {
})) (conf_raw["general"] ?? {}) conf_raw = null;
), }
"server": ( }
((node_server) => ({ if (conf_raw === null) {
"port": (node_server["port"] ?? 7979), return Promise.reject<void>("configuration file could not be read");
})) (conf_raw["server"] ?? {}) }
), else {
"database": ( _data = {
((node_database) => { "general": (
const kind : string = (node_database["kind"] ?? "sqlite"); ((node_general) => ({
const node_database_data_raw = (node_database["data"] ?? {}); "verbosity": (node_general["verbosity"] ?? "notice"),
switch (kind) { "verification_secret": (node_general["verification_secret"] ?? null),
case "sqlite": { })) (conf_raw["general"] ?? {})
return { ),
"kind": kind, "server": (
"data": { ((node_server) => ({
"path": (node_database_data_raw["path"] ?? "data.sqlite"), "port": (node_server["port"] ?? 7979),
} })) (conf_raw["server"] ?? {})
}; ),
break; "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;
}
} }
case "postgresql": { }) (conf_raw["database"] ?? {})
return { ),
"kind": kind, "email_sending": (
"data": node_database_data_raw, ((node_email_sending) => {
}; const kind : string = (node_email_sending["kind"] ?? "regular");
break; 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;
}
} }
default: { }) (conf_raw["email_sending"] ?? {})
throw (new Error("unhandled")); ),
break; "session_management": (
} ((node_session_management) => ({
} "in_memory": (node_session_management["in_memory"] ?? true),
}) (conf_raw["database"] ?? {}) "drop_all_at_start": (node_session_management["drop_all_at_start"] ?? true),
), "lifetime": (node_session_management["lifetime"] ?? 900),
"email_sending": ( })) (conf_raw["session_management"] ?? {})
((node_email_sending) => { ),
const kind : string = (node_email_sending["kind"] ?? "regular"); "settings": (
const data_raw = (node_email_sending["data"] ?? {}); ((node_settings) => ({
switch (kind) { "target_domain": (node_settings["target_domain"] ?? "example.org"),
case "regular": { "prefix_for_numberbased_email_addresses": (node_settings["prefix_for_numberbased_email_addresses"] ?? "member-"),
return { "registration_email": {
"kind": kind, "subject": ((node_settings["registration_email"] ?? {})["subject"] ?? "Registration"),
"data": { "body": ((node_settings["registration_email"] ?? {})["body"] ?? "URL: {{url}}"),
"smtp_credentials": (data_raw["smtp_credentials"] ?? null), },
"sender": data_raw["sender"], })) (conf_raw["settings"] ?? {})
} ),
}; "admins": (conf_raw["admins"] ?? []),
break; };
} // process.stderr.write(JSON.stringify(_data, undefined, "\t"));
case "redirect": { return Promise.resolve<void>(undefined);
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) => ({
"lifetime": (node_session_management["lifetime"] ?? 900),
"drop_all_at_start": (node_session_management["drop_all_at_start"] ?? true),
})) (conf_raw["session_management"] ?? {})
),
"settings": (
((node_settings) => ({
"target_domain": (node_settings["target_domain"] ?? "example.org"),
"prefix_for_numberbased_email_addresses": (node_settings["prefix_for_numberbased_email_addresses"] ?? "member-"),
"registration_email": {
"subject": ((node_settings["registration_email"] ?? {})["subject"] ?? "Registration"),
"body": ((node_settings["registration_email"] ?? {})["body"] ?? "URL: {{url}}"),
},
})) (conf_raw["settings"] ?? {})
),
"admins": (conf_raw["admins"] ?? []),
};
// process.stderr.write(JSON.stringify(_data, undefined, "\t"));
return Promise.resolve<void>(undefined);
} }

View file

@ -79,7 +79,7 @@ async function main(
"indicators_short": ["c"], "indicators_short": ["c"],
"type": lib_plankton.args.enum_type.string, "type": lib_plankton.args.enum_type.string,
"mode": lib_plankton.args.enum_mode.replace, "mode": lib_plankton.args.enum_mode.replace,
"default": null, "default": "conf.json",
"info": "Pfad zur Konfigurations-Datei", "info": "Pfad zur Konfigurations-Datei",
"name": "conf-path", "name": "conf-path",
}), }),
@ -175,28 +175,30 @@ async function main(
await lib_plankton.session.setup( await lib_plankton.session.setup(
{ {
/* "data_chest": (
"data_chest": lib_plankton.call.convey( _espe.conf.get().session_management.in_memory
lib_plankton.storage.sql_table_common.chest( ? lib_plankton.storage.memory.implementation_chest<lib_plankton.session.type_session>({})
{ : lib_plankton.call.convey(
"database_implementation": _espe.helpers.database_implementation(), lib_plankton.storage.sql_table_common.chest(
"table_name": "session_management", {
"key_names": ["key"], "database_implementation": _espe.helpers.database_implementation(),
} "table_name": "sessions",
), "key_names": ["key"],
[ }
(core) => ({ ),
"setup": (input) => core.setup(undefined), [
"clear": () => core.clear(), (core) => ({
"write": (key, value) => core.write([key], value), "setup": (input) => core.setup(undefined),
"delete": (key) => core.delete([key]), "clear": () => core.clear(),
"read": (key) => core.read([key]), "write": (key, value) => core.write([key], {"data": JSON.stringify(value)}),
// "search": (term) => core.search(term).then(() => []), "delete": (key) => core.delete([key]),
"search": (term) => Promise.reject(new Error("not implemented")), "read": (key) => core.read([key]).then(row => JSON.parse(row["data"])),
}), // "search": (term) => core.search(term).then(() => []),
] "search": (term) => Promise.reject(new Error("not implemented")),
}),
]
)
), ),
*/
"default_lifetime": _espe.conf.get().session_management.lifetime, "default_lifetime": _espe.conf.get().session_management.lifetime,
} }
); );