UNPKG

hapi-bouncer

Version:
80 lines (67 loc) 2.29 kB
// @flow import __debug from 'debug' import fs from 'fs' import path from 'path' import {loadConfig} from 'node-config-loader' import createServer from './createServer' import normalizeConnections from './utils/normalizeConnections' import type {RawConfig, NormalizedConfig} from './interfaces/bouncer' import type {HapiServer, HapiConnection} from './interfaces/hapi' const debug = __debug('hapi-bouncer:debug') function normalizeMask(configsGlob: string): ?string { let result: string let isDir = false try { isDir = fs.lstatSync(configsGlob).isDirectory() } catch (e) {} if (isDir) { result = configsGlob + '/**/*.{json,yml,yaml,toml}' } return result } class ConfigRoots { roots: string[] constructor(roots: string[] = []) { this.roots = roots } add(dir: string): void { const mask: ?string = normalizeMask(dir) if (mask) { this.roots.push(mask) } } } export interface BouncerServerConfig { config: string[]; certs: string; } export default function bouncerServer(args: BouncerServerConfig): Promise<HapiServer> { const configRoots = new ConfigRoots() const config: string[] = args.config || [] process.env.HOME && configRoots.add(path.join(process.env.HOME, '.config', 'hapi-bouncer')) config.forEach(conf => configRoots.add(conf)) debug('config dirs: %o', configRoots.roots) return loadConfig(({ mask: configRoots.roots, env: process.env.NODE_ENV || 'development', instance: 'server' })) .then((conf: RawConfig) => { // debug('raw config: %s', JSON.stringify(conf, null, ' ')) const config: NormalizedConfig = normalizeConnections( args.certs, conf ) // debug('normalized config: %s', JSON.stringify(config, null, ' ')) const server = createServer(config) server.start((err: ?Error) => { if (err) { throw err } server.connections.forEach((connection) => { console.log('Server is listening ' + connection.info.uri.toLowerCase()); }) }) return server }) }