FilestoreApp.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const logger = require('@overleaf/logger')
  2. const ObjectPersistor = require('@overleaf/object-persistor')
  3. const Settings = require('@overleaf/settings')
  4. const { promisify } = require('util')
  5. const App = require('../../../app')
  6. const FileHandler = require('../../../app/js/FileHandler')
  7. logger.logger.level('info')
  8. class FilestoreApp {
  9. async runServer() {
  10. if (!this.server) {
  11. await new Promise((resolve, reject) => {
  12. this.server = App.listen(
  13. Settings.internal.filestore.port,
  14. '127.0.0.1',
  15. err => {
  16. if (err) {
  17. return reject(err)
  18. }
  19. resolve()
  20. }
  21. )
  22. })
  23. }
  24. this.persistor = ObjectPersistor({
  25. ...Settings.filestore,
  26. paths: Settings.path,
  27. })
  28. FileHandler._TESTONLYSwapPersistorManager(this.persistor)
  29. }
  30. async stop() {
  31. if (!this.server) return
  32. const closeServer = promisify(this.server.close).bind(this.server)
  33. try {
  34. await closeServer()
  35. } finally {
  36. delete this.server
  37. }
  38. }
  39. }
  40. module.exports = FilestoreApp