Repository navigation
Expand file tree
/
Copy pathproxy.ts
More file actions
85 lines (70 loc) · 1.41 KB
/
Copy pathproxy.ts
File metadata and controls
85 lines (70 loc) · 1.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { NextResponse } from "next/server";
import { auth } from "./auth";
const authRoutes = [
"/login",
"/register",
];
const protectedRoutes = [
"/dashboard",
"/chat",
"/files",
"/analytics",
"/pricing",
"/settings",
];
export default auth(function proxy(req) {
const isLoggedIn = !!req.auth;
const pathname =
req.nextUrl.pathname;
const isAuthRoute =
authRoutes.includes(pathname);
const isProtectedRoute =
protectedRoutes.some((route) =>
pathname.startsWith(route),
);
// Reverse protection
if (isAuthRoute && isLoggedIn) {
return NextResponse.redirect(
new URL("/dashboard", req.url),
);
}
// Dashboard protection
if (
isProtectedRoute &&
!isLoggedIn
) {
return NextResponse.redirect(
new URL("/login", req.url),
);
}
const response = NextResponse.next();
response.headers.set(
"X-Frame-Options",
"DENY",
);
response.headers.set(
"X-Content-Type-Options",
"nosniff",
);
response.headers.set(
"Referrer-Policy",
"strict-origin-when-cross-origin",
);
response.headers.set(
"Permissions-Policy",
"camera=(), microphone=(), geolocation=()",
);
return response;
});
export const config = {
matcher: [
"/login",
"/register",
"/dashboard/:path*",
"/chat/:path*",
"/files/:path*",
"/analytics/:path*",
"/pricing/:path*",
"/settings/:path*",
],
};