mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-11 09:58:28 +00:00
* Feat: OAuth support for external apps * Fix: OAuth screen --------- Co-authored-by: Manoj K <saimanoj58@gmail.com>
44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import { type LoaderFunctionArgs, json } from "@remix-run/node";
|
|
import { oauth2Service } from "~/services/oauth2.server";
|
|
|
|
export const loader = async ({ request }: LoaderFunctionArgs) => {
|
|
try {
|
|
// Get authorization header
|
|
const authHeader = request.headers.get("authorization");
|
|
|
|
if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
return json(
|
|
{ error: "invalid_token", error_description: "Missing or invalid authorization header" },
|
|
{ status: 401 }
|
|
);
|
|
}
|
|
|
|
const token = authHeader.substring(7); // Remove "Bearer " prefix
|
|
|
|
// Validate token and get user info
|
|
try {
|
|
const userInfo = await oauth2Service.getUserInfo(token);
|
|
return json(userInfo);
|
|
} catch (error) {
|
|
return json(
|
|
{ error: "invalid_token", error_description: "Invalid or expired access token" },
|
|
{ status: 401 }
|
|
);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error("OAuth2 userinfo endpoint error:", error);
|
|
return json(
|
|
{ error: "server_error", error_description: "Internal server error" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
};
|
|
|
|
// This endpoint only supports GET
|
|
export const action = () => {
|
|
return json(
|
|
{ error: "invalid_request", error_description: "Only GET method is allowed" },
|
|
{ status: 405 }
|
|
);
|
|
}; |