From 163c23b9bd3019e1187de9dec1a2fdd2201630f7 Mon Sep 17 00:00:00 2001 From: simeng-li Date: Mon, 15 Aug 2022 09:50:18 +0800 Subject: [PATCH] fix(core): fix ac & ui proxy under subpath deployment (#1761) fix ac & ui procy under subpath deployment --- packages/core/src/middleware/koa-root-proxy.ts | 7 ++++++- packages/core/src/middleware/koa-spa-session-guard.ts | 7 ++++++- packages/core/src/middleware/koa-welcome-proxy.test.ts | 8 +++++--- packages/core/src/middleware/koa-welcome-proxy.ts | 8 ++++++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/core/src/middleware/koa-root-proxy.ts b/packages/core/src/middleware/koa-root-proxy.ts index dd497869f..508fe8f77 100644 --- a/packages/core/src/middleware/koa-root-proxy.ts +++ b/packages/core/src/middleware/koa-root-proxy.ts @@ -1,17 +1,22 @@ import { MiddlewareType } from 'koa'; import { IRouterParamContext } from 'koa-router'; +import envSet from '@/env-set'; +import { appendPath } from '@/utils/url'; + export default function koaRootProxy< StateT, ContextT extends IRouterParamContext, ResponseBodyT >(): MiddlewareType { + const { endpoint } = envSet.values; + return async (ctx, next) => { const requestPath = ctx.request.path; // Redirect root path to the Admin Console welcome page if (requestPath === '/') { - ctx.redirect('/welcome'); + ctx.redirect(appendPath(endpoint, '/welcome').toString()); return; } diff --git a/packages/core/src/middleware/koa-spa-session-guard.ts b/packages/core/src/middleware/koa-spa-session-guard.ts index 6fa76ee95..646b5b41d 100644 --- a/packages/core/src/middleware/koa-spa-session-guard.ts +++ b/packages/core/src/middleware/koa-spa-session-guard.ts @@ -2,6 +2,9 @@ import { MiddlewareType } from 'koa'; import { IRouterParamContext } from 'koa-router'; import { Provider } from 'oidc-provider'; +import envSet from '@/env-set'; +import { appendPath } from '@/utils/url'; + // Need To Align With UI export const sessionNotFoundPath = '/unknown-session'; export const guardedPath = ['/sign-in', '/register', '/social-register']; @@ -11,6 +14,8 @@ export default function koaSpaSessionGuard< ContextT extends IRouterParamContext, ResponseBodyT >(provider: Provider): MiddlewareType { + const { endpoint } = envSet.values; + return async (ctx, next) => { const requestPath = ctx.request.path; const isPreview = ctx.request.URL.searchParams.get('preview'); @@ -20,7 +25,7 @@ export default function koaSpaSessionGuard< try { await provider.interactionDetails(ctx.req, ctx.res); } catch { - ctx.redirect(sessionNotFoundPath); + ctx.redirect(appendPath(endpoint, sessionNotFoundPath).toString()); return; } diff --git a/packages/core/src/middleware/koa-welcome-proxy.test.ts b/packages/core/src/middleware/koa-welcome-proxy.test.ts index 7960159ca..c709af743 100644 --- a/packages/core/src/middleware/koa-welcome-proxy.test.ts +++ b/packages/core/src/middleware/koa-welcome-proxy.test.ts @@ -1,4 +1,4 @@ -import { MountedApps } from '@/env-set'; +import envSet, { MountedApps } from '@/env-set'; import { hasActiveUsers } from '@/queries/user'; import { createContextWithRouteParameters } from '@/utils/test-utils'; @@ -17,6 +17,7 @@ describe('koaWelcomeProxy', () => { }); it('should redirect to admin console if has AdminUsers', async () => { + const { endpoint } = envSet.values; (hasActiveUsers as jest.Mock).mockResolvedValue(true); const ctx = createContextWithRouteParameters({ url: `/${MountedApps.Welcome}`, @@ -24,18 +25,19 @@ describe('koaWelcomeProxy', () => { await koaWelcomeProxy()(ctx, next); - expect(ctx.redirect).toBeCalledWith(`/${MountedApps.Console}`); + expect(ctx.redirect).toBeCalledWith(`${endpoint}/${MountedApps.Console}`); expect(next).not.toBeCalled(); }); it('should redirect to welcome page if has no Users', async () => { + const { endpoint } = envSet.values; (hasActiveUsers as jest.Mock).mockResolvedValue(false); const ctx = createContextWithRouteParameters({ url: `/${MountedApps.Welcome}`, }); await koaWelcomeProxy()(ctx, next); - expect(ctx.redirect).toBeCalledWith(`/${MountedApps.Console}/welcome`); + expect(ctx.redirect).toBeCalledWith(`${endpoint}/${MountedApps.Console}/welcome`); expect(next).not.toBeCalled(); }); }); diff --git a/packages/core/src/middleware/koa-welcome-proxy.ts b/packages/core/src/middleware/koa-welcome-proxy.ts index 1c7ec1757..98b425524 100644 --- a/packages/core/src/middleware/koa-welcome-proxy.ts +++ b/packages/core/src/middleware/koa-welcome-proxy.ts @@ -1,20 +1,24 @@ import { MiddlewareType } from 'koa'; import { IRouterParamContext } from 'koa-router'; +import envSet from '@/env-set'; import { hasActiveUsers } from '@/queries/user'; +import { appendPath } from '@/utils/url'; export default function koaWelcomeProxy< StateT, ContextT extends IRouterParamContext, ResponseBodyT >(): MiddlewareType { + const { adminConsoleUrl } = envSet.values; + return async (ctx) => { if (await hasActiveUsers()) { - ctx.redirect('/console'); + ctx.redirect(adminConsoleUrl.toString()); return; } - ctx.redirect('/console/welcome'); + ctx.redirect(appendPath(adminConsoleUrl, '/welcome').toString()); }; }