-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconfig.js
More file actions
62 lines (55 loc) · 1.9 KB
/
config.js
File metadata and controls
62 lines (55 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const Joi = require('joi')
// Define config schema
const schema = Joi.object({
port: Joi.number().default(3000),
env: Joi.string().valid('dev', 'tst', 'pre', 'prd', 'tra').default('dev'),
api: Joi.string().uri().required(),
apiKey: Joi.string().required(),
adClientId: Joi.string().required(),
adClientSecret: Joi.string().required(),
adTenant: Joi.string().required(),
cookiePassword: Joi.string().required(),
isSecure: Joi.boolean().default(false),
forceHttps: Joi.boolean().default(false),
homePage: Joi.string().default('http://localhost:3000'),
localCache: Joi.boolean().default(true),
redisHost: Joi.string().allow(''),
redisPort: Joi.number().allow(''),
redisTls: Joi.boolean().default(false),
analyticsAccount: Joi.string().default(''),
logLevel: Joi.string().valid('fatal', 'error', 'warn', 'info', 'debug', 'trace').default('info')
})
// Build config
const config = {
port: process.env.PORT,
env: process.env.FWS_ENV_NAME,
api: process.env.FWS_API_URL,
apiKey: process.env.FWS_API_KEY,
adClientId: process.env.AD_CLIENT_ID,
adClientSecret: process.env.AD_CLIENT_SECRET,
adTenant: process.env.AD_TENANT,
cookiePassword: process.env.AD_COOKIE_PASSWORD,
isSecure: process.env.IS_SECURE,
forceHttps: process.env.FORCE_HTTPS,
homePage: process.env.HOME_PAGE,
localCache: process.env.LOCAL_CACHE,
redisHost: process.env.REDIS_HOST,
redisPort: process.env.REDIS_PORT,
redisTls: process.env.REDIS_TLS,
analyticsAccount: process.env.FWS_APP_GA_ID,
logLevel: process.env.LOG_LEVEL
}
// Validate config
const result = schema.validate(config, {
abortEarly: false
})
// Throw if config is invalid
if (result.error) {
throw new Error(`The server config is invalid. ${result.error.message}`)
}
// Use the Joi validated value
const value = result.value
// Add some helper props
value.isDev = value.env === 'dev'
value.isProd = value.env === 'prd'
module.exports = value