Skip to content

Commit

Permalink
Merge pull request #1 from KTH/refactor/env-style-config
Browse files Browse the repository at this point in the history
Refactor of configuration to simplify config-files
  • Loading branch information
jhsware committed Jan 13, 2017
2 parents 3e9ff84 + eed1bab commit e7d66e0
Show file tree
Hide file tree
Showing 10 changed files with 218 additions and 105 deletions.
55 changes: 55 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,58 @@ Use the [npm package __dotenv__][dotenv] to set environment variables.
Take a look at the unit tests for example usage.

[dotenv]: https://www.npmjs.com/package/dotenv

## DEV NOTES ##

- vi fimpar local-/prod-/ref-/devSettings.js
- läggs i commonSettings.js, serverSettings.js, browserSettings.js

- fimpa full, safe och secure

När vi skapar nya settings-objektet
- vi mergear commonSettings.js + serverSettings.js till servern
- vi mergear commonSettings.js + browserSettings.js till browsern
- returneras på endpointen ./browserConfig som javascript
TODO: - lägg till script-tag i början av all layout-filer
(eller kan vi referera den från JS-filen?)

Migrering:

- Search and replace:

require('../**/configuration') => require('../**/configuration').server

config.full => config
config.safe => config
config.secure: .secure => ''
server.full => server

- What are these used for (kth-node-configuration)

module.exports.getEnv = _env
module.exports.getEnvString = _str
module.exports.getEnvBool = _bool
module.exports.getEnvInt = _int

- Update tests

- Update kth-node-server (to 1.2.0)

config.full => config

- change how we start server:

server.setConfig(config) => server.setConfig({ full: config })

- change in adldap.js

attributes: config.ldapClient.userattrs => attributes: config.ldap.userattrs
config.ldapClient.filterReplaceHolder, kthid => config.ldap.filterReplaceHolder, kthid

- Add endpoint .../browserConfig
- Remove the handlebars helper

<<globalSettingsForBrowserJS>>

- Add

102 changes: 0 additions & 102 deletions configurator.js

This file was deleted.

8 changes: 8 additions & 0 deletions lib/decodeUri.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict'

const { getEnv } = require('./utils')
const urlgrey = require('urlgrey')

module.exports = function (envVarName, defaultUri) {
return urlgrey(getEnv(envVarName, defaultUri))
}
32 changes: 32 additions & 0 deletions lib/generateConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict'

const deepAssign = require('deep-assign')

function _currentNodeEnv () {
const nodeEnv = process.env.NODE_ENV && process.env.NODE_ENV.toLowerCase()

if (nodeEnv === 'production') {
return 'prod'
} else if (nodeEnv === 'referens' || nodeEnv === 'reference' || nodeEnv === 'ref') {
return 'ref'
} else if (nodeEnv === 'development' || nodeEnv === 'dev' || !nodeEnv) {
return 'dev'
}

// To run Node in production mode NODE_currentNodeEnv must be 'production'
throw new Error(`Invalid NODE_currentNodeEnv variable: ${nodeEnv}`)
}

module.exports = function (inpArr) {
// Create array of source objects
const mergeThese = inpArr.slice()
// Add target object
const mergedObj = {}
mergeThese.unshift(mergedObj)
// Merge all objects
deepAssign.apply(this, mergeThese)
// Add the env variable
mergedObj.env = _currentNodeEnv()

return mergedObj
}
8 changes: 8 additions & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
generateConfig: require('./generateConfig'),
decodeUri: require('./decodeUri'),
unpackLDAPConfig: require('./unpackLDAPConfig'),
unpackNodeApiConfig: require('./unpackNodeApiConfig'),
unpackRedisConfig: require('./unpackRedisConfig'),
getEnv: require('./utils').getEnv
}
40 changes: 40 additions & 0 deletions lib/unpackLDAPConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use strict'

const { getEnv, typeConversion } = require('./utils')
const urlgrey = require('urlgrey')

module.exports = function (envVarName, password, defaultUri, options) {
const envObj = urlgrey(getEnv(envVarName, defaultUri))

const outp = {
uri: `${envObj.protocol()}://${envObj.hostname()}`,
username: envObj.username(),
password: password
}

if (typeof options === 'object') {
Object.assign(outp, options)
}

if (typeof envObj.query === 'object') {
var tmpQuery = envObj.query()
Object.keys(tmpQuery).forEach((key) => {
outp[key] = typeConversion(tmpQuery[key])
})
}
return outp
}

module.exports.defaultSettings = {
ldapClient: {
version: 3,
searchlimit: 10,
searchtimeout: 10, // seconds
connecttimeout: 3000, // ms
timeout: 3000, // ms
maxconnections: 10, //
checkinterval: 10000, // ms
maxidletime: 300000, // ms
scope: 'sub'
}
}
27 changes: 27 additions & 0 deletions lib/unpackNodeApiConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
'use strict'

const { getEnv, typeConversion } = require('./utils')
const urlgrey = require('urlgrey')

module.exports = function (envVarName, defaultUri, options) {
const envObj = urlgrey(getEnv(envVarName, defaultUri))
const outp = {
https: envObj.protocol() === 'https',
// Netscaler doesn't answer https calls properly if we pass the port to kth-node-api-call
port: (envObj.protocol() === 'https' ? undefined : envObj.port()),
host: envObj.hostname(),
proxyBasePath: envObj.path()
}

if (typeof options === 'object') {
Object.assign(outp, options)
}

if (typeof envObj.query === 'object') {
var tmpQuery = envObj.query()
Object.keys(tmpQuery).forEach((key) => {
outp[key] = typeConversion(tmpQuery[key])
})
}
return outp
}
25 changes: 25 additions & 0 deletions lib/unpackRedisConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'use strict'

const { getEnv, typeConversion } = require('./utils')
const urlgrey = require('urlgrey')

module.exports = function (envVarName, defaultUri, options) {
const envObj = urlgrey(getEnv(envVarName, defaultUri))

const outp = {
host: envObj.hostname(),
port: envObj.port()
}

if (typeof options === 'object') {
Object.assign(outp, options)
}

if (typeof envObj.query === 'object') {
var tmpQuery = envObj.query()
Object.keys(tmpQuery).forEach((key) => {
outp[key] = typeConversion(tmpQuery[key])
})
}
return outp
}
19 changes: 19 additions & 0 deletions lib/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'use strict'

module.exports.getEnv = function (name, defaultVal) {
return process.env[name] || defaultVal
}

module.exports.typeConversion = function (inp) {
if (parseInt(inp).toString === inp) {
return parseInt(inp)
} else if (inp === 'true') {
return true
} else if (inp === 'false') {
return false
} else if (inp === 'undefined') {
return undefined
} else {
return inp
}
}
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
{
"name": "kth-node-configuration",
"version": "1.0.1",
"version": "1.1.0",
"description": "Configuration module for Node.js projects",
"main": "configurator.js",
"main": "lib/index.js",
"repository": {
"type": "git",
"url": "https://github.com/KTH/kth-node-configuration"
},
"dependencies": {
"lodash": "4.13.1"
"deep-assign": "^2.0.0",
"urlgrey": "^0.4.4"
},
"keywords": [
"node",
Expand Down

0 comments on commit e7d66e0

Please sign in to comment.