[mod] session management:Datenbank anbinden
This commit is contained in:
parent
208aa12fd9
commit
46ee340e17
2 changed files with 153 additions and 136 deletions
243
source/conf.ts
243
source/conf.ts
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Reference in a new issue