/* Espe | Ein schlichtes Werkzeug zur Mitglieder-Verwaltung | Backend Copyright (C) 2024 Christian Fraß This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace _espe.api { /** */ export function register_session_begin( rest_subject : lib_plankton.rest_http.type_rest ) : void { lib_plankton.rest_http.register< { name : string; password : string; }, ( null | string ) >( rest_subject, lib_plankton.http.enum_method.post, _espe.conf.get().server.path_base + "/session/begin", { "description": () => "führt die Anmeldung am System aus um geschützte Aktionen nutzen zu können", "input_schema": () => ({ "type": "object", "properties": { "name": { "type": "string" }, "password": { "type": "string" }, }, "additionalProperties": false, "required": [ "name", "password", ] }), "output_schema": () => ({ "type": "string", "description": "der Sitzungs-Schlüssel, der als Header 'X-Session-Key' gesetzt werden muss um Erlaubnis zur Ausführung geschützter Aktionen zu erhalten", }), "restriction": () => restriction_none, "execution": () => async ({"input": input}) => { if (input === null) { return Promise.reject(new Error("impossible")); } else { const admin_entry : (null | _espe.service.admin.type_value) = await _espe.service.admin.login(input.name, input.password); if (admin_entry === null) { return Promise.resolve({ "status_code": 403, "data": null, }); } else { const session_key : string = await lib_plankton.session.begin(admin_entry.object.name); return Promise.resolve({ "status_code": 201, "data": session_key, }); } } }, } ); } }