namespace _espe.conf { /** */ export type type_conf = { general : { verbosity : ( "none" | "debug" | "notice" | "info" | "warning" | "error" ); verification_secret : (null | string); }; server : { port : int; }; database : ( { kind : "sqlite"; data : { path : string; }; } | { kind : "postgresql"; data : { host : string; port ?: int; username : string; password : string; schema : string; }; } ); email_sending : { mode : ( "regular" | "redirect" | "console" | "drop" ); smtp_credentials : ( null | { host : string; port : int; username : string; password : string; } ); }; session_management : { lifetime : int; drop_all_at_start : boolean; }; settings : { target_domain : string; prefix_for_numberbased_email_addresses : string; }; // TODO: evtl. in Datenbank verlagern admins : Array< { name : string; password_image : string; } >; }; /** */ var _data : (null | type_conf) = null; /** * @todo mandatory fields */ export async function load( path : (null | string) ) : Promise { const conf_raw : any = ( (path !== null) ? (lib_plankton.json.decode(await lib_plankton.file.read(path)) as type_conf) : {} ); _data = { "general": ( ((node_general) => ({ "verbosity": (node_general["verbosity"] ?? "notice"), "verification_secret": (node_general["verification_secret"] ?? null), })) (conf_raw["general"] ?? {}) ), "server": ( ((node_server) => ({ "port": (node_server["port"] ?? 7979), })) (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"), } }; } case "postgresql": { return { "kind": kind, "data": node_database_data_raw, }; } default: { throw (new Error("unhandled")); break; } } }) (conf_raw["database"] ?? {}) ), "email_sending": ( ((node_email_sending) => ({ "mode": (node_email_sending["mode"] ?? "regular"), "smtp_credentials": (node_email_sending["smtp_credentials"] ?? null), })) (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-"), })) (conf_raw["settings"] ?? {}) ), "admins": (conf_raw["admins"] ?? []), }; // process.stderr.write(JSON.stringify(_data, undefined, "\t")); return Promise.resolve(undefined); } /** */ export function get( ) : type_conf { if (_data === null) { throw (new Error("conf not loaded yet")); } else { return _data; } } }