From d3f9a88958328f7536927673bf6bdb0c4292c3e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Fra=C3=9F?= Date: Tue, 1 Apr 2025 20:54:10 +0000 Subject: [PATCH] [task-193] [int] --- misc/conf.example.json | 11 ++-- source/api/actions/invite_accept.ts | 44 ++++++++++++---- source/api/actions/invite_create.ts | 58 ++++++++++++++++----- source/api/actions/invite_examine.ts | 77 ++++++++++++++++++++++++++-- source/conf.ts | 3 +- source/services/invite.ts | 4 +- 6 files changed, 164 insertions(+), 33 deletions(-) diff --git a/misc/conf.example.json b/misc/conf.example.json index 0d14cc6..2227059 100644 --- a/misc/conf.example.json +++ b/misc/conf.example.json @@ -56,7 +56,12 @@ "login_url": null } }, - "output": { - "authelia": "/tmp/authelia-users.yml" - } + "outputs": [ + { + "kind": "authelia_file", + "data": { + "path": "/tmp/authelia-users.yml" + } + } + ] } diff --git a/source/api/actions/invite_accept.ts b/source/api/actions/invite_accept.ts index 9695aa0..af580ee 100644 --- a/source/api/actions/invite_accept.ts +++ b/source/api/actions/invite_accept.ts @@ -22,8 +22,14 @@ namespace _espe.api ) : void { register< - any, - any + { + key : string; + membership_number_value : (null | string); + name_value : string; + email_address_value : (null | string); + groups_value : Array; + }, + null >( rest_subject, lib_plankton.http.enum_method.post, @@ -47,13 +53,33 @@ namespace _espe.api }), "restriction": restriction_none, "execution": async ({"input": input}) => { - /** - * @todo - */ - return Promise.resolve({ - "status_code": 501, - "data": null - }); + if (input === null) { + return Promise.resolve({ + "status_code": 400, + "data": null + }); + } + else { + try { + await _espe.service.invite.accept( + input.key, + input.membership_number_value, + input.name_value, + input.email_address_value, + input.groups_value + ); + return Promise.resolve({ + "status_code": 200, + "data": null + }); + } + catch (error) { + return Promise.resolve({ + "status_code": 404, + "data": null + }); + } + } } } ); diff --git a/source/api/actions/invite_create.ts b/source/api/actions/invite_create.ts index db9cd5d..c58d82f 100644 --- a/source/api/actions/invite_create.ts +++ b/source/api/actions/invite_create.ts @@ -51,36 +51,62 @@ namespace _espe.api /** * @todo translation */ - "description": "erstellt eine Einladung neues Mitglied und gibt die erzeugte ID und den erzeugten Schlüssel aus", + "description": "erstellt eine Einladung und gibt die erzeugte ID und den erzeugten Schlüssel aus", "input_schema": () => ({ "type": "object", "nullable": false, "additionalProperties": false, "properties": { - /* - "membership_number": { - "type": "string", + "membership_number_mode": { + "type": "integer", "nullable": false, - "description": "Mitgliedsnummer" + "description": "Mitgliedsnummer | Modus" }, - "name_real_value": { - "type": "string", - "nullable": false, - "description": "Klarname" - }, - "email_address_private": { + "membership_number_value": { "type": "string", "nullable": true, - "description": "private E-Mail-Adresse" + "description": "Mitgliedsnummer | Wert" }, - "groups": { + "name_mode": { + "type": "integer", + "nullable": false, + "description": "Name | Modus" + }, + "name_value": { + "type": "string", + "nullable": true, + "description": "Name | Wert" + }, + "email_address_mode": { + "type": "integer", + "nullable": true, + "description": "E-Mail-Adresse | Modus" + }, + "email_address_value": { + "type": "string", + "nullable": true, + "description": "E-Mail-Adresse | Wert" + }, + "groups_integer": { + "type": "integer", + "nullable": true, + "description": "Gruppen | Modus" + }, + "groups_value": { "nullable": false, "type": "array", "items": { "type": "string", "nullable": false, - } + }, + "description": "Gruppen | Wert" }, + "expiry": { + "nullable": true, + "type": "intiger", + "description": "Ablaufzeitpunkt" + }, + /* "notification_target_url_template": { "type": "string", "nullable": true, @@ -89,9 +115,13 @@ namespace _espe.api */ }, "required": [ + "membership_number_mode", "membership_number_value", + "name_mode", "name_value", + "email_address_mode", "email_address_value", + "groups_mode", "groups_value", "expiry", ] diff --git a/source/api/actions/invite_examine.ts b/source/api/actions/invite_examine.ts index 4de355f..a91e19f 100644 --- a/source/api/actions/invite_examine.ts +++ b/source/api/actions/invite_examine.ts @@ -37,11 +37,72 @@ namespace _espe.api "type": "string", "nullable": false, }), - /** - * @todo - */ "output_schema": () => ({ - "nullable": true, + "type": "object", + "nullable": false, + "additionalProperties": false, + "properties": { + "expiry": { + "nullable": true, + "type": "intiger", + "description": "Ablaufzeitpunkt" + }, + "membership_number_mode": { + "type": "integer", + "nullable": false, + "description": "Mitgliedsnummer | Modus" + }, + "membership_number_value": { + "type": "string", + "nullable": true, + "description": "Mitgliedsnummer | Wert" + }, + "name_mode": { + "type": "integer", + "nullable": false, + "description": "Name | Modus" + }, + "name_value": { + "type": "string", + "nullable": true, + "description": "Name | Wert" + }, + "email_address_mode": { + "type": "integer", + "nullable": true, + "description": "E-Mail-Adresse | Modus" + }, + "email_address_value": { + "type": "string", + "nullable": true, + "description": "E-Mail-Adresse | Wert" + }, + "groups_integer": { + "type": "integer", + "nullable": true, + "description": "Gruppen | Modus" + }, + "groups_value": { + "nullable": false, + "type": "array", + "items": { + "type": "string", + "nullable": false, + }, + "description": "Gruppen | Wert" + }, + }, + "required": [ + "expiry", + "membership_number_mode", + "membership_number_value", + "name_mode", + "name_value", + "email_address_mode", + "email_address_value", + "groups_mode", + "groups_value", + ] }), "restriction": restriction_none, "execution": ({"input": input}) => { @@ -52,7 +113,15 @@ namespace _espe.api (invite_object) => Promise.resolve({ "status_code": 200, "data": { + "expiry": invite_object.expiry, "membership_number_mode": _espe.helpers.invite_prefill_mode_encode(invite_object.membership_number_mode), + "membership_number_value": invite_object.membership_number_value, + "name_mode": _espe.helpers.invite_prefill_mode_encode(invite_object.name_mode), + "name_value": invite_object.name_value, + "email_address_mode": _espe.helpers.invite_prefill_mode_encode(invite_object.email_address_mode), + "email_address_value": invite_object.email_address_value, + "groups_mode": _espe.helpers.invite_prefill_mode_encode(invite_object.groups_mode), + "groups_value": invite_object.groups_value, } }) ) diff --git a/source/conf.ts b/source/conf.ts index 7caf727..c6e4d24 100644 --- a/source/conf.ts +++ b/source/conf.ts @@ -454,7 +454,8 @@ namespace _espe.conf return (conf_raw["outputs"] ?? []); break; } - case 4: { + case 4: + case 5: { const node_outputs = (conf_raw["outputs"] ?? []); return node_outputs.map( (output_description : {kind : string; data : any;}) => { diff --git a/source/services/invite.ts b/source/services/invite.ts index 4552c32..625e50c 100644 --- a/source/services/invite.ts +++ b/source/services/invite.ts @@ -59,7 +59,7 @@ namespace _espe.service.invite + "/" + - lib_plankton.base.get_current_timestamp().toFixed(0) + Math.floor(lib_plankton.base.get_current_timestamp()).toFixed(0) ), "secret" ); @@ -68,7 +68,7 @@ namespace _espe.service.invite "expiry": ( ((expiry !== null) && (expiry < 0)) ? - (lib_plankton.base.get_current_timestamp() + default_lifetime) + (Math.floor(lib_plankton.base.get_current_timestamp()) + default_lifetime) : expiry ),