File size: 1,663 Bytes
b841f1a
 
 
3ba9c0c
 
f80b091
 
 
 
 
 
3ba9c0c
 
38448fc
 
3ba9c0c
f80b091
 
3ba9c0c
f80b091
 
 
 
 
 
 
 
38448fc
 
 
 
 
 
 
f80b091
 
 
 
 
 
 
 
 
 
 
 
 
 
38448fc
 
 
 
 
 
f80b091
 
 
 
 
b841f1a
bfbf1a7
 
 
 
 
 
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
import NextAuth, { type DefaultSession } from 'next-auth';
import GitHub from 'next-auth/providers/github';
import Google from 'next-auth/providers/google';

declare module 'next-auth' {
  interface Session {
    user: {
      /** The user's id. */
      id: string;
    } & DefaultSession['user'];
  }
}

const restrictedPath = ['/project'];

export const {
  handlers: { GET, POST },
  auth,
} = NextAuth({
  providers: [
    GitHub,
    Google({
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_SECRET!,
    }),
  ],
  callbacks: {
    // signIn({ profile }) {
    //   if (profile?.email?.endsWith('@landing.ai')) {
    //     return !!profile;
    //   } else {
    //     return '/unauthorized';
    //   }
    // },
    jwt({ token, profile }) {
      if (profile) {
        token.id = profile.id || profile.sub;
        token.image = profile.avatar_url || profile.picture;
      }
      return token;
    },
    session: ({ session, token }) => {
      if (session?.user && token?.id) {
        session.user.id = String(token.id);
      }
      return session;
    },
    authorized({ request, auth }) {
      const isAdmin = !!auth?.user?.email?.endsWith('landing.ai');
      return restrictedPath.find(path =>
        request.nextUrl.pathname.startsWith(path),
      )
        ? isAdmin
        : true;
    },
  },
  pages: {
    signIn: '/sign-in', // overrides the next-auth default signin page https://authjs.dev/guides/basics/pages
  },
});

export async function authEmail() {
  const session = await auth();
  const email = session?.user?.email;
  return { email, isAdmin: !!email?.endsWith('landing.ai') };
}