Skip to content

Commit

Permalink
Merge pull request #1294 from Sitecore/bug/multi-site-fails-with-pers…
Browse files Browse the repository at this point in the history
…onalize-rewrite

Ensure multisite response is persisted in rewrite middleware
  • Loading branch information
art-alexeyenko authored Jan 17, 2023
2 parents 909025a + f9137b3 commit d70be9b
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ class RedirectsPlugin implements MiddlewarePlugin {
* @param req<NextRequest>
* @returns Promise<NextResponse>
*/
async exec(req: NextRequest): Promise<NextResponse> {
return this.redirectsMiddleware.getHandler()(req);
async exec(req: NextRequest, res?:NextResponse): Promise<NextResponse> {
return this.redirectsMiddleware.getHandler()(req, res);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,67 @@ describe('RedirectsMiddleware', () => {
expect(finalRes.status).to.equal(res.status);
});

it('should preserve site name from response data when provided, if no redirect type defined', async () => {
const res = NextResponse.next();
const site = 'learn2grow';
res.cookies.set('sc_site', site);
const req = createRequest({
nextUrl: {
pathname: '/not-found',
locale: 'en',
clone() {
return Object.assign({}, req.nextUrl);
},
},
});

const { middleware, fetchRedirects, getSite } = createMiddleware({
pattern: 'not-found',
target: 'http://localhost:3000/found',
redirectType: 'default',
isQueryStringPreserved: true,
locale: 'en',
});

const finalRes = await middleware.getHandler()(req, res);
// eslint-disable-next-line no-unused-expressions
expect(getSite).to.not.be.called;
// eslint-disable-next-line no-unused-expressions
expect(fetchRedirects.called).to.be.true;
expect(finalRes.cookies.get('sc_site')).to.equal(site);
});

it('should preserve site name from response data when provided, if handler is disabled', async () => {
const res = NextResponse.next();
const site = 'learn2grow';
res.cookies.set('sc_site', site);
const req = createRequest({
nextUrl: {
pathname: '/not-found',
locale: 'en',
clone() {
return Object.assign({}, req.nextUrl);
},
},
});

const { middleware, fetchRedirects, getSite } = createMiddleware({
pattern: 'not-found',
target: 'http://localhost:3000/found',
redirectType: 'default',
isQueryStringPreserved: true,
locale: 'en',
disabled: () => true,
});

const finalRes = await middleware.getHandler()(req, res);
// eslint-disable-next-line no-unused-expressions
expect(getSite).to.not.be.called;
// eslint-disable-next-line no-unused-expressions
expect(fetchRedirects.called).to.be.false;
expect(finalRes.cookies.get('sc_site')).to.equal(site);
});

it('default fallback hostname is used', async () => {
const res = NextResponse.redirect('http://localhost:3000/found', 301);
const req = createRequest({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,13 @@ export class RedirectsMiddleware {
this.excludeRoute(req.nextUrl.pathname) ||
(this.config.excludeRoute && this.config.excludeRoute(req.nextUrl.pathname))
) {
return NextResponse.next();
return res || NextResponse.next();
}
// Find the redirect from result of RedirectService
const existsRedirect = await this.getExistsRedirect(req, siteName);

if (!existsRedirect) {
return NextResponse.next();
return res || NextResponse.next();
}

const url = req.nextUrl.clone();
Expand Down

0 comments on commit d70be9b

Please sign in to comment.