[mod] oidc

This commit is contained in:
Fenris Wolf 2024-09-19 13:34:24 +02:00
parent 2738299c1b
commit 57f359e594
4 changed files with 132 additions and 66 deletions

View file

@ -1,3 +1,9 @@
{
"version": 1
"version": 1,
"backend": {
"scheme": "https",
"host": "zeitbild.linke.sx",
"port": 443,
"path": ""
}
}

View file

@ -138,6 +138,32 @@ namespace _zeitbild.frontend_web.backend
}
/**
*/
export async function session_prepare(
) : Promise<{kind : string; data : any;}>
{
return call(
lib_plankton.http.enum_method.get,
"/session/prepare",
{
}
);
}
/**
*/
export function set_session_key(
session_key : string
) : Promise<void>
{
return (
_data_chest.write("session_key", session_key)
.then<void>(() => Promise.resolve<void>(undefined))
);
}
/**
*/
export async function session_begin(

View file

@ -19,74 +19,106 @@ namespace _zeitbild.frontend_web
{
"pool": {
"login": async (parameters, target_element) => {
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"login",
{
"form": "",
}
const preparation : {kind : string; data : any;} = await _zeitbild.frontend_web.backend.session_prepare(
);
const form : lib_plankton.zoo_form.class_form<
{name : string; password : string;},
{name : string; password : string;}
> = new lib_plankton.zoo_form.class_form<
{name : string; password : string;},
{name : string; password : string;}
>(
x => x,
x => x,
new lib_plankton.zoo_input.class_input_group<
{name : string; password : string;}
>(
[
switch (preparation.kind) {
case "internal": {
target_element.innerHTML = await _zeitbild.frontend_web.helpers.template_coin(
"login",
{
"name": "name",
"input": new lib_plankton.zoo_input.class_input_text(),
"label": "Name", // TODO: translate
},
{
"name": "password",
"input": new lib_plankton.zoo_input.class_input_password(),
"label": "Kennwort", // TODO: translate
},
]
),
[
{
"label": "Anmelden", // TODO: translate
"target": "submit",
"procedure": async (get_value, get_representation) => {
const value : any = await get_value();
try {
await _zeitbild.frontend_web.backend.session_begin(
value.name,
value.password
);
lib_plankton.zoo_page.set(
{
"name": "events",
"parameters": {}
}
);
}
catch (error) {
lib_plankton.zoo_page.set(
{
"name": "login",
"parameters": {
"name": value.name,
}
}
);
}
"form": "",
}
},
]
);
await form.setup(document.querySelector("#login"));
await form.input_write(
);
const form : lib_plankton.zoo_form.class_form<
{name : string; password : string;},
{name : string; password : string;}
> = new lib_plankton.zoo_form.class_form<
{name : string; password : string;},
{name : string; password : string;}
>(
x => x,
x => x,
new lib_plankton.zoo_input.class_input_group<
{name : string; password : string;}
>(
[
{
"name": "name",
"input": new lib_plankton.zoo_input.class_input_text(),
"label": "Name", // TODO: translate
},
{
"name": "password",
"input": new lib_plankton.zoo_input.class_input_password(),
"label": "Kennwort", // TODO: translate
},
]
),
[
{
"label": "Anmelden", // TODO: translate
"target": "submit",
"procedure": async (get_value, get_representation) => {
const value : any = await get_value();
try {
await _zeitbild.frontend_web.backend.session_begin(
value.name,
value.password
);
lib_plankton.zoo_page.set(
{
"name": "events",
"parameters": {}
}
);
}
catch (error) {
lib_plankton.zoo_page.set(
{
"name": "login",
"parameters": {
"name": value.name,
}
}
);
}
}
},
]
);
await form.setup(document.querySelector("#login"));
await form.input_write(
{
"name": (parameters.name ?? ""),
"password": "",
}
);
break;
}
case "oidc": {
let element_a : HTMLElement = document.createElement("a");;
element_a.textContent = lib_plankton.string.coin(
"via {{label}}", // TODO: translate
{
"label": preparation.data.label,
}
);
element_a.setAttribute("href", preparation.data.url);
target_element.innerHTML = "";
target_element.appendChild(element_a);
break;
}
default: {
break;
}
}
},
"oidc_finish": async (parameters, target_element) => {
await _zeitbild.frontend_web.backend.set_session_key(parameters["session_key"]);
lib_plankton.zoo_page.set(
{
"name": (parameters.name ?? ""),
"password": "",
"name": "events",
"parameters": {}
}
);
},
@ -105,10 +137,12 @@ namespace _zeitbild.frontend_web
const content = await _zeitbild.frontend_web.view.calendar_view_table_html(
{
"calendar_ids": null,
// TODO
"from": {
"year": 2024,
"week": 37
},
// TODO
"to": {
"year": 2024,
"week": 43

View file

@ -18,7 +18,7 @@ nav > ul {
nav > ul > li {
display: inline-block;
margin: 16px;
margin: 8px;
padding: 8px;
}