44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
|
const { Middleware } = require('libflitter')
|
||
|
|
||
|
/*
|
||
|
* Config Middleware
|
||
|
* -------------------------------------------------------------
|
||
|
* Checks the specified configuration key (and optionally the value).
|
||
|
* If the configuration matches the required value, the request can
|
||
|
* proceed. Otherwise, a 404 will be returned.
|
||
|
*
|
||
|
* To use, add the call to your route's middleware:
|
||
|
*
|
||
|
* ['middleware::util:Config', {key: 'server.ssl.test', value: true}],
|
||
|
*
|
||
|
* In this case, the request would be allowed to proceed in the case:
|
||
|
* services.configs.get('server.ssl.test') === true
|
||
|
*
|
||
|
* The 'value' attribute is optional. If none is provided, the request
|
||
|
* can proceed if the config value is truthy.
|
||
|
*/
|
||
|
class Config extends Middleware {
|
||
|
static get services() {
|
||
|
return [...super.services, 'configs', 'output']
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Run the middleware test.
|
||
|
*/
|
||
|
test(req, res, next, args = {}){
|
||
|
if ( !args.key ) return res.error(500)
|
||
|
|
||
|
const config = this.configs.get(args.key)
|
||
|
|
||
|
if ( !args.value && !config ) {
|
||
|
if ( !config && typeof config === 'undefined' )
|
||
|
this.output.warn(`util:Config middleware check failed because it tried to access a config that doesn't exist. (${key})`)
|
||
|
return res.error(404)
|
||
|
}
|
||
|
else if ( args.value && args.value !== config ) return res.error(404)
|
||
|
else return next()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Config
|