public sendResponse(response: ProtocolResponse): void {
const [uuid, payload] = response;
- if (this.responseHandlers.has(uuid) === true) {
- const res = this.responseHandlers.get(uuid) as ServerResponse;
- res.writeHead(this.responseStatusToStatusCode(payload.status), {
- 'Content-Type': 'application/json',
- });
- res.end(JSON.stringify(payload));
- this.responseHandlers.delete(uuid);
- } else {
+ try {
+ if (this.responseHandlers.has(uuid) === true) {
+ const res = this.responseHandlers.get(uuid) as ServerResponse;
+ res
+ .writeHead(this.responseStatusToStatusCode(payload.status), {
+ 'Content-Type': 'application/json',
+ })
+ .end(JSON.stringify(payload));
+ } else {
+ logger.error(
+ `${this.logPrefix(moduleName, 'sendResponse')} Response for unknown request id: ${uuid}`
+ );
+ }
+ } catch (error) {
logger.error(
- `${this.logPrefix(moduleName, 'sendResponse')} Response for unknown request id: ${uuid}`
+ `${this.logPrefix(moduleName, 'sendResponse')} Error at sending response id '${uuid}':`,
+ error
);
+ } finally {
+ this.responseHandlers.delete(uuid);
}
}
}
private requestListener(req: IncomingMessage, res: ServerResponse): void {
- if (this.authenticate(req) === false) {
- res.setHeader('Content-Type', 'text/plain');
- res.setHeader('WWW-Authenticate', 'Basic realm=users');
- res.writeHead(StatusCodes.UNAUTHORIZED);
- res.end(`${StatusCodes.UNAUTHORIZED} Unauthorized`);
- return;
- }
+ this.authenticate(req, (err) => {
+ if (err) {
+ res
+ .writeHead(StatusCodes.UNAUTHORIZED, {
+ 'Content-Type': 'text/plain',
+ 'WWW-Authenticate': 'Basic realm=users',
+ })
+ .end(`${StatusCodes.UNAUTHORIZED} Unauthorized`)
+ .destroy();
+ req.destroy();
+ }
+ });
// Expected request URL pathname: /ui/:version/:procedureName
const [protocol, version, procedureName] = req.url?.split('/').slice(1) as [
Protocol,
.get(version)
.requestHandler(this.buildProtocolRequest(uuid, procedureName, body ?? {}))
.catch(() => {
- this.sendResponse(
- this.buildProtocolResponse(uuid, { status: ResponseStatus.FAILURE })
- );
+ /* Error caught by AbstractUIService */
});
});
} else {
}
}
- private authenticate(req: IncomingMessage): boolean {
- if (this.isBasicAuthEnabled() === true) {
- if (this.isValidBasicAuth(req) === true) {
- return true;
- }
- return false;
- }
- return true;
- }
-
private responseStatusToStatusCode(status: ResponseStatus): StatusCodes {
switch (status) {
case ResponseStatus.SUCCESS: