From 9749d07be5812fa98a5984746b4c3bf1ea10ad50 Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Wed, 20 May 2020 12:49:30 +0200 Subject: [PATCH] more fixes --- plugins/auth-backend/package.json | 8 ++++---- .../src/providers/google/provider.ts | 15 ++++++++++---- plugins/auth-backend/src/providers/index.ts | 8 ++++++-- plugins/auth-backend/src/providers/types.ts | 20 ++++++++++++------- plugins/auth-backend/src/service/router.ts | 10 +++++++++- 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 02c3122dd3..e285d33ef1 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -26,14 +26,14 @@ "winston": "^3.2.1", "yn": "^4.0.0", "passport": "0.4.1", - "passport-google-oauth20": "2.0.0" + "passport-google-oauth20": "2.0.0", + "@types/passport": "1.0.3", + "@types/passport-google-oauth20": "2.0.3" }, "devDependencies": { "@backstage/cli": "^0.1.1-alpha.5", "jest-fetch-mock": "^3.0.3", - "tsc-watch": "^4.2.3", - "@types/passport": "1.0.3", - "@types/passport-google-oauth20": "2.0.3" + "tsc-watch": "^4.2.3" }, "files": [ "dist" diff --git a/plugins/auth-backend/src/providers/google/provider.ts b/plugins/auth-backend/src/providers/google/provider.ts index b79c6bf362..2c559a2dc9 100644 --- a/plugins/auth-backend/src/providers/google/provider.ts +++ b/plugins/auth-backend/src/providers/google/provider.ts @@ -17,13 +17,17 @@ import passport from 'passport'; import express from 'express'; import { Strategy as GoogleStrategy } from 'passport-google-oauth20'; -import { AuthProvider, AuthProviderRouteHandlers } from './../types'; +import { + AuthProvider, + AuthProviderRouteHandlers, + AuthProviderConfig, +} from './../types'; import { postMessageResponse } from './../utils'; export class GoogleAuthProvider implements AuthProvider, AuthProviderRouteHandlers { - private readonly providerConfig: any; - constructor(providerConfig: any) { + private readonly providerConfig: AuthProviderConfig; + constructor(providerConfig: AuthProviderConfig) { this.providerConfig = providerConfig; } @@ -54,7 +58,10 @@ export class GoogleAuthProvider } logout(_req: express.Request, res: express.Response) { - return res.send('logout!'); + return new Promise((resolve) => { + res.send('logout!'); + resolve(); + }); } strategy(): passport.Strategy { diff --git a/plugins/auth-backend/src/providers/index.ts b/plugins/auth-backend/src/providers/index.ts index 1ed13cdc33..a26176381a 100644 --- a/plugins/auth-backend/src/providers/index.ts +++ b/plugins/auth-backend/src/providers/index.ts @@ -15,7 +15,11 @@ */ import Router from 'express-promise-router'; -import { AuthProviderRouteHandlers, AuthProviderFactories } from './types'; +import { + AuthProviderRouteHandlers, + AuthProviderFactories, + AuthProviderConfig, +} from './types'; import { GoogleAuthProvider } from './google/provider'; @@ -34,7 +38,7 @@ export const defaultRouter = (provider: AuthProviderRouteHandlers) => { return router; }; -export const makeProvider = (config: any) => { +export const makeProvider = (config: AuthProviderConfig) => { const providerId = config.provider; const ProviderImpl = providerFactories[providerId]; if (!ProviderImpl) { diff --git a/plugins/auth-backend/src/providers/types.ts b/plugins/auth-backend/src/providers/types.ts index fcdfc2bbad..eaff539c04 100644 --- a/plugins/auth-backend/src/providers/types.ts +++ b/plugins/auth-backend/src/providers/types.ts @@ -17,6 +17,16 @@ import express from 'express'; import passport from 'passport'; +export type AuthProviderConfig = { + provider: string; + options: any; +}; + +export interface AuthProvider { + strategy(): passport.Strategy; + router?(): express.Router; +} + export interface AuthProviderRouteHandlers { start( req: express.Request, @@ -27,7 +37,7 @@ export interface AuthProviderRouteHandlers { req: express.Request, res: express.Response, next: express.NextFunction, - ): express.Response; + ): Promise; refresh?( req: express.Request, res: express.Response, @@ -37,11 +47,7 @@ export interface AuthProviderRouteHandlers { req: express.Request, res: express.Response, next: express.NextFunction, - ): express.Response; -} -export interface AuthProvider { - strategy(): passport.Strategy; - router?(): express.Router; + ): Promise; } export type AuthProviderFactories = { @@ -53,7 +59,7 @@ export type AuthProviderFactories = { export type AuthInfo = { profile: passport.Profile; accessToken: string; - expiresAt?: number; + expiresInSeconds?: number; }; export type AuthResponse = diff --git a/plugins/auth-backend/src/service/router.ts b/plugins/auth-backend/src/service/router.ts index dff03e8139..cdde95d9d0 100644 --- a/plugins/auth-backend/src/service/router.ts +++ b/plugins/auth-backend/src/service/router.ts @@ -30,6 +30,7 @@ export async function createRouter( ): Promise { const router = Router(); const logger = options.logger.child({ plugin: 'auth' }); + const providerRouters: { [key: string]: express.Router } = {}; // configure all the providers for (const providerConfig of providers) { @@ -38,7 +39,7 @@ export async function createRouter( ); logger.info(`Configuring provider: ${providerId}`); passport.use(strategy); - router.use(`/${providerId}`, providerRouter); + providerRouters[providerId] = providerRouter; } passport.serializeUser((user, done) => { @@ -52,5 +53,12 @@ export async function createRouter( router.use(passport.initialize()); router.use(passport.session()); + for (const providerId in providerRouters) { + if (providerRouters.hasOwnProperty(providerId)) { + const providerRouter = providerRouters[providerId]; + router.use(`/${providerId}`, providerRouter); + } + } + return router; }