report.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict';
  2. const logger = require('../../logger');
  3. const { serialize } = require('../../xml');
  4. const {
  5. createdReports,
  6. registerReports,
  7. receiveReportData,
  8. } = require('../../processes/report');
  9. exports.postController = async (req, res) => {
  10. const parsedRequest = req.xml;
  11. let xmlResponse;
  12. try {
  13. let response;
  14. switch (parsedRequest._type) {
  15. case 'oadrRegisterReport':
  16. response = await registerReports(
  17. parsedRequest,
  18. req.clientCertificateCn,
  19. req.clientCertificateFingerprint,
  20. );
  21. break;
  22. case 'oadrCreatedReport':
  23. response = await createdReports(
  24. parsedRequest,
  25. req.clientCertificateCn,
  26. req.clientCertificateFingerprint,
  27. );
  28. break;
  29. case 'oadrUpdateReport':
  30. response = await receiveReportData(
  31. parsedRequest,
  32. req.clientCertificateCn,
  33. req.clientCertificateFingerprint,
  34. );
  35. break;
  36. default:
  37. throw new Error(`Unknown _type: ${parsedRequest._type}`);
  38. }
  39. xmlResponse = serialize(response);
  40. } catch (e) {
  41. logger.warn('Error occurred processing', parsedRequest || req.xml, e);
  42. const responseRequestId =
  43. parsedRequest != null ? parsedRequest.requestId : '';
  44. xmlResponse = serialize({
  45. _type: 'oadrResponse',
  46. responseCode: e.responseCode || '454',
  47. responseDescription: e.message || 'Unknown error',
  48. responseRequestId: responseRequestId || '',
  49. });
  50. }
  51. res.set('Content-Type', 'application/xml');
  52. res.send(xmlResponse);
  53. res.end();
  54. };
  55. exports.postErrorHandler = (error, next) => {
  56. logger.warn('Error in EiReport', { error });
  57. next(error);
  58. };