From 026b9547b91e5500d974c4021f23f37ae7165ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 18 Jun 2020 20:52:25 +0200 Subject: [PATCH] address comments --- app-config.yaml | 3 +- .../src/service/lib/ServiceBuilderImpl.ts | 37 ++++--------------- .../backend-common/src/service/lib/config.ts | 28 ++++++++++---- 3 files changed, 30 insertions(+), 38 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index c5777be4fa..39527c20bd 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -4,8 +4,7 @@ app: backend: baseUrl: http://localhost:7000 - bindPort: 7000 - bindHost: localhost + listen: 0.0.0.0:7000 cors: origin: http://localhost:3000 methods: [GET, POST, PUT, DELETE] diff --git a/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts b/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts index 3cceec0e87..19418b2671 100644 --- a/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts +++ b/packages/backend-common/src/service/lib/ServiceBuilderImpl.ts @@ -57,11 +57,11 @@ export class ServiceBuilderImpl implements ServiceBuilder { } const baseOptions = readBaseOptions(backendConfig); - if (baseOptions.bindPort) { - this.port = baseOptions.bindPort; + if (baseOptions.listenPort) { + this.port = baseOptions.listenPort; } - if (baseOptions.bindHost) { - this.host = baseOptions.bindHost; + if (baseOptions.listenHost) { + this.host = baseOptions.listenHost; } const corsOptions = readCorsOptions(backendConfig); @@ -122,7 +122,7 @@ export class ServiceBuilderImpl implements ServiceBuilder { const server = stoppable( app.listen(port, host, () => { - logger.info(`Listening on port ${port}`); + logger.info(`Listening on ${host}:${port}`); }), 0, ); @@ -143,31 +143,10 @@ export class ServiceBuilderImpl implements ServiceBuilder { logger: Logger; corsOptions?: cors.CorsOptions; } { - let port: number; - if (this.port !== undefined) { - port = this.port; - } else { - port = parseInt(process.env.PORT ?? '', 10) || DEFAULT_PORT; - } - - let host: string; - if (this.host !== undefined) { - host = this.host; - } else { - host = process.env.HOST || DEFAULT_HOST; - } - - let logger: Logger; - if (this.logger) { - logger = this.logger; - } else { - logger = getRootLogger(); - } - return { - port, - host, - logger, + port: this.port ?? DEFAULT_PORT, + host: this.host ?? DEFAULT_HOST, + logger: this.logger ?? getRootLogger(), corsOptions: this.corsOptions, }; } diff --git a/packages/backend-common/src/service/lib/config.ts b/packages/backend-common/src/service/lib/config.ts index ead13cccec..064eacc4f2 100644 --- a/packages/backend-common/src/service/lib/config.ts +++ b/packages/backend-common/src/service/lib/config.ts @@ -18,8 +18,8 @@ import { ConfigReader } from '@backstage/config'; import { CorsOptions } from 'cors'; export type BaseOptions = { - bindPort?: number; - bindHost?: string; + listenPort?: number; + listenHost?: string; }; /** @@ -31,16 +31,17 @@ export type BaseOptions = { * @example * ```json * { - * baseUrl: "http://localhost:7000" - * bindPort: 7000 - * bindHost: "0.0.0.0" + * baseUrl: "http://localhost:7000", + * listen: "0.0.0.0:7000" * } * ``` */ export function readBaseOptions(config: ConfigReader): BaseOptions { + // TODO(freben): Expand this to support more addresses and perhaps optional + const { host, port } = parseListenAddress(config.getString('listen')); return removeUnknown({ - bindPort: config.getOptionalNumber('bindPort'), - bindHost: config.getOptionalString('bindHost'), + listenPort: port, + listenHost: host, }); } @@ -110,3 +111,16 @@ function removeUnknown(obj: T): T { Object.entries(obj).filter(([, v]) => v !== undefined), ) as T; } + +function parseListenAddress(value: string): { host?: string; port?: number } { + const parts = value.split(':'); + if (parts.length === 1) { + return { port: parseInt(parts[0], 10) }; + } + if (parts.length === 2) { + return { host: parts[0], port: parseInt(parts[1], 10) }; + } + throw new Error( + `Unable to parse listen address ${value}, expected or :`, + ); +}