import { Controller, Get, Header, Request, Route } from "tsoa"; import systemdService from "../services/systemdService"; import ConfigurationManager from "../config"; import {ServiceDescription} from "../models/service"; import slavery from "../slavery"; import {UnauthorizedMasterApiKey} from "../models/unauthorizedApi"; import { SecurityRequirement } from "./htmlControllers"; import express from "express"; @Route("/api/services") export class SystemdServiceController extends Controller { @Get("/list") public async getAllServices(@Request() req: express.Request, @Header() apiKeySignature: string|undefined): Promise { if (ConfigurationManager.masterPubKey && !slavery.checkMasterKey(apiKeySignature)) throw new UnauthorizedMasterApiKey(); else if (!ConfigurationManager.slave) SecurityRequirement.requireLoggedUser(req); let result: ServiceDescription = { services: {}}; result.services[ConfigurationManager.hostname] = (await systemdService.getAllServices()); await slavery.getSlaveData(result.services, "services", "/api/services/list"); return result; } }