'use strict'; const logger = require('../../logger'); const { serialize } = require('../../xml'); const { createdReports, registerReports, receiveReportData, } = require('../../processes/report'); exports.postController = async (req, res) => { const parsedRequest = req.xml; let xmlResponse; try { let response; switch (parsedRequest._type) { case 'oadrRegisterReport': response = await registerReports( parsedRequest, req.clientCertificateCn, req.clientCertificateFingerprint, ); break; case 'oadrCreatedReport': response = await createdReports( parsedRequest, req.clientCertificateCn, req.clientCertificateFingerprint, ); break; case 'oadrUpdateReport': response = await receiveReportData( parsedRequest, req.clientCertificateCn, req.clientCertificateFingerprint, ); break; default: throw new Error(`Unknown _type: ${parsedRequest._type}`); } xmlResponse = serialize(response); } catch (e) { logger.warn('Error occurred processing', parsedRequest || req.xml, e); const responseRequestId = parsedRequest != null ? parsedRequest.requestId : ''; xmlResponse = serialize({ _type: 'oadrResponse', 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 EiReport', { error }); next(error); };