From 207c404aebd062f2f46742748ed08c5d97368dbc Mon Sep 17 00:00:00 2001 From: simeng-li Date: Sun, 22 May 2022 10:32:04 +0800 Subject: [PATCH] feat(core): empty path sould redirect to the console page (#915) * feat(core): empty path sould redirect to the console page empty path should redirect to the console page * fix(core): remove console log remove console log * fix(core): cr fix cr fix --- packages/core/src/app/init.ts | 4 ++-- ...sion-guard.test.ts => koa-proxy-guard.test.ts} | 12 ++++++------ ...client-session-guard.ts => koa-proxy-guard.ts} | 15 +++++++++++---- 3 files changed, 19 insertions(+), 12 deletions(-) rename packages/core/src/middleware/{koa-client-session-guard.test.ts => koa-proxy-guard.test.ts} (84%) rename packages/core/src/middleware/{koa-client-session-guard.ts => koa-proxy-guard.ts} (78%) diff --git a/packages/core/src/app/init.ts b/packages/core/src/app/init.ts index 9ff77a0e5..5d0454630 100644 --- a/packages/core/src/app/init.ts +++ b/packages/core/src/app/init.ts @@ -7,12 +7,12 @@ import koaLogger from 'koa-logger'; import mount from 'koa-mount'; import envSet, { MountedApps } from '@/env-set'; -import koaClientSessionGuard from '@/middleware/koa-client-session-guard'; import koaConnectorErrorHandler from '@/middleware/koa-connector-error-handle'; import koaErrorHandler from '@/middleware/koa-error-handler'; import koaI18next from '@/middleware/koa-i18next'; import koaLog from '@/middleware/koa-log'; import koaOIDCErrorHandler from '@/middleware/koa-oidc-error-handler'; +import koaProxyGuard from '@/middleware/koa-proxy-guard'; import koaSlonikErrorHandler from '@/middleware/koa-slonik-error-handler'; import koaSpaProxy from '@/middleware/koa-spa-proxy'; import initOidc from '@/oidc/init'; @@ -39,7 +39,7 @@ export default async function initApp(app: Koa): Promise { mount('/' + MountedApps.Console, koaSpaProxy(MountedApps.Console, 5002, MountedApps.Console)) ); - app.use(koaClientSessionGuard(provider)); + app.use(koaProxyGuard(provider)); app.use(koaSpaProxy()); const { httpsCert, httpsKey, port } = envSet.values; diff --git a/packages/core/src/middleware/koa-client-session-guard.test.ts b/packages/core/src/middleware/koa-proxy-guard.test.ts similarity index 84% rename from packages/core/src/middleware/koa-client-session-guard.test.ts rename to packages/core/src/middleware/koa-proxy-guard.test.ts index 8511a2bd8..d34c89045 100644 --- a/packages/core/src/middleware/koa-client-session-guard.test.ts +++ b/packages/core/src/middleware/koa-proxy-guard.test.ts @@ -3,7 +3,7 @@ import { Provider } from 'oidc-provider'; import { MountedApps } from '@/env-set'; import { createContextWithRouteParameters } from '@/utils/test-utils'; -import koaClientSessionGuard, { sessionNotFoundPath } from './koa-client-session-guard'; +import koaProxyGuard, { sessionNotFoundPath } from './koa-proxy-guard'; jest.mock('fs/promises', () => ({ ...jest.requireActual('fs/promises'), @@ -16,7 +16,7 @@ jest.mock('oidc-provider', () => ({ })), })); -describe('koaClientSessionGuard', () => { +describe('koaProxyGuard', () => { const envBackup = process.env; beforeEach(() => { @@ -38,7 +38,7 @@ describe('koaClientSessionGuard', () => { url: `/${app}/foo`, }); - await koaClientSessionGuard(provider)(ctx, next); + await koaProxyGuard(provider)(ctx, next); expect(ctx.redirect).not.toBeCalled(); }); @@ -49,7 +49,7 @@ describe('koaClientSessionGuard', () => { const ctx = createContextWithRouteParameters({ url: `/sign-in`, }); - await koaClientSessionGuard(provider)(ctx, next); + await koaProxyGuard(provider)(ctx, next); expect(ctx.redirect).not.toBeCalled(); }); @@ -60,7 +60,7 @@ describe('koaClientSessionGuard', () => { const ctx = createContextWithRouteParameters({ url: `${sessionNotFoundPath}`, }); - await koaClientSessionGuard(provider)(ctx, next); + await koaProxyGuard(provider)(ctx, next); expect(ctx.redirect).not.toBeCalled(); }); @@ -71,7 +71,7 @@ describe('koaClientSessionGuard', () => { const ctx = createContextWithRouteParameters({ url: '/sign-in', }); - await koaClientSessionGuard(provider)(ctx, next); + await koaProxyGuard(provider)(ctx, next); expect(ctx.redirect).toBeCalled(); }); }); diff --git a/packages/core/src/middleware/koa-client-session-guard.ts b/packages/core/src/middleware/koa-proxy-guard.ts similarity index 78% rename from packages/core/src/middleware/koa-client-session-guard.ts rename to packages/core/src/middleware/koa-proxy-guard.ts index fd736aa34..ceeb1dca7 100644 --- a/packages/core/src/middleware/koa-client-session-guard.ts +++ b/packages/core/src/middleware/koa-proxy-guard.ts @@ -18,18 +18,25 @@ export default function koaSpaSessionGuard< return async (ctx, next) => { const requestPath = ctx.request.path; const packagesPath = fromRoot ? 'packages/' : '..'; - const distPath = path.join(packagesPath, 'ui', 'dist'); + const clientPath = path.join(packagesPath, 'ui', 'dist'); - // Guard client routes only + // Empty path Redirect + if (requestPath === '/') { + ctx.redirect(`/${MountedApps.Console}`); + + return next(); + } + + // Check client routes session status only if (Object.values(MountedApps).some((app) => requestPath.startsWith(`/${app}`))) { return next(); } + // Client session guard try { - // Find session await provider.interactionDetails(ctx.req, ctx.res); } catch { - const spaDistFiles = await fs.readdir(distPath); + const spaDistFiles = await fs.readdir(clientPath); if ( !spaDistFiles.some((file) => requestPath.startsWith('/' + file)) &&