fix: send headers to error rewrites

This commit is contained in:
Michael Zetterberg
2024-08-23 09:00:08 +02:00
parent 159114a082
commit efd2e1730c
5 changed files with 42 additions and 33 deletions

View File

@@ -1,11 +1,5 @@
import { getIntl } from "@/i18n"
import NotFound from "@/components/Current/NotFound"
export default async function NotFound() {
const { formatMessage } = await getIntl()
return (
<main>
<h1>{formatMessage({ id: "Not found" })}</h1>
<p>{formatMessage({ id: "Could not find requested resource" })}</p>
</main>
)
export default function NotFoundPage() {
return <NotFound />
}

View File

@@ -1,18 +1,21 @@
import { NextMiddleware, NextResponse } from "next/server"
import { Lang } from "./constants/languages"
import * as authRequired from "./middlewares/authRequired"
import * as bookingFlow from "./middlewares/bookingFlow"
import * as cmsContent from "./middlewares/cmsContent"
import * as currentWebLogin from "./middlewares/currentWebLogin"
import * as currentWebLoginEmail from "./middlewares/currentWebLoginEmail"
import * as currentWebLogout from "./middlewares/currentWebLogout"
import * as handleAuth from "./middlewares/handleAuth"
import * as myPages from "./middlewares/myPages"
import * as webView from "./middlewares/webView"
import { findLang } from "./utils/languages"
import { Lang } from "@/constants/languages"
import * as authRequired from "@/middlewares/authRequired"
import * as bookingFlow from "@/middlewares/bookingFlow"
import * as cmsContent from "@/middlewares/cmsContent"
import * as currentWebLogin from "@/middlewares/currentWebLogin"
import * as currentWebLoginEmail from "@/middlewares/currentWebLoginEmail"
import * as currentWebLogout from "@/middlewares/currentWebLogout"
import * as handleAuth from "@/middlewares/handleAuth"
import * as myPages from "@/middlewares/myPages"
import { getDefaultRequestHeaders } from "@/middlewares/utils"
import * as webView from "@/middlewares/webView"
import { findLang } from "@/utils/languages"
export const middleware: NextMiddleware = async (request, event) => {
const headers = getDefaultRequestHeaders(request)
const lang = findLang(request.nextUrl.pathname)
if (!lang) {
// Lang is required for all our middleware.
@@ -21,9 +24,13 @@ export const middleware: NextMiddleware = async (request, event) => {
// which we do not want. We can move to that once all Current stuff is gone.
// Default to English if no lang is found.
headers.set("x-lang", Lang.en)
return NextResponse.rewrite(
new URL(`/${Lang.en}/middleware-error/404`, request.nextUrl),
{
request: {
headers,
},
status: 404,
statusText: "Not found",
}
@@ -64,6 +71,9 @@ export const middleware: NextMiddleware = async (request, event) => {
return NextResponse.rewrite(
new URL(`/${lang}/middleware-error/${e.status}`, request.nextUrl),
{
request: {
headers,
},
status: e.status,
statusText: e.statusText,
}
@@ -75,6 +85,9 @@ export const middleware: NextMiddleware = async (request, event) => {
return NextResponse.rewrite(
new URL(`/${lang}/middleware-error/500`, request.nextUrl),
{
request: {
headers,
},
status: 500,
statusText: "Internal Server Error",
}
@@ -82,7 +95,11 @@ export const middleware: NextMiddleware = async (request, event) => {
}
// Follow through with normal App router rules.
return NextResponse.next()
return NextResponse.next({
request: {
headers,
},
})
}
// See "Matching Paths" below to learn more

View File

@@ -38,7 +38,12 @@ export const middleware: NextMiddleware = async (request) => {
if (isCurrent) {
searchParams.set("uri", pathNameWithoutLang.replace("/preview", ""))
return NextResponse.rewrite(
new URL(`/${lang}/preview-current?${searchParams.toString()}`, nextUrl)
new URL(`/${lang}/preview-current?${searchParams.toString()}`, nextUrl),
{
request: {
headers,
},
}
)
}

View File

@@ -55,6 +55,9 @@ export const middleware: NextMiddleware = async (request) => {
headers: {
"Set-Cookie": `webviewToken=0; Max-Age=0; Secure; HttpOnly; Path=/; SameSite=Strict;`,
},
request: {
headers,
},
}
)
}

View File

@@ -23,17 +23,7 @@ export const { createCallerFactory, mergeRouters, router } = t
export const publicProcedure = t.procedure
export const contentstackBaseProcedure = t.procedure.use(async function (opts) {
if (!opts.ctx.lang) {
const input = await opts.getRawInput()
const parsedInput = langInput.safeParse(input)
if (!parsedInput.success) {
throw badRequestError("Missing Lang in tRPC context")
}
return opts.next({
ctx: {
lang: parsedInput.data.lang,
},
})
throw badRequestError("Missing Lang in tRPC context")
}
return opts.next({