1
1
import { createClient } from "@/lib/database/server" ;
2
+ import { createServiceClient } from "@/lib/database/service" ;
2
3
import { NextResponse } from "next/server" ;
3
4
4
- interface ServerData {
5
- id : string ;
6
- name : string ;
7
- icon : string ;
8
- owner : boolean ;
9
- permissions : number ;
10
- permissions_new : string ;
11
- features : any [ ] ;
5
+ interface DiscordGuildMemberResponse {
6
+ message ?: string ;
7
+ code ?: number ;
8
+ avatar : string | null ;
9
+ banner : string | null ;
10
+ communication_disabled_until : string | null ;
11
+ flags : number ;
12
+ joined_at : string ;
13
+ nick : string ;
14
+ pending : boolean ;
15
+ premium_since : string | null ;
16
+ roles : string [ ] ;
17
+ unusual_dm_activity_until : string ;
18
+ user : {
19
+ id : string ;
20
+ username : string ;
21
+ avatar : string ;
22
+ discriminator : string ;
23
+ public_flags : number ;
24
+ flags : number ;
25
+ banner : string | null ;
26
+ accent_color : string | null ;
27
+ global_name : string ;
28
+ avatar_decoration_data : string ;
29
+ banner_color : string ;
30
+ clan : string ;
31
+ } ;
32
+ mute : boolean ;
33
+ deaf : boolean ;
34
+ bio : string ;
12
35
}
13
36
14
37
export async function GET ( request : Request ) {
@@ -18,42 +41,35 @@ export async function GET(request: Request) {
18
41
19
42
if ( code ) {
20
43
const supabase = createClient ( ) ;
21
- await supabase . auth . exchangeCodeForSession ( code ) ;
44
+ const {
45
+ data : { session, user } ,
46
+ } = await supabase . auth . exchangeCodeForSession ( code ) ;
22
47
23
- const { data } = await supabase . auth . getSession ( ) ;
24
-
25
- if ( ! data . session ) {
26
- return NextResponse . redirect ( origin ) ;
48
+ if ( ! session ) {
49
+ return NextResponse . redirect ( `${ origin } /403` ) ;
27
50
}
28
51
29
52
const headers = new Headers ( ) ;
30
- headers . append (
31
- "Authorization" ,
32
- `Bearer ${ data . session ?. provider_token } `
33
- ) ;
34
-
35
- let servers : ServerData [ ] ;
36
- try {
37
- const userServers = await fetch (
38
- `https://discord.com/api/users/@me/guilds` ,
39
- { headers }
40
- ) ;
41
- servers = await userServers . json ( ) ;
42
- } catch ( error ) {
43
- console . error ( "Error fetching user servers:" , error ) ;
44
- return NextResponse . redirect ( origin ) ;
45
- }
53
+ headers . append ( "Authorization" , `Bearer ${ session . provider_token } ` ) ;
54
+
55
+ const servers : DiscordGuildMemberResponse = await fetch (
56
+ `https://discord.com/api/users/@me/guilds/408711970305474560/member` ,
57
+ { headers }
58
+ ) . then ( ( res ) => res . json ( ) ) ;
46
59
47
- const serverId = "408711970305474560" ;
48
- const serverIsInList = servers . some ( ( server ) => server . id === serverId ) ;
60
+ if ( ! servers || servers ?. code ) {
61
+ const serviceClient = createServiceClient ( ) ;
49
62
50
- if ( serverIsInList ) {
51
- // YETI is in the list of servers
52
- return NextResponse . redirect ( `${ origin } /profile` ) ;
53
- } else {
54
- // YETI is not in the list of servers
63
+ await serviceClient . auth . admin . deleteUser ( user . id ) ;
55
64
await supabase . auth . signOut ( ) ;
56
- return NextResponse . redirect ( origin ) ;
65
+ return NextResponse . redirect ( ` ${ origin } /403` ) ;
57
66
}
67
+
68
+ await supabase
69
+ . from ( "profile" )
70
+ . update ( { nick : servers . nick } )
71
+ . eq ( "id" , user . id ) ;
72
+
73
+ return NextResponse . redirect ( `${ origin } /profile` ) ;
58
74
}
59
75
}
0 commit comments