forked from Transparency/kgroad-frontend2
52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
import { withAuth } from "next-auth/middleware";
|
|
import createIntlMiddleware from "next-intl/middleware";
|
|
import { NextRequest } from "next/server";
|
|
import { locales, localePrefix } from "./shared/config/navigation";
|
|
|
|
const privatePages = [
|
|
"/profile",
|
|
"/profile/personal",
|
|
"/profile/my-reports",
|
|
"/create-report",
|
|
];
|
|
|
|
const intlMiddleware = createIntlMiddleware({
|
|
locales,
|
|
localePrefix,
|
|
defaultLocale: "ru",
|
|
});
|
|
|
|
const authMiddleware = withAuth(
|
|
function onSuccess(req) {
|
|
return intlMiddleware(req);
|
|
},
|
|
{
|
|
callbacks: {
|
|
authorized: ({ token }) => token != null,
|
|
},
|
|
pages: {
|
|
signIn: "/sign-in",
|
|
},
|
|
}
|
|
);
|
|
|
|
export default function middleware(req: NextRequest) {
|
|
const publicPathnameRegex = RegExp(
|
|
`^(/(${locales.join("|")}))?(${privatePages
|
|
.flatMap((p) => (p === "/" ? ["", "/"] : p))
|
|
.join("|")})/?$`,
|
|
"i"
|
|
);
|
|
const isPublicPage = publicPathnameRegex.test(req.nextUrl.pathname);
|
|
|
|
if (!isPublicPage) {
|
|
return intlMiddleware(req);
|
|
} else {
|
|
return (authMiddleware as any)(req);
|
|
}
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ["/((?!api|_next|.*\\..*).*)"],
|
|
};
|