poll.js 1.6 KB

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