11import { NextResponse } from "next/server" ;
22import { createClient } from '@supabase/supabase-js' ;
3+ import { createSecureAdminToken , verifySecureAdminToken } from '@/lib/security/secure-token' ;
4+ import { sanitizeInput } from '@/lib/security/sanitization' ;
35
46// Admin verification with service role
57const supabaseUrl = process . env . NEXT_PUBLIC_SUPABASE_URL ! ;
@@ -19,11 +21,6 @@ const getAuthorizedAdmins = (): string[] => {
1921 return adminList . split ( ',' ) . map ( admin => admin . trim ( ) ) ;
2022} ;
2123
22- // Input sanitization
23- const sanitizeInput = ( input : string ) : string => {
24- return input . replace ( / [ < > ] / g, '' ) . trim ( ) ;
25- } ;
26-
2724export async function POST ( request : Request ) {
2825 try {
2926 const body = await request . json ( ) ;
@@ -52,15 +49,8 @@ export async function POST(request: Request) {
5249 if ( authorizedAdmins . includes ( sanitizedUserId ) ) {
5350 console . log ( "User found in direct admin list:" , sanitizedUserId ) ;
5451
55- // Create admin session token for subsequent requests
56- const adminSession = {
57- userId : sanitizedUserId ,
58- timestamp : Date . now ( ) ,
59- verified : true ,
60- isAdmin : true
61- } ;
62-
63- const adminToken = Buffer . from ( JSON . stringify ( adminSession ) ) . toString ( 'base64' ) ;
52+ // Create secure admin session token
53+ const adminToken = createSecureAdminToken ( sanitizedUserId ) ;
6454
6555 return NextResponse . json ( {
6656 success : true ,
@@ -108,15 +98,8 @@ export async function POST(request: Request) {
10898 if ( isAdmin ) {
10999 console . log ( "User verified as admin" ) ;
110100
111- // Create admin session token for subsequent requests
112- const adminSession = {
113- userId : sanitizedUserId ,
114- timestamp : Date . now ( ) ,
115- verified : true ,
116- isAdmin : true
117- } ;
118-
119- const adminToken = Buffer . from ( JSON . stringify ( adminSession ) ) . toString ( 'base64' ) ;
101+ // Create secure admin session token
102+ const adminToken = createSecureAdminToken ( sanitizedUserId ) ;
120103
121104 return NextResponse . json ( {
122105 success : true ,
@@ -160,12 +143,26 @@ export async function POST(request: Request) {
160143 }
161144}
162145
163- // Optional: GET method to check current admin status
146+ // GET method to check current admin status
164147export async function GET ( request : Request ) {
165148 try {
166149 const { searchParams } = new URL ( request . url ) ;
167150 const userId = searchParams . get ( "userId" ) ;
168151
152+ // Check for admin token in Authorization header
153+ const authHeader = request . headers . get ( 'authorization' ) ;
154+ if ( authHeader && authHeader . startsWith ( 'Bearer ' ) ) {
155+ const token = authHeader . substring ( 7 ) ;
156+ const verification = verifySecureAdminToken ( token ) ;
157+
158+ if ( verification . isValid ) {
159+ return NextResponse . json ( {
160+ isAdmin : true ,
161+ userId : verification . userId
162+ } ) ;
163+ }
164+ }
165+
169166 if ( ! userId ) {
170167 return NextResponse . json (
171168 { error : "User ID is required" } ,
0 commit comments