-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
middleware.ts
68 lines (60 loc) · 1.9 KB
/
middleware.ts
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
import { type NextRequest, NextResponse } from 'next/server';
import { type CookieOptions, createServerClient } from '@supabase/ssr';
import { urls } from 'config/urls';
export async function middleware(request: NextRequest) {
const hostname = request.headers.get('host');
const url = request.nextUrl;
const currentHost = hostname?.replace(`.${urls.homeWithoutProtocol}`, '');
let response = NextResponse.next({ request: { headers: request.headers } });
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
getAll() {
return request.cookies.getAll();
},
setAll(cookiesToSet) {
cookiesToSet.forEach(({ name, value }) =>
request.cookies.set(name, value),
);
response = NextResponse.next({ request });
cookiesToSet.forEach(({ name, value, options }) =>
response.cookies.set(name, value, options),
);
},
},
},
);
const {
data: { user },
} = await supabase.auth.getUser();
if (currentHost === 'app') {
if (url.pathname === '/intro' || url.pathname === '/import') {
return response;
}
if (url.pathname === '/account') {
if (user) {
url.pathname = '/';
return NextResponse.redirect(url);
}
return response;
}
url.pathname = `/app${url.pathname}`;
return NextResponse.rewrite(url);
}
return response;
}
export const config = {
matcher: [
'/',
/*
* Match all request paths except for the ones starting with:
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
* Feel free to modify this pattern to include more paths.
*/
'/((?!_next/static|_next/image|favicon.ico|manifest.webmanifest|robots.txt|icons|images|demo|api/).*)',
],
};