PersistorFactory.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const Logger = require('@overleaf/logger')
  2. const { SettingsError } = require('./Errors')
  3. const GcsPersistor = require('./GcsPersistor')
  4. const { S3Persistor } = require('./S3Persistor')
  5. const FSPersistor = require('./FSPersistor')
  6. const MigrationPersistor = require('./MigrationPersistor')
  7. const {
  8. PerProjectEncryptedS3Persistor,
  9. } = require('./PerProjectEncryptedS3Persistor')
  10. function getPersistor(backend, settings) {
  11. switch (backend) {
  12. case 'aws-sdk':
  13. case 's3':
  14. return new S3Persistor(settings.s3)
  15. case 's3SSEC':
  16. return new PerProjectEncryptedS3Persistor(settings.s3SSEC)
  17. case 'fs':
  18. return new FSPersistor({
  19. useSubdirectories: settings.useSubdirectories,
  20. paths: settings.paths,
  21. })
  22. case 'gcs':
  23. return new GcsPersistor(settings.gcs)
  24. default:
  25. throw new SettingsError('unknown backend', { backend })
  26. }
  27. }
  28. module.exports = function create(settings) {
  29. Logger.info(
  30. {
  31. backend: settings.backend,
  32. fallback: settings.fallback && settings.fallback.backend,
  33. },
  34. 'Loading backend'
  35. )
  36. if (!settings.backend) {
  37. throw new SettingsError('no backend specified - config incomplete')
  38. }
  39. let persistor = getPersistor(settings.backend, settings)
  40. if (settings.fallback && settings.fallback.backend) {
  41. const primary = persistor
  42. const fallback = getPersistor(settings.fallback.backend, settings)
  43. persistor = new MigrationPersistor(primary, fallback, settings.fallback)
  44. }
  45. return persistor
  46. }