Graphical PDS migrator for AT Protocol
1import { oauthClient } from "../../../lib/oauth/client.ts"; 2import { getOauthSession } from "../../../lib/oauth/sessions.ts"; 3import { define } from "../../../utils.ts"; 4 5export const handler = define.handlers({ 6 async GET(ctx) { 7 const req = ctx.req; 8 const url = new URL(req.url); 9 const params = url.searchParams; 10 const baseUrl = `${url.protocol}//${url.host}`; 11 12 // Log incoming parameters for debugging 13 console.log("OAuth callback received params:", { 14 state: params.get("state"), 15 iss: params.get("iss"), 16 code: params.get("code"), 17 }); 18 19 try { 20 if (!params.get("code")) { 21 throw new Error("No code parameter received"); 22 } 23 24 // Get the oauth session first 25 const { session } = await oauthClient.callback(params); 26 27 if (!session?.did) { 28 throw new Error("No DID received in session"); 29 } 30 31 // Create response with session cookie 32 const response = new Response(null, { 33 status: 302, 34 headers: new Headers({ 35 "Location": "/login/callback", 36 }), 37 }); 38 39 // Create and save our client session 40 const clientSession = await getOauthSession(req, response); 41 clientSession.did = session.did; 42 await clientSession.save(); 43 44 // Log success with cookie details 45 console.info( 46 `OAuth callback successful for DID: ${session.did}, redirecting to /login/callback`, 47 { 48 cookies: response.headers.get("Set-Cookie"), 49 }, 50 ); 51 52 return response; 53 } catch (error: unknown) { 54 // Log detailed error information 55 const err = error instanceof Error ? error : new Error(String(error)); 56 57 console.error({ 58 error: err.message, 59 stack: err.stack, 60 params: Object.fromEntries(params.entries()), 61 }, "OAuth callback failed"); 62 63 return Response.redirect(`${baseUrl}/login/callback?error=auth`); 64 } 65 }, 66});