PersistorFactory.js 1.5 KB

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