api_systemdController.ts 1.2 KB

123456789101112131415161718192021222324252627282930
  1. import {
  2. Controller,
  3. Get,
  4. Header,
  5. Request,
  6. Route
  7. } from "tsoa";
  8. import systemdService from "../services/systemdService";
  9. import ConfigurationManager from "../config";
  10. import {ServiceDescription} from "../models/service";
  11. import slavery from "../slavery";
  12. import {UnauthorizedMasterApiKey} from "../models/unauthorizedApi";
  13. import { SecurityRequirement } from "./htmlControllers";
  14. import express from "express";
  15. @Route("/api/services")
  16. export class SystemdServiceController extends Controller {
  17. @Get("/list")
  18. public async getAllServices(@Request() req: express.Request, @Header() apiKeySignature: string|undefined): Promise<ServiceDescription> {
  19. if (ConfigurationManager.masterPubKey && !slavery.checkMasterKey(apiKeySignature))
  20. throw new UnauthorizedMasterApiKey();
  21. else if (!ConfigurationManager.slave)
  22. SecurityRequirement.requireLoggedUser(req);
  23. let result: ServiceDescription = { services: {}};
  24. result.services[ConfigurationManager.hostname] = (await systemdService.getAllServices());
  25. await slavery.getSlaveData(result.services, "services", "/api/services/list");
  26. return result;
  27. }
  28. }