settings.defaults.cjs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. const Path = require('node:path')
  2. // environment variables renamed for consistency
  3. // use AWS_ACCESS_KEY_ID-style going forward
  4. if (process.env.AWS_KEY && !process.env.AWS_ACCESS_KEY_ID) {
  5. process.env.AWS_ACCESS_KEY_ID = process.env.AWS_KEY
  6. }
  7. if (process.env.AWS_SECRET && !process.env.AWS_SECRET_ACCESS_KEY) {
  8. process.env.AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET
  9. }
  10. // pre-backend setting, fall back to old behaviour
  11. if (process.env.BACKEND == null) {
  12. if (process.env.AWS_ACCESS_KEY_ID || process.env.S3_BUCKET_CREDENTIALS) {
  13. process.env.BACKEND = 's3'
  14. process.env.TEMPLATE_FILES_BUCKET_NAME =
  15. process.env.AWS_S3_TEMPLATE_FILES_BUCKET_NAME
  16. } else {
  17. process.env.BACKEND = 'fs'
  18. process.env.TEMPLATE_FILES_BUCKET_NAME = Path.join(
  19. __dirname,
  20. '../template_files'
  21. )
  22. }
  23. }
  24. const settings = {
  25. internal: {
  26. filestore: {
  27. port: 3009,
  28. host: process.env.LISTEN_ADDRESS || '127.0.0.1',
  29. },
  30. },
  31. filestore: {
  32. // Which backend persistor to use.
  33. // Choices are
  34. // s3 - Amazon S3
  35. // fs - local filesystem
  36. // gcs - Google Cloud Storage
  37. backend: process.env.BACKEND,
  38. gcs: {
  39. endpoint: process.env.GCS_API_ENDPOINT
  40. ? {
  41. apiEndpoint: process.env.GCS_API_ENDPOINT,
  42. projectId: process.env.GCS_PROJECT_ID,
  43. }
  44. : undefined,
  45. unlockBeforeDelete: process.env.GCS_UNLOCK_BEFORE_DELETE === 'true', // unlock an event-based hold before deleting. default false
  46. deletedBucketSuffix: process.env.GCS_DELETED_BUCKET_SUFFIX, // if present, copy file to another bucket on delete. default null
  47. deleteConcurrency: parseInt(process.env.GCS_DELETE_CONCURRENCY) || 50,
  48. signedUrlExpiryInMs: parseInt(process.env.LINK_EXPIRY_TIMEOUT || 60000),
  49. },
  50. s3: {
  51. key: process.env.AWS_ACCESS_KEY_ID,
  52. secret: process.env.AWS_SECRET_ACCESS_KEY,
  53. endpoint: process.env.AWS_S3_ENDPOINT,
  54. pathStyle: process.env.AWS_S3_PATH_STYLE,
  55. partSize: process.env.AWS_S3_PARTSIZE || 100 * 1024 * 1024,
  56. bucketCreds: process.env.S3_BUCKET_CREDENTIALS
  57. ? JSON.parse(process.env.S3_BUCKET_CREDENTIALS)
  58. : undefined,
  59. },
  60. // GCS should be configured by the service account on the kubernetes pod. See GOOGLE_APPLICATION_CREDENTIALS,
  61. // which will be picked up automatically.
  62. stores: {
  63. template_files: process.env.TEMPLATE_FILES_BUCKET_NAME,
  64. // allow signed links to be generated for these buckets
  65. project_blobs: process.env.OVERLEAF_EDITOR_PROJECT_BLOBS_BUCKET,
  66. global_blobs: process.env.OVERLEAF_EDITOR_BLOBS_BUCKET,
  67. },
  68. fallback: process.env.FALLBACK_BACKEND
  69. ? {
  70. backend: process.env.FALLBACK_BACKEND,
  71. // mapping of bucket names on the fallback, to bucket names on the primary.
  72. // e.g. { myS3UserFilesBucketName: 'myGoogleUserFilesBucketName' }
  73. buckets: JSON.parse(process.env.FALLBACK_BUCKET_MAPPING || '{}'),
  74. copyOnMiss: process.env.COPY_ON_MISS === 'true',
  75. }
  76. : undefined,
  77. allowRedirects: process.env.ALLOW_REDIRECTS === 'true',
  78. },
  79. path: {
  80. uploadFolder: Path.join(__dirname, '../uploads'),
  81. },
  82. commands: {
  83. // Any commands to wrap the convert utility in, for example ["nice"], or ["firejail", "--profile=/etc/firejail/convert.profile"]
  84. convertCommandPrefix: [],
  85. },
  86. enableConversions: process.env.ENABLE_CONVERSIONS === 'true',
  87. converter: process.env.CONVERTER || 'imagemagick',
  88. gracefulShutdownDelayInMs:
  89. parseInt(process.env.GRACEFUL_SHUTDOWN_DELAY_SECONDS ?? '30', 10) * 1000,
  90. }
  91. module.exports = settings