UNPKG

@mdf.js/openc2-core

Version:

MMS - API Core - OpenC2

119 lines 5.06 kB
"use strict"; /** * Copyright 2024 Mytra Control S.L. All rights reserved. * * Use of this source code is governed by an MIT-style license that can be found in the LICENSE file * or at https://opensource.org/licenses/MIT. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Controller = void 0; const crash_1 = require("@mdf.js/crash"); const types_1 = require("../types"); /** Controller class */ class Controller { /** * Create an instance of Controller class * @param service - service instance */ constructor(service) { this.service = service; } /** * Return array of messages, pendingJobs and jobs used as fifo registry * @param request - HTTP request express object * @param response - HTTP response express object * @param next - Next express middleware function */ query(request, response, next) { let selector; const param = request.params['id']; switch (param) { case 'jobs': selector = this.service.jobs(); break; case 'messages': selector = this.service.messages(); break; case 'pendingJobs': selector = this.service.pendingJobs(); break; default: selector = undefined; } if (!selector) { next(crash_1.BoomHelpers.badRequest(`Invalid parameter ${param}`, request.uuid)); } else { selector .then(result => { if (result.length > 0) { response.status(200).json(result); } else { response.status(204).send(); } }) .catch(next); } } /** * Execute a command over the producer or consumer * @param request - HTTP request express object * @param response - HTTP response express object * @param next - Next express middleware function * @returns - response message */ command(request, response, next) { this.service .command(request.body) .then(result => { if (Array.isArray(result)) { if (result.length > 0) { response.status(200).json(result); } else { response.status(204).send(); } } else if (result) { if (result.status === types_1.Control.StatusCode.Processing || result.status === types_1.Control.StatusCode.OK) { response.status(200).json(result); } else { throw this.OC2ResponseToHTTPResponse(result); } } else { response.status(204).send(); } }) .catch(next); } /** * Return a Boom object from a OC2 response * @param response - OC2 response * @returns - Boom object */ OC2ResponseToHTTPResponse(response) { var _a, _b, _c, _d, _e, _f, _g; switch (response.status) { case types_1.Control.StatusCode.BadRequest: return crash_1.BoomHelpers.badRequest((_a = response.content.status_text) !== null && _a !== void 0 ? _a : 'Bad OC2 Request', response.request_id, { info: response }); case types_1.Control.StatusCode.Unauthorized: return crash_1.BoomHelpers.unauthorized((_b = response.content.status_text) !== null && _b !== void 0 ? _b : 'Unauthorized OC2 Request', response.request_id, { info: response }); case types_1.Control.StatusCode.Forbidden: return crash_1.BoomHelpers.forbidden((_c = response.content.status_text) !== null && _c !== void 0 ? _c : 'Forbidden OC2 Request', response.request_id, { info: response }); case types_1.Control.StatusCode.NotFound: return crash_1.BoomHelpers.notFound((_d = response.content.status_text) !== null && _d !== void 0 ? _d : 'Not Found OC2 Request', response.request_id, { info: response }); case types_1.Control.StatusCode.NotImplemented: return crash_1.BoomHelpers.notImplemented((_e = response.content.status_text) !== null && _e !== void 0 ? _e : 'Not Implemented OC2 Request', response.request_id, { info: response }); case types_1.Control.StatusCode.ServiceUnavailable: return crash_1.BoomHelpers.serverUnavailable((_f = response.content.status_text) !== null && _f !== void 0 ? _f : 'Service Unavailable OC2 Request', response.request_id, { info: response }); default: return crash_1.BoomHelpers.internalServerError((_g = response.content.status_text) !== null && _g !== void 0 ? _g : 'Unknown OC2 response status code', response.request_id, { info: response }); } } } exports.Controller = Controller; //# sourceMappingURL=oc2.controller.js.map