1
1
import { auth } from "@/auth" ;
2
2
import Club from "@/models/Club" ;
3
3
import { NextResponse } from "next/server" ;
4
+ import CryptoJS from "crypto-js" ;
4
5
5
6
export const dynamic = "force-dynamic" ;
6
7
@@ -12,19 +13,30 @@ export async function GET(request: Request, { params }: { params: Promise<{ id:
12
13
if ( clubRes . status !== 200 ) return NextResponse . json ( { status : clubRes . status } ) ;
13
14
const clubData = ( await clubRes . json ( ) ) as Club ;
14
15
const session = await auth ( ) ;
15
- if ( ! session && ! ( ( clubData . visible & 0x2 ) == 0x2 ) )
16
+ const apiKey = request . headers . get ( "X-Api-Key" ) ;
17
+ const sessionEmail = apiKey
18
+ ? CryptoJS . AES . decrypt ( apiKey , process . env . API_ROUTE_SECRET as string ) . toString (
19
+ CryptoJS . enc . Utf8
20
+ )
21
+ : "" ;
22
+ const checkEmail =
23
+ sessionEmail &&
24
+ ( sessionEmail . endsWith ( "@nnn.ed.jp" ) ||
25
+ sessionEmail . endsWith ( "@nnn.ac.jp" ) ||
26
+ sessionEmail . endsWith ( "@n-jr.jp" ) ) ;
27
+ if ( ! ( session || checkEmail ) && ! ( ( clubData . visible & 0x2 ) == 0x2 ) )
16
28
return NextResponse . json ( { error : "Forbidden" } , { status : 403 } ) ;
17
29
const user_clubRes = await fetch ( `${ endpoint } /user_club/?filter1=club,eq,${ id } ` ) ;
18
30
const user_clubData = (
19
31
( await user_clubRes . json ( ) ) as { records : [ { user : string } ] }
20
32
) . records . map ( ( record ) => record . user ) ;
21
33
if (
22
- session &&
23
- ! user_clubData . includes ( session ?. user ?. email || "" ) &&
34
+ ( session || checkEmail ) &&
35
+ ! user_clubData . includes ( session ?. user ?. email || sessionEmail || "" ) &&
24
36
! ( ( clubData . visible & 0x1 ) == 0x1 )
25
37
)
26
38
return NextResponse . json ( { error : "Forbidden" } , { status : 403 } ) ;
27
- if ( user_clubData . includes ( session ?. user ?. email || "" ) ) {
39
+ if ( user_clubData . includes ( session ?. user ?. email || sessionEmail || "" ) ) {
28
40
clubData . owner = user_clubData ;
29
41
}
30
42
return Response . json ( clubData ) ;
0 commit comments