event.js 1.7 KB

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