config.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const convict = require('convict');
  2. const { tmpdir } = require('os');
  3. const path = require('path');
  4. const { randomBytes } = require('crypto');
  5. const conf = convict({
  6. s3_bucket: {
  7. format: String,
  8. default: '',
  9. env: 'S3_BUCKET'
  10. },
  11. redis_host: {
  12. format: String,
  13. default: 'localhost',
  14. env: 'REDIS_HOST'
  15. },
  16. redis_event_expire: {
  17. format: Boolean,
  18. default: false,
  19. env: 'REDIS_EVENT_EXPIRE'
  20. },
  21. listen_address: {
  22. format: 'ipaddress',
  23. default: '0.0.0.0',
  24. env: 'IP_ADDRESS'
  25. },
  26. listen_port: {
  27. format: 'port',
  28. default: 1443,
  29. arg: 'port',
  30. env: 'PORT'
  31. },
  32. analytics_id: {
  33. format: String,
  34. default: '',
  35. env: 'GOOGLE_ANALYTICS_ID'
  36. },
  37. sentry_id: {
  38. format: String,
  39. default: '',
  40. env: 'SENTRY_CLIENT'
  41. },
  42. sentry_dsn: {
  43. format: String,
  44. default: '',
  45. env: 'SENTRY_DSN'
  46. },
  47. env: {
  48. format: ['production', 'development', 'test'],
  49. default: 'development',
  50. env: 'NODE_ENV'
  51. },
  52. max_file_size: {
  53. format: Number,
  54. default: 1024 * 1024 * 1024 * 2,
  55. env: 'MAX_FILE_SIZE'
  56. },
  57. expire_seconds: {
  58. format: Number,
  59. default: 86400,
  60. env: 'EXPIRE_SECONDS'
  61. },
  62. l10n_dev: {
  63. format: Boolean,
  64. default: false,
  65. env: 'L10N_DEV'
  66. },
  67. base_url: {
  68. format: 'url',
  69. default: 'https://send.firefox.com',
  70. env: 'BASE_URL'
  71. },
  72. file_dir: {
  73. format: 'String',
  74. default: `${tmpdir()}${path.sep}send-${randomBytes(4).toString('hex')}`,
  75. env: 'FILE_DIR'
  76. }
  77. });
  78. // Perform validation
  79. conf.validate({ allowed: 'strict' });
  80. const props = conf.getProperties();
  81. module.exports = props;