'use strict'; const logger = require('../../logger'); const { parse } = require('../../xml/poll'); const { pollForEvents } = require('../../processes/event'); const { serialize: serializeOadrResponse, } = require('../../xml/poll/oadr-response'); const { serialize: serializeDistributeEvent, } = require('../../xml/event/distribute-event'); exports.postController = async (req, res) => { const xmlRequest = req.body; let parsedRequest, jsonResponse, xmlResponse; let serialize = serializeOadrResponse; try { parsedRequest = await parse(xmlRequest); jsonResponse = await pollForEvents( parsedRequest, req.clientCertificateCn, req.clientCertificateFingerprint, ); if (jsonResponse) { serialize = serializeDistributeEvent; } else { serialize = serializeOadrResponse; jsonResponse = { responseCode: '200', responseDescription: 'OK', responseRequestId: parsedRequest.requestId || '', venId: req.clientCertificateFingerprint, }; } xmlResponse = serialize(jsonResponse); } catch (e) { logger.warn('Error occurred processing', parsedRequest, e); const responseRequestId = parsedRequest != null ? parsedRequest.requestId : ''; xmlResponse = serialize({ responseCode: e.responseCode || '454', responseDescription: e.message || 'Unknown error', responseRequestId: responseRequestId || '', }); } res.set('Content-Type', 'application/xml'); res.send(xmlResponse); res.end(); }; exports.postErrorHandler = (error, next) => { logger.warn('Error in OadrPoll', { error }); next(error); };