poll.js 1.7 KB

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