new config loading logic
- remove unused config files - load all server env variables from ./config/env - still define PWD as midwest seems to be using it
This commit is contained in:
parent
3c5a05bed4
commit
6048991b2d
@ -34,7 +34,6 @@
|
||||
"redux": "^4.0.5",
|
||||
"redux-logger": "^3.0.6",
|
||||
"redux-thunk": "^2.2.0",
|
||||
"require-dir": "^1.2.0",
|
||||
"superagent": "^6.0.0",
|
||||
"useragent": "^2.1.12",
|
||||
"xml2json": "^0.12.0"
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
const p = require('path')
|
||||
|
||||
module.exports = {
|
||||
static: p.join(PWD, 'dist'),
|
||||
static: p.join(process.cwd(), 'dist'),
|
||||
}
|
||||
|
||||
30
server/config/env.js
Normal file
30
server/config/env.js
Normal file
@ -0,0 +1,30 @@
|
||||
'use strict'
|
||||
|
||||
function readFromEnv(columns, defaults) {
|
||||
const missing = []
|
||||
|
||||
const result = columns.reduce((result, variable) => {
|
||||
const value = (result[variable] = process.env[variable] || defaults[variable])
|
||||
|
||||
if (!value) {
|
||||
missing.push(variable)
|
||||
}
|
||||
|
||||
return result
|
||||
}, {})
|
||||
|
||||
if (missing.length) {
|
||||
throw new Error(`Missing required env variables: ${missing.join(', ')}`)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
const defaults = {
|
||||
NODE_ENV: 'development',
|
||||
POSTGRES_HOST: 'localhost',
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
...readFromEnv(['NODE_ENV', 'POSTGRES_HOST'], defaults),
|
||||
}
|
||||
@ -4,6 +4,8 @@ const _ = require('lodash')
|
||||
|
||||
const errorTemplate = require('../templates/Error')
|
||||
|
||||
const env = require('./env')
|
||||
|
||||
const defaults = {
|
||||
post: (req, res, next) => {
|
||||
res.template = errorTemplate
|
||||
@ -50,5 +52,5 @@ module.exports = _.merge(
|
||||
console: false,
|
||||
},
|
||||
},
|
||||
}[ENV],
|
||||
}[env.NODE_ENV],
|
||||
)
|
||||
@ -1,4 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
// global.LOGIN_USER = 'linus.miller@bitmill.co';
|
||||
// global.LOGIN_USER = 'zarac@zarac.se';
|
||||
11
server/config/index.js
Normal file
11
server/config/index.js
Normal file
@ -0,0 +1,11 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = {
|
||||
dir: require('./dir'),
|
||||
env: require('./env'),
|
||||
errorHandler: require('./error_handler'),
|
||||
port: require('./port'),
|
||||
postgres: require('./postgres'),
|
||||
shim: require('./shim'),
|
||||
site: require('./site'),
|
||||
}
|
||||
@ -1,108 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const _ = require('lodash')
|
||||
|
||||
const config = {
|
||||
site: require('./site'),
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
invite: {
|
||||
from: `${config.site.title} Robot <${config.site.emails.robot}>`,
|
||||
subject: `You have been invited to ${config.site.title}`,
|
||||
},
|
||||
|
||||
changePassword: {
|
||||
from: `${config.site.title} Robot <${config.site.emails.robot}>`,
|
||||
subject: `Password Reset Request for ${config.site.title}`,
|
||||
},
|
||||
|
||||
timeouts: {
|
||||
// 1 day
|
||||
changePassword: 24 * 60 * 60 * 1000,
|
||||
// verify email
|
||||
verifyEmail: 7 * 24 * 60 * 60 * 1000,
|
||||
},
|
||||
|
||||
paths: {
|
||||
register: '/register',
|
||||
login: '/login',
|
||||
forgotPassword: '/forgot',
|
||||
resetPassword: '/reset',
|
||||
verifyEmail: '/verify',
|
||||
},
|
||||
|
||||
redirects: {
|
||||
login: '/',
|
||||
logout: '/login',
|
||||
register: '/login',
|
||||
},
|
||||
|
||||
remember: {
|
||||
// if expires is defined, it will be used. otherwise maxage
|
||||
expires: new Date('2038-01-19T03:14:07.000Z'),
|
||||
// expires: Date.now() - 1,
|
||||
maxAge: 30 * 24 * 60 * 60 * 1000,
|
||||
},
|
||||
|
||||
messages: {
|
||||
login: {
|
||||
notLocal: 'Account requires external login.',
|
||||
wrongPassword: 'Wrong password.',
|
||||
noUserFound: 'No user registered with that email.',
|
||||
noExternalUser: 'The account is not connected to this website.',
|
||||
externalLoginFailed: 'External login failed.',
|
||||
emailNotVerified: "This account's email has not been verified.",
|
||||
banned: 'User is banned.',
|
||||
blocked: 'User is blocked due to too many login attempts.',
|
||||
},
|
||||
|
||||
register: {
|
||||
missingProperties: 'Oh no missing stuff',
|
||||
notAuthorized: 'The email is not authorized to create an account.',
|
||||
duplicateEmail: 'The email has already been registered.',
|
||||
},
|
||||
},
|
||||
|
||||
passport: {
|
||||
local: {
|
||||
usernameField: 'email',
|
||||
},
|
||||
|
||||
scope: ['email'],
|
||||
|
||||
//providers: {
|
||||
// facebook: {
|
||||
// clientID: 'change-this-fool',
|
||||
// clientSecret: 'change-this-fool',
|
||||
// callbackURL: p.join(config.site.domain, '/auth/facebook/callback'),
|
||||
// passReqToCallback: true
|
||||
// },
|
||||
},
|
||||
|
||||
userColumns: [
|
||||
'givenName',
|
||||
'familyName',
|
||||
'dateBanned',
|
||||
'dateBlocked',
|
||||
'dateMuted',
|
||||
'dateVerified',
|
||||
// ['array(SELECT name FROM user_roles LEFT OUTER JOIN roles ON user_roles.role_id = roles.id WHERE user_roles.user_id = users.id)', 'roles'],
|
||||
[
|
||||
`(SELECT array_to_json(array_agg(row_to_json(d)))
|
||||
FROM (
|
||||
SELECT id, name
|
||||
FROM user_roles
|
||||
LEFT OUTER JOIN roles ON user_roles.role_id = roles.id WHERE user_roles.user_id = users.id
|
||||
ORDER BY roles.id DESC
|
||||
) d
|
||||
)`,
|
||||
'roles',
|
||||
],
|
||||
],
|
||||
|
||||
// needs to be even
|
||||
tokenLength: 64,
|
||||
// needs to be even
|
||||
saltLength: 16,
|
||||
}
|
||||
@ -1,5 +1,7 @@
|
||||
'use strict'
|
||||
|
||||
const env = require('./env')
|
||||
|
||||
const basePort = 3060
|
||||
|
||||
module.exports = {
|
||||
@ -7,4 +9,4 @@ module.exports = {
|
||||
testing: basePort + 1,
|
||||
staging: basePort + 2,
|
||||
production: basePort + 3,
|
||||
}[ENV]
|
||||
}[env.NODE_ENV]
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import env from './env'
|
||||
'use strict'
|
||||
|
||||
export default {
|
||||
const env = require('./env')
|
||||
|
||||
module.exports = {
|
||||
database: 'journey',
|
||||
user: 'journey',
|
||||
password: 'journey',
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const chalk = require('chalk')
|
||||
const session = require('express-session')
|
||||
|
||||
let redisStore
|
||||
|
||||
const config = {
|
||||
secret:
|
||||
'asdfpoi7u987777777777777777777sdkafjxxjasdhfhsadfhashdfh`1111111khjjashdfkasjhdflGGGGGGGGGGaaa^^^^^^^^^^yaghsdfqw3u7679`',
|
||||
resave: false,
|
||||
saveUninitialized: true,
|
||||
}
|
||||
|
||||
const redisConfig = {
|
||||
host: 'localhost',
|
||||
port: 6379,
|
||||
}
|
||||
|
||||
if (ENV === 'production') {
|
||||
const RedisStore = require('connect-redis')(require('express-session'))
|
||||
|
||||
redisStore = new RedisStore(redisConfig)
|
||||
|
||||
redisStore.on('connect', () => {
|
||||
console.info(`[${chalk.cyan('INIT')}] Redis connected succcessfully`)
|
||||
})
|
||||
|
||||
redisStore.on('disconnect', () => {
|
||||
throw new Error('Unable to connect to redis. Has it been started?')
|
||||
})
|
||||
|
||||
config.store = redisStore
|
||||
} else {
|
||||
config.store = new session.MemoryStore()
|
||||
}
|
||||
|
||||
module.exports = config
|
||||
@ -1,13 +1,14 @@
|
||||
'use strict'
|
||||
|
||||
const _ = require('lodash')
|
||||
const env = require('./env')
|
||||
|
||||
const domain = 'newseri.com'
|
||||
const domain = 'journey.bitmill.io'
|
||||
|
||||
const defaults = {
|
||||
domain,
|
||||
title: 'Newseri Admin',
|
||||
name: 'newseri-admin',
|
||||
title: 'Journey',
|
||||
name: 'journey',
|
||||
protocol: 'http',
|
||||
get host() {
|
||||
return this.port ? this.hostname + ':' + this.port : this.hostname
|
||||
@ -16,10 +17,9 @@ const defaults = {
|
||||
return this.protocol + '://' + this.host + '/'
|
||||
},
|
||||
emails: {
|
||||
robot: 'no-reply@thecodebureau.com',
|
||||
info: 'info@thecodebureau.com',
|
||||
webmaster: 'webmaster@thecodebureau.com',
|
||||
order: 'info@thecodebureau.com',
|
||||
robot: 'no-reply@bitmill.io',
|
||||
info: 'info@bitmill.io',
|
||||
webmaster: 'webmaster@tbitmill.io',
|
||||
},
|
||||
}
|
||||
|
||||
@ -43,12 +43,6 @@ module.exports = _.merge(
|
||||
production: {
|
||||
hostname: `admin.${domain}`,
|
||||
protocol: 'https',
|
||||
// emails: {
|
||||
// robot: 'no-reply@' + domain,
|
||||
// info: 'info@' + domain,
|
||||
// webmaster: 'webmaster@' + domain,
|
||||
// order: 'order@' + domain,
|
||||
// },
|
||||
},
|
||||
}[ENV],
|
||||
}[env.NODE_ENV],
|
||||
)
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const _ = require('lodash')
|
||||
|
||||
const defaults = {
|
||||
auth: {
|
||||
user: 'SMTP_Injection',
|
||||
// dev key
|
||||
pass: '2eec390c5b3f5d593c9f152179bf51e90b073784',
|
||||
},
|
||||
host: 'smtp.sparkpostmail.com',
|
||||
port: 587,
|
||||
}
|
||||
|
||||
module.exports = _.merge(defaults, {}[ENV])
|
||||
@ -7,24 +7,24 @@
|
||||
* @type {Express instance}
|
||||
*/
|
||||
|
||||
global.ENV = process.env.NODE_ENV || 'development'
|
||||
global.PWD = process.env.NODE_PWD || process.cwd()
|
||||
|
||||
const config = require('./config')
|
||||
|
||||
// modules > native
|
||||
const p = require('path')
|
||||
|
||||
if (ENV === 'development') {
|
||||
if (config.env.NODE_ENV === 'development') {
|
||||
// output filename in console log and colour console.dir
|
||||
require('midwest/util/console')
|
||||
// needed so symlinked modules get access to main projects node_modules/
|
||||
require('app-module-path').addPath(p.join(PWD, 'node_modules'))
|
||||
require('app-module-path').addPath(p.join(process.cwd(), 'node_modules'))
|
||||
}
|
||||
|
||||
// modules > 3rd party
|
||||
const _ = require('lodash')
|
||||
const chalk = require('chalk')
|
||||
const express = require('express')
|
||||
const requireDir = require('require-dir')
|
||||
|
||||
// modules > express middlewares
|
||||
const bodyParser = require('body-parser')
|
||||
@ -43,15 +43,13 @@ process.on('uncaughtException', (err) => {
|
||||
process.exit(1)
|
||||
})
|
||||
|
||||
const config = requireDir('./config', { mapKey: (value, key) => _.camelCase(key) })
|
||||
|
||||
const prewares = [
|
||||
express.static(config.dir.static, ENV === 'production' ? { maxAge: '1 year' } : null),
|
||||
express.static(config.dir.static, config.env.NODE_ENV === 'production' ? { maxAge: '1 year' } : null),
|
||||
bodyParser.json(),
|
||||
bodyParser.urlencoded({ extended: true }),
|
||||
]
|
||||
|
||||
if (ENV === 'development') {
|
||||
if (config.env.NODE_ENV === 'development') {
|
||||
// only log requests to console in development mode
|
||||
prewares.unshift(require('morgan')('dev'))
|
||||
// prewares.push(require('midwest-module-membership/passport/automatic-login'));
|
||||
@ -83,11 +81,11 @@ server.response.render = function (template) {
|
||||
}
|
||||
|
||||
try {
|
||||
server.locals.js = require(p.join(PWD, 'public/js.json'))
|
||||
server.locals.js = require(p.join(process.cwd(), 'public/js.json'))
|
||||
} catch (e) {}
|
||||
|
||||
try {
|
||||
server.locals.css = require(p.join(PWD, 'public/css.json'))
|
||||
server.locals.css = require(p.join(process.cwd(), 'public/css.json'))
|
||||
} catch (e) {}
|
||||
|
||||
// load prewares
|
||||
@ -105,7 +103,9 @@ server.use(...postwares)
|
||||
if (require.main === module) {
|
||||
server.http = server.listen(config.port, () => {
|
||||
console.info(
|
||||
`[${chalk.cyan('INIT')}] HTTP Server listening on port ${chalk.magenta(config.port)} (${chalk.yellow(ENV)})`,
|
||||
`[${chalk.cyan('INIT')}] HTTP Server listening on port ${chalk.magenta(config.port)} (${chalk.yellow(
|
||||
config.env.NODE_ENV,
|
||||
)})`,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
@ -6262,11 +6262,6 @@ repeat-string@^1.6.1:
|
||||
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
|
||||
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
|
||||
|
||||
require-dir@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-1.2.0.tgz#0d443b75e96012d3ca749cf19f529a789ae74817"
|
||||
integrity sha512-LY85DTSu+heYgDqq/mK+7zFHWkttVNRXC9NKcKGyuGLdlsfbjEPrIEYdCVrx6hqnJb+xSu3Lzaoo8VnmOhhjNA==
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user