frontend-dali/source/base.ts

182 lines
3 KiB
TypeScript
Raw Normal View History

2025-10-23 23:16:11 +02:00
/*
This file is part of »dali«.
Copyright 2025 'kcf' <fenris@folksprak.org>
»dali« is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
»dali« is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with »dali«. If not, see <http://www.gnu.org/licenses/>.
*/
2025-10-17 00:10:28 +02:00
namespace _dali
{
/**
*/
let _actions_login : Array<((name ?: (null | string)) => Promise<void>)> = [];
2025-10-17 00:10:28 +02:00
/**
*/
let _actions_logout : Array<(() => Promise<void>)> = [];
/**
*/
let _is_logged_in : boolean = false;
/**
*/
export function listen_login(
action : ((name ?: (null | string)) => Promise<void>)
2025-10-17 00:10:28 +02:00
)
: void
{
_actions_login.push(action);
}
/**
*/
export function listen_logout(
action : (() => Promise<void>)
)
: void
{
_actions_logout.push(action);
}
/**
*/
export async function notify_login(
name : (null | string)
2025-10-17 00:10:28 +02:00
)
: Promise<void>
{
_is_logged_in = true;
for (const action of _actions_login)
{
await action(name);
2025-10-17 00:10:28 +02:00
}
}
/**
*/
export async function notify_logout(
)
: Promise<void>
{
_is_logged_in = false;
for (const action of _actions_logout)
{
await action();
}
}
/**
*/
export function is_logged_in(
)
: boolean
{
return _is_logged_in;
}
/**
*/
export async function oidc_finish(
session_key : string
)
: Promise<void>
{
await _dali.backend.set_session_key(session_key);
const status = await _dali.backend.status();
if (! status.logged_in)
{
lib_plankton.log.error(
"dali.oidc_login_failed"
);
await _dali.notify_logout();
return Promise.reject<void>(new Error("oidc login failed"));
}
else
{
await _dali.notify_login(status.name);
return Promise.resolve<void>(undefined);
}
}
2025-10-17 00:10:28 +02:00
/**
*/
export async function logout(
)
: Promise<void>
{
try
{
await _dali.backend.session_end(
);
notify_logout();
}
catch (error)
{
lib_plankton.log.notice(
"dali.logout_failed",
{
"reason": String(error),
}
);
}
}
/**
*/
export var general_cache : lib_plankton.cache.type_subject<unknown> = lib_plankton.cache.make<unknown>(
/*
lib_plankton.storage.memory.implementation_chest(
{
}
)
*/
);
/**
*/
export async function number_of_weeks(
year : int
) : Promise<int>
{
const value_raw : unknown = await lib_plankton.cache.get<unknown>(
_dali.general_cache,
lib_plankton.string.coin(
"number_of_weeks_{{year}}",
{
"year": year.toFixed(0),
}
),
null,
() => Promise.resolve<int>(lib_plankton.pit.number_of_weeks(year))
);
return (value_raw as int);
}
2025-10-17 00:10:28 +02:00
}