47 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { NextApiRequest, NextApiResponse } from "next";
 | |
| 
 | |
| import jackson from "@lib/jackson";
 | |
| 
 | |
| const extractAuthToken = (req: NextApiRequest) => {
 | |
|   const authHeader = req.headers["authorization"];
 | |
|   const parts = (authHeader || "").split(" ");
 | |
|   if (parts.length > 1) {
 | |
|     return parts[1];
 | |
|   }
 | |
| 
 | |
|   return null;
 | |
| };
 | |
| 
 | |
| export default async function handler(req: NextApiRequest, res: NextApiResponse) {
 | |
|   try {
 | |
|     if (req.method !== "GET") {
 | |
|       throw new Error("Method not allowed");
 | |
|     }
 | |
| 
 | |
|     const { oauthController } = await jackson();
 | |
|     let token: string | null = extractAuthToken(req);
 | |
| 
 | |
|     // check for query param
 | |
|     if (!token) {
 | |
|       let arr: string[] = [];
 | |
|       arr = arr.concat(req.query.access_token);
 | |
|       if (arr[0].length > 0) {
 | |
|         token = arr[0];
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (!token) {
 | |
|       res.status(401).json({ message: "Unauthorized" });
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     const profile = await oauthController.userInfo(token);
 | |
| 
 | |
|     res.json(profile);
 | |
|   } catch (err: any) {
 | |
|     console.error("userinfo error:", err);
 | |
|     const { message, statusCode = 500 } = err;
 | |
| 
 | |
|     res.status(statusCode).json({ message });
 | |
|   }
 | |
| }
 | 
