@mdf.js/openc2-core
Version:
MMS - API Core - OpenC2
119 lines • 5.06 kB
JavaScript
;
/**
* 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