diff --git a/src/packages/cloud/src/Middleware.ts b/src/packages/cloud/src/Middleware.ts index 3fb7cae4..6a27b35a 100644 --- a/src/packages/cloud/src/Middleware.ts +++ b/src/packages/cloud/src/Middleware.ts @@ -7,6 +7,7 @@ export function middleware(request: NextRequest) { const {searchParams, pathname} = request.nextUrl const callbackUrl = searchParams.get('callbackUrl') const selectNamespace = searchParams.get('selectNamespace') + const cancelUrl = searchParams.get('cancelUrl') const authPaths = ["/email", "/login", "/password", "/redirect", "/register", "/callback"] const isAuthPath = authPaths.some(path => pathname.startsWith(path)) const isRedirectPath = pathname.startsWith("/redirect") @@ -26,29 +27,35 @@ export function middleware(request: NextRequest) { const redirectUrl = new URL('/redirect', request.url) redirectUrl.searchParams.set('callbackUrl', callbackUrl) if (selectNamespace) redirectUrl.searchParams.set('selectNamespace', selectNamespace) + if (cancelUrl) redirectUrl.searchParams.set('cancelUrl', cancelUrl) const response = NextResponse.redirect(redirectUrl) response.cookies.set('codezero_callback', callbackUrl, cookieOptions) if (selectNamespace) response.cookies.set('codezero_selectNamespace', selectNamespace, cookieOptions) + if (cancelUrl) response.cookies.set('codezero_cancel', cancelUrl, cookieOptions) return response } const redirectUrl = request.nextUrl.clone() redirectUrl.searchParams.delete('callbackUrl') redirectUrl.searchParams.delete('selectNamespace') + redirectUrl.searchParams.delete('cancelUrl') const response = NextResponse.redirect(redirectUrl) response.cookies.set('codezero_callback', callbackUrl, cookieOptions) if (selectNamespace) response.cookies.set('codezero_selectNamespace', selectNamespace, cookieOptions) + if (cancelUrl) response.cookies.set('codezero_cancel', cancelUrl, cookieOptions) return response } const callbackCookie = request.cookies.get('codezero_callback')?.value const selectNamespaceCookie = request.cookies.get('codezero_selectNamespace')?.value + const cancelCookie = request.cookies.get('codezero_cancel')?.value if (callbackCookie) { if (!isAuthPath) { const redirectUrl = new URL('/redirect', request.url) redirectUrl.searchParams.set('callbackUrl', callbackCookie) if (selectNamespaceCookie) redirectUrl.searchParams.set('selectNamespace', selectNamespaceCookie) + if (cancelCookie) redirectUrl.searchParams.set('cancelUrl', cancelCookie) return NextResponse.redirect(redirectUrl) } @@ -56,6 +63,7 @@ export function middleware(request: NextRequest) { const url = request.nextUrl.clone() url.searchParams.set('callbackUrl', callbackCookie) if (selectNamespaceCookie) url.searchParams.set('selectNamespace', selectNamespaceCookie) + if (cancelCookie) url.searchParams.set('cancelUrl', cancelCookie) return NextResponse.redirect(url) } } diff --git a/src/packages/cloud/src/user/pages/UserRedirectPage.tsx b/src/packages/cloud/src/user/pages/UserRedirectPage.tsx index 81b58e4e..fde85d62 100644 --- a/src/packages/cloud/src/user/pages/UserRedirectPage.tsx +++ b/src/packages/cloud/src/user/pages/UserRedirectPage.tsx @@ -37,6 +37,7 @@ export const UserRedirectPage: React.FC = () => { const params = useSearchParams() const callbackUrl = params.get("callbackUrl") const selectNamespace = params.get("selectNamespace") + const cancelUrl = params.get("cancelUrl") const router = useRouter() const isValidCallback = isValidRedirect(callbackUrl) const organizationService = useService(OrganizationService) @@ -146,7 +147,8 @@ export const UserRedirectPage: React.FC = () => {