diff --git a/packages/backend/package.json b/packages/backend/package.json index 7a0ad95e67..516208bf3b 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -19,6 +19,8 @@ "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.9", "@backstage/catalog-model": "^0.1.1-alpha.9", + "@backstage/config": "^0.1.1-alpha.9", + "@backstage/config-loader": "^0.1.1-alpha.9", "@backstage/plugin-auth-backend": "^0.1.1-alpha.9", "@backstage/plugin-catalog-backend": "^0.1.1-alpha.9", "@backstage/plugin-identity-backend": "^0.1.1-alpha.9", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 0a9d852222..df0d08fa7d 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -27,6 +27,8 @@ import { getRootLogger, useHotMemoize, } from '@backstage/backend-common'; +import { ConfigReader, AppConfig } from '@backstage/config'; +import { loadConfig } from '@backstage/config-loader'; import knex from 'knex'; import auth from './plugins/auth'; import catalog from './plugins/catalog'; @@ -35,20 +37,26 @@ import scaffolder from './plugins/scaffolder'; import sentry from './plugins/sentry'; import { PluginEnvironment } from './types'; -function createEnv(plugin: string): PluginEnvironment { - const logger = getRootLogger().child({ type: 'plugin', plugin }); - const database = knex({ - client: 'sqlite3', - connection: ':memory:', - useNullAsDefault: true, - }); - database.client.pool.on('createSuccess', (_eventId: any, resource: any) => { - resource.run('PRAGMA foreign_keys = ON', () => {}); - }); - return { logger, database }; +function makeCreateEnv(loadedConfigs: AppConfig[]) { + const config = ConfigReader.fromConfigs(loadedConfigs); + + return (plugin: string): PluginEnvironment => { + const logger = getRootLogger().child({ type: 'plugin', plugin }); + const database = knex({ + client: 'sqlite3', + connection: ':memory:', + useNullAsDefault: true, + }); + database.client.pool.on('createSuccess', (_eventId: any, resource: any) => { + resource.run('PRAGMA foreign_keys = ON', () => {}); + }); + return { logger, database, config }; + }; } async function main() { + const createEnv = makeCreateEnv(await loadConfig()); + const catalogEnv = useHotMemoize(module, () => createEnv('catalog')); const scaffolderEnv = useHotMemoize(module, () => createEnv('scaffolder')); const authEnv = useHotMemoize(module, () => createEnv('auth')); diff --git a/packages/backend/src/plugins/auth.ts b/packages/backend/src/plugins/auth.ts index 7cf9610dc2..a9c687cbc4 100644 --- a/packages/backend/src/plugins/auth.ts +++ b/packages/backend/src/plugins/auth.ts @@ -17,6 +17,9 @@ import { createRouter } from '@backstage/plugin-auth-backend'; import { PluginEnvironment } from '../types'; -export default async function createPlugin({ logger }: PluginEnvironment) { - return await createRouter({ logger }); +export default async function createPlugin({ + logger, + config, +}: PluginEnvironment) { + return await createRouter({ logger, config }); } diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index ce681a6bdd..f7df3d05c6 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -16,8 +16,10 @@ import Knex from 'knex'; import { Logger } from 'winston'; +import { Config } from '@backstage/config'; export type PluginEnvironment = { logger: Logger; database: Knex; + config: Config; }; diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index e0f9252773..d22a5ef6d6 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -21,6 +21,8 @@ }, "dependencies": { "@backstage/backend-common": "^0.1.1-alpha.9", + "@backstage/config": "^0.1.1-alpha.9", + "@backstage/config-loader": "^0.1.1-alpha.9", "@types/express": "^4.17.6", "body-parser": "^1.19.0", "compression": "^1.7.4", diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index 20c35a4084..2e7b4623ff 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -20,9 +20,11 @@ import cookieParser from 'cookie-parser'; import bodyParser from 'body-parser'; import { Logger } from 'winston'; import { createAuthProviderRouter } from '../providers'; +import { Config } from '@backstage/config'; export interface RouterOptions { logger: Logger; + config: Config; } export async function createRouter( @@ -38,7 +40,7 @@ export async function createRouter( // TODO: read from app config const config = { backend: { - baseUrl: 'http://localhost:7000', + baseUrl: options.config.getString('backend.baseUrl'), }, auth: { providers: { @@ -77,7 +79,7 @@ export async function createRouter( const providerConfigs = config.auth.providers; for (const [providerId, providerConfig] of Object.entries(providerConfigs)) { - const baseUrl = `${config.backend.baseUrl}/auth`; + const baseUrl = `${options.config.getString('backend.baseUrl')}/auth`; logger.info(`Configuring provider, ${providerId}`); try { const providerRouter = createAuthProviderRouter( diff --git a/plugins/auth-backend/src/service/standaloneApplication.ts b/plugins/auth-backend/src/service/standaloneApplication.ts index 5eea4fb8f5..cd81e32ccb 100644 --- a/plugins/auth-backend/src/service/standaloneApplication.ts +++ b/plugins/auth-backend/src/service/standaloneApplication.ts @@ -19,6 +19,7 @@ import { notFoundHandler, requestLoggingHandler, } from '@backstage/backend-common'; +import { Config } from '@backstage/config'; import compression from 'compression'; import cors from 'cors'; import express from 'express'; @@ -29,12 +30,13 @@ import { createRouter } from './router'; export interface ApplicationOptions { enableCors: boolean; logger: Logger; + config: Config; } export async function createStandaloneApplication( options: ApplicationOptions, ): Promise { - const { enableCors, logger } = options; + const { enableCors, logger, config } = options; const app = express(); app.use(helmet()); @@ -44,7 +46,7 @@ export async function createStandaloneApplication( app.use(compression()); app.use(express.json()); app.use(requestLoggingHandler()); - app.use('/', await createRouter({ logger })); + app.use('/', await createRouter({ logger, config })); app.use(notFoundHandler()); app.use(errorHandler()); diff --git a/plugins/auth-backend/src/service/standaloneServer.ts b/plugins/auth-backend/src/service/standaloneServer.ts index be1021d604..c03fe44b40 100644 --- a/plugins/auth-backend/src/service/standaloneServer.ts +++ b/plugins/auth-backend/src/service/standaloneServer.ts @@ -17,6 +17,8 @@ import { Server } from 'http'; import { Logger } from 'winston'; import { createStandaloneApplication } from './standaloneApplication'; +import { ConfigReader } from '@backstage/config'; +import { loadConfig } from '@backstage/config-loader'; export interface ServerOptions { port: number; @@ -28,11 +30,13 @@ export async function startStandaloneServer( options: ServerOptions, ): Promise { const logger = options.logger.child({ service: 'auth-backend' }); + const config = ConfigReader.fromConfigs(await loadConfig()); logger.debug('Creating application...'); const app = await createStandaloneApplication({ enableCors: options.enableCors, logger, + config, }); logger.debug('Starting application server...');