poll.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. 'use strict';
  2. const logger = require('../../logger');
  3. const { pollForEvents } = require('../../processes/event');
  4. const { pollForReports } = require('../../processes/report');
  5. const { serialize } = require('../../xml');
  6. exports.postController = async (req, res) => {
  7. const parsedRequest = req.xml;
  8. let xmlResponse;
  9. try {
  10. let jsonResponse;
  11. switch (parsedRequest._type) {
  12. case 'oadrPoll':
  13. jsonResponse = await pollForEvents(
  14. parsedRequest,
  15. req.clientCertificateCn,
  16. req.clientCertificateFingerprint,
  17. );
  18. if (!jsonResponse) {
  19. jsonResponse = await pollForReports(
  20. parsedRequest,
  21. req.clientCertificateCn,
  22. req.clientCertificateFingerprint,
  23. );
  24. }
  25. break;
  26. default:
  27. throw new Error(`Unknown _type: ${parsedRequest._type}`);
  28. }
  29. if (!jsonResponse) {
  30. jsonResponse = {
  31. _type: 'oadrResponse',
  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. _type: 'oadrResponse',
  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 OadrPoll', { error });
  56. next(error);
  57. };