namespace _zeitbild.api { /** */ export function register_caldav_get( rest_subject : lib_plankton.rest_caldav.type_rest ) : void { register< null, ( null | string | lib_plankton.ical.type_vcalendar ) >( rest_subject, lib_plankton.caldav.enum_method.report, "/caldav/project/:id", { "description": "trägt Veranstaltungen aus verschiedenen Kalendern zusammen im ical-Format", "query_parameters": () => ([ { "name": "from", "required": false, "description": "UNIX timestamp", }, { "name": "to", "required": false, "description": "UNIX timestamp", }, { "name": "calendar_ids", "required": false, "description": "comma separated", }, { "name": "auth", "required": true, "description": "", }, ]), "output_schema": () => ({ "nullable": false, "type": "string", }), "response_body_mimetype": "text/calendar", "response_body_encode": (output) => ( (output === null) ? null : Buffer.from( (typeof(output) === "string") ? output : lib_plankton.ical.ics_encode(output) ) ), "restriction": restriction_none, /** * @todo use stuff.path_parameters["id"] */ "execution": async (stuff) => { const user_id : (null | type_user_id) = await _zeitbild.api.web_auth( stuff.headers["Authorization"] ?? stuff.headers["authorization"] ?? null ); if (user_id === null) { return Promise.resolve( { "status_code": 401, "data": null, "extra_headers": { "WWW-Authenticate": "Basic realm=Restricted", } } ); } else { const from : lib_plankton.pit.type_pit = ( ("from" in stuff.query_parameters) ? parseInt(stuff.query_parameters["from"]) : lib_plankton.pit.shift_week( lib_plankton.pit.now(), -2 ) ); const to : lib_plankton.pit.type_pit = ( ("to" in stuff.query_parameters) ? parseInt(stuff.query_parameters["to"]) : lib_plankton.pit.shift_week( lib_plankton.pit.now(), +6 ) ); const calendar_ids_wanted : (null | Array<_zeitbild.type_calendar_id>) = ( ( ("calendar_ids" in stuff.query_parameters) && (stuff.query_parameters["calendar_ids"] !== null) ) ? lib_plankton.call.convey( stuff.query_parameters["calendar_ids"], [ (x : string) => x.split(","), (x : Array) => x.map(parseInt), (x : Array) => x.filter(y => (! isNaN(y))) ] ) : null ); return ( _zeitbild.service.calendar.gather_events( calendar_ids_wanted, from, to, user_id ) .then( (data) => Promise.resolve( { "status_code": 200, "data": _zeitbild.helpers.ical_vcalendar_from_own_event_list( data.map(entry => entry.event_object) ) } ) ) .catch( (reason) => Promise.resolve( { "status_code": 403, "data": String(reason), } ) ) ); } } } ); } }