diff --git a/cloudflare-workers/github-auth.js b/cloudflare-workers/github-auth.js index 14e9b7a..e2afa82 100644 --- a/cloudflare-workers/github-auth.js +++ b/cloudflare-workers/github-auth.js @@ -1,15 +1,57 @@ export default { async fetch(request, env) { - const url = new URL(request.url); - const clientId = env.GITHUB_CLIENT_ID; - const clientSecret = env.GITHUB_CLIENT_SECRET; - const redirectUri = env.GITHUB_REDIRECT_URI; - - // If we have a code, exchange it for an access token - if (url.searchParams.has('code')) { - const code = url.searchParams.get('code'); + const generateHTML = ({ title, content, isError = false }) => { + return new Response(` + + +
+Please close this window and try again. If the problem persists, contact support.
' : ''} + + + `, { + headers: { 'Content-Type': 'text/html' }, + status: isError ? 400 : 200 + }); + }; + + try { + const url = new URL(request.url); + const clientId = env.GITHUB_CLIENT_ID; + const clientSecret = env.GITHUB_CLIENT_SECRET; + const redirectUri = env.GITHUB_REDIRECT_URI; - // Exchange the code for an access token + if (!url.searchParams.has('code')) { + const githubAuthUrl = new URL('https://github.com/login/oauth/authorize'); + githubAuthUrl.searchParams.set('client_id', clientId); + githubAuthUrl.searchParams.set('redirect_uri', redirectUri); + githubAuthUrl.searchParams.set('scope', 'gist'); + githubAuthUrl.searchParams.set('state', crypto.randomUUID()); + return Response.redirect(githubAuthUrl.toString(), 302); + } + const tokenResponse = await fetch('https://github.com/login/oauth/access_token', { method: 'POST', headers: { @@ -19,41 +61,50 @@ export default { body: JSON.stringify({ client_id: clientId, client_secret: clientSecret, - code: code, + code: url.searchParams.get('code'), redirect_uri: redirectUri }) }); const tokenData = await tokenResponse.json(); - // Return HTML that stores the token and closes the window - return new Response(` - - - -Warning: Unable to store token in localStorage
'; + } + + ` + }); + + } catch (error) { + return generateHTML({ + title: 'Unexpected Error', + content: ` +An unexpected error occurred during authentication.
+Details: ${error.message}
+ `, + isError: true }); } - - // If no code, redirect to GitHub OAuth - const githubAuthUrl = new URL('https://github.com/login/oauth/authorize'); - githubAuthUrl.searchParams.set('client_id', clientId); - githubAuthUrl.searchParams.set('redirect_uri', redirectUri); - githubAuthUrl.searchParams.set('scope', 'gist'); - githubAuthUrl.searchParams.set('state', crypto.randomUUID()); - - return Response.redirect(githubAuthUrl.toString(), 302); } };