settings.defaults.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. const Path = require('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.USER_FILES_BUCKET_NAME =
  15. process.env.AWS_S3_USER_FILES_BUCKET_NAME
  16. process.env.TEMPLATE_FILES_BUCKET_NAME =
  17. process.env.AWS_S3_TEMPLATE_FILES_BUCKET_NAME
  18. process.env.PUBLIC_FILES_BUCKET_NAME =
  19. process.env.AWS_S3_PUBLIC_FILES_BUCKET_NAME
  20. } else {
  21. process.env.BACKEND = 'fs'
  22. process.env.USER_FILES_BUCKET_NAME = Path.resolve(
  23. // eslint-disable-next-line no-path-concat
  24. __dirname + '/../user_files'
  25. )
  26. process.env.TEMPLATE_FILES_BUCKET_NAME = Path.resolve(
  27. // eslint-disable-next-line no-path-concat
  28. __dirname + '/../template_files'
  29. )
  30. process.env.PUBLIC_FILES_BUCKET_NAME = Path.resolve(
  31. // eslint-disable-next-line no-path-concat
  32. __dirname + '/../public_files'
  33. )
  34. }
  35. }
  36. const settings = {
  37. internal: {
  38. filestore: {
  39. port: 3009,
  40. host: process.env.LISTEN_ADDRESS || 'localhost',
  41. },
  42. },
  43. filestore: {
  44. // Which backend persistor to use.
  45. // Choices are
  46. // s3 - Amazon S3
  47. // fs - local filesystem
  48. // gcs - Google Cloud Storage
  49. backend: process.env.BACKEND,
  50. gcs: {
  51. endpoint: process.env.GCS_API_ENDPOINT
  52. ? {
  53. apiEndpoint: process.env.GCS_API_ENDPOINT,
  54. apiScheme: process.env.GCS_API_SCHEME,
  55. projectId: process.env.GCS_PROJECT_ID,
  56. }
  57. : undefined,
  58. unlockBeforeDelete: process.env.GCS_UNLOCK_BEFORE_DELETE === 'true', // unlock an event-based hold before deleting. default false
  59. deletedBucketSuffix: process.env.GCS_DELETED_BUCKET_SUFFIX, // if present, copy file to another bucket on delete. default null
  60. deleteConcurrency: parseInt(process.env.GCS_DELETE_CONCURRENCY) || 50,
  61. signedUrlExpiryInMs: parseInt(process.env.LINK_EXPIRY_TIMEOUT || 60000),
  62. },
  63. s3:
  64. process.env.AWS_ACCESS_KEY_ID || process.env.S3_BUCKET_CREDENTIALS
  65. ? {
  66. key: process.env.AWS_ACCESS_KEY_ID,
  67. secret: process.env.AWS_SECRET_ACCESS_KEY,
  68. endpoint: process.env.AWS_S3_ENDPOINT,
  69. pathStyle: process.env.AWS_S3_PATH_STYLE,
  70. partSize: process.env.AWS_S3_PARTSIZE || 100 * 1024 * 1024,
  71. bucketCreds: process.env.S3_BUCKET_CREDENTIALS
  72. ? JSON.parse(process.env.S3_BUCKET_CREDENTIALS)
  73. : undefined,
  74. }
  75. : undefined,
  76. // GCS should be configured by the service account on the kubernetes pod. See GOOGLE_APPLICATION_CREDENTIALS,
  77. // which will be picked up automatically.
  78. stores: {
  79. user_files: process.env.USER_FILES_BUCKET_NAME,
  80. template_files: process.env.TEMPLATE_FILES_BUCKET_NAME,
  81. public_files: process.env.PUBLIC_FILES_BUCKET_NAME,
  82. },
  83. fallback: process.env.FALLBACK_BACKEND
  84. ? {
  85. backend: process.env.FALLBACK_BACKEND,
  86. // mapping of bucket names on the fallback, to bucket names on the primary.
  87. // e.g. { myS3UserFilesBucketName: 'myGoogleUserFilesBucketName' }
  88. buckets: JSON.parse(process.env.FALLBACK_BUCKET_MAPPING || '{}'),
  89. copyOnMiss: process.env.COPY_ON_MISS === 'true',
  90. }
  91. : undefined,
  92. allowRedirects: process.env.ALLOW_REDIRECTS === 'true',
  93. },
  94. path: {
  95. // eslint-disable-next-line no-path-concat
  96. uploadFolder: Path.resolve(__dirname + '/../uploads'),
  97. },
  98. commands: {
  99. // Any commands to wrap the convert utility in, for example ["nice"], or ["firejail", "--profile=/etc/firejail/convert.profile"]
  100. convertCommandPrefix: [],
  101. },
  102. enableConversions: process.env.ENABLE_CONVERSIONS === 'true',
  103. sentry: {
  104. dsn: process.env.SENTRY_DSN,
  105. },
  106. }
  107. // Filestore health check
  108. // ----------------------
  109. // Project and file details to check in persistor when calling /health_check
  110. if (process.env.HEALTH_CHECK_PROJECT_ID && process.env.HEALTH_CHECK_FILE_ID) {
  111. settings.health_check = {
  112. project_id: process.env.HEALTH_CHECK_PROJECT_ID,
  113. file_id: process.env.HEALTH_CHECK_FILE_ID,
  114. }
  115. }
  116. module.exports = settings