file-uploader-switch.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const logger = require('@alias/logger')('growi:service:FileUploader');
  2. const S2sMessage = require('../models/vo/s2s-message');
  3. const S2sMessageHandlable = require('./s2s-messaging/handlable');
  4. class fileUploaderSwitch extends S2sMessageHandlable {
  5. constructor(crowi) {
  6. super();
  7. this.crowi = crowi;
  8. this.configManager = crowi.configManager;
  9. this.s2sMessagingService = crowi.s2sMessagingService;
  10. this.appService = crowi.appService;
  11. this.xssService = crowi.xssService;
  12. this.lastLoadedAt = null;
  13. }
  14. /**
  15. * @inheritdoc
  16. */
  17. shouldHandleS2sMessage(s2sMessage) {
  18. const { eventName, updatedAt } = s2sMessage;
  19. if (eventName !== 'fileUploadServiceUpdated' || updatedAt == null) {
  20. return false;
  21. }
  22. return this.lastLoadedAt == null || this.lastLoadedAt < new Date(s2sMessage.updatedAt);
  23. }
  24. /**
  25. * @inheritdoc
  26. */
  27. async handleS2sMessage(s2sMessage) {
  28. const { configManager } = this;
  29. logger.info('Reset fileupload service by pubsub notification');
  30. await configManager.loadConfigs();
  31. await this.crowi.setUpFileUpload(true);
  32. }
  33. async publishUpdatedMessage() {
  34. const { s2sMessagingService } = this;
  35. if (s2sMessagingService != null) {
  36. const s2sMessage = new S2sMessage('fileUploadServiceUpdated', { updatedAt: new Date() });
  37. try {
  38. await s2sMessagingService.publish(s2sMessage);
  39. }
  40. catch (e) {
  41. logger.error('Failed to publish update message with S2sMessagingService: ', e.message);
  42. }
  43. }
  44. }
  45. }
  46. module.exports = fileUploaderSwitch;