event.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict';
  2. const logger = require('../../logger');
  3. const { parse } = require('../../xml/event');
  4. const {
  5. serialize: serializeDistributeEvent,
  6. } = require('../../xml/event/distribute-event');
  7. const {
  8. serialize: serializeOadrResponse,
  9. } = require('../../xml/poll/oadr-response');
  10. const { retrieveEvents, updateOptType } = require('../../processes/event');
  11. exports.postController = async (req, res) => {
  12. const xmlRequest = req.body;
  13. let parsedRequest;
  14. let xmlResponse;
  15. let serialize = serializeOadrResponse;
  16. try {
  17. parsedRequest = await parse(xmlRequest);
  18. let response;
  19. switch (parsedRequest._type) {
  20. case 'oadrRequestEvent':
  21. serialize = serializeDistributeEvent;
  22. response = await retrieveEvents(
  23. parsedRequest,
  24. req.clientCertificateCn,
  25. req.clientCertificateFingerprint,
  26. );
  27. break;
  28. case 'oadrCreatedEvent':
  29. serialize = serializeOadrResponse;
  30. response = await updateOptType(
  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 || xmlRequest, e);
  42. const responseRequestId =
  43. parsedRequest != null ? parsedRequest.requestId : '';
  44. xmlResponse = serialize({
  45. responseCode: e.responseCode || '454',
  46. responseDescription: e.message || 'Unknown error',
  47. responseRequestId: responseRequestId || '',
  48. });
  49. }
  50. res.set('Content-Type', 'application/xml');
  51. res.send(xmlResponse);
  52. res.end();
  53. };
  54. exports.postErrorHandler = (error, next) => {
  55. logger.warn('Error in EiEvent', { error });
  56. next(error);
  57. };