summaryrefslogtreecommitdiffhomepage
path: root/packages/console
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-12-26 17:32:37 -0500
committerFrank <[email protected]>2025-12-26 17:32:39 -0500
commit52b99622ad0c01d11a5f8a5826ed955f6aa13dca (patch)
tree8fd3e0fb81b115276dac2fb6a84a9e4c825b12b2 /packages/console
parenta15397cd89881c36c19b3f909ebceddb47aeca90 (diff)
downloadopencode-52b99622ad0c01d11a5f8a5826ed955f6aa13dca.tar.gz
opencode-52b99622ad0c01d11a5f8a5826ed955f6aa13dca.zip
zen: add context for login errors
Diffstat (limited to 'packages/console')
-rw-r--r--packages/console/app/src/routes/auth/callback.ts54
-rw-r--r--packages/console/function/src/auth.ts6
2 files changed, 36 insertions, 24 deletions
diff --git a/packages/console/app/src/routes/auth/callback.ts b/packages/console/app/src/routes/auth/callback.ts
index a793b8596..2f8781e98 100644
--- a/packages/console/app/src/routes/auth/callback.ts
+++ b/packages/console/app/src/routes/auth/callback.ts
@@ -5,28 +5,36 @@ import { useAuthSession } from "~/context/auth.session"
export async function GET(input: APIEvent) {
const url = new URL(input.request.url)
- const code = url.searchParams.get("code")
- if (!code) throw new Error("No code found")
- const result = await AuthClient.exchange(code, `${url.origin}${url.pathname}`)
- if (result.err) {
- throw new Error(result.err.message)
- }
- const decoded = AuthClient.decode(result.tokens.access, {} as any)
- if (decoded.err) throw new Error(decoded.err.message)
- const session = await useAuthSession()
- const id = decoded.subject.properties.accountID
- await session.update((value) => {
- return {
- ...value,
- account: {
- ...value.account,
- [id]: {
- id,
- email: decoded.subject.properties.email,
+ try {
+ const code = url.searchParams.get("code")
+ if (!code) throw new Error("No code found")
+ const result = await AuthClient.exchange(code, `${url.origin}${url.pathname}`)
+ if (result.err) throw new Error(result.err.message)
+ const decoded = AuthClient.decode(result.tokens.access, {} as any)
+ if (decoded.err) throw new Error(decoded.err.message)
+ const session = await useAuthSession()
+ const id = decoded.subject.properties.accountID
+ await session.update((value) => {
+ return {
+ ...value,
+ account: {
+ ...value.account,
+ [id]: {
+ id,
+ email: decoded.subject.properties.email,
+ },
},
- },
- current: id,
- }
- })
- return redirect("/auth")
+ current: id,
+ }
+ })
+ return redirect("/auth")
+ } catch (e: any) {
+ return new Response(
+ JSON.stringify({
+ error: e.message,
+ cause: Object.fromEntries(url.searchParams.entries()),
+ }),
+ { status: 500 },
+ )
+ }
}
diff --git a/packages/console/function/src/auth.ts b/packages/console/function/src/auth.ts
index 742e0d567..082564b21 100644
--- a/packages/console/function/src/auth.ts
+++ b/packages/console/function/src/auth.ts
@@ -123,7 +123,11 @@ export default {
},
}).then((x) => x.json())) as any
subject = user.id.toString()
- email = emails.find((x: any) => x.primary && x.verified)?.email
+
+ const primaryEmail = emails.find((x: any) => x.primary)
+ if (!primaryEmail) throw new Error("No primary email found for GitHub user")
+ if (!primaryEmail.verified) throw new Error("Primary email for GitHub user not verified")
+ email = primaryEmail.email
} else if (response.provider === "google") {
if (!response.id.email_verified) throw new Error("Google email not verified")
subject = response.id.sub as string