diff --git a/cloud/app/src/context/auth.ts b/cloud/app/src/context/auth.ts index e04ccdb0..5cf366ca 100644 --- a/cloud/app/src/context/auth.ts +++ b/cloud/app/src/context/auth.ts @@ -22,8 +22,8 @@ export const getActor = async (): Promise => { const auth = await useAuthSession() const splits = url.pathname.split("/").filter(Boolean) if (splits[0] !== "workspace") { - if (auth.data.current) { - const current = auth.data.account[auth.data.current] + const current = auth.data.account[auth.data.current ?? ""] + if (current) { return { type: "account", properties: { diff --git a/cloud/app/src/routes/auth/callback.ts b/cloud/app/src/routes/auth/callback.ts index 4e38df07..23025b54 100644 --- a/cloud/app/src/routes/auth/callback.ts +++ b/cloud/app/src/routes/auth/callback.ts @@ -27,5 +27,5 @@ export async function GET(input: APIEvent) { current: id, } }) - return redirect("/") + return redirect("/auth") } diff --git a/cloud/app/src/routes/auth/index.ts b/cloud/app/src/routes/auth/index.ts new file mode 100644 index 00000000..308ae2d1 --- /dev/null +++ b/cloud/app/src/routes/auth/index.ts @@ -0,0 +1,13 @@ +import { Account } from "@opencode/cloud-core/account.js" +import { redirect } from "@solidjs/router" +import type { APIEvent } from "@solidjs/start/server" +import { withActor } from "~/context/auth.withActor" + +export async function GET(input: APIEvent) { + try { + const workspaces = await withActor(async () => Account.workspaces()) + return redirect(`/workspace/${workspaces[0].id}`) + } catch { + return redirect("/auth/authorize") + } +} diff --git a/cloud/app/src/routes/auth/logout.ts b/cloud/app/src/routes/auth/logout.ts deleted file mode 100644 index 166466ef..00000000 --- a/cloud/app/src/routes/auth/logout.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { APIEvent } from "@solidjs/start/server" -import { AuthClient } from "~/context/auth" - -export async function GET(input: APIEvent) { - const result = await AuthClient.authorize(new URL("./callback", input.request.url).toString(), "code") - return Response.redirect(result.url, 302) -} diff --git a/cloud/app/src/routes/index.tsx b/cloud/app/src/routes/index.tsx index 4cc64fea..deb7be7e 100644 --- a/cloud/app/src/routes/index.tsx +++ b/cloud/app/src/routes/index.tsx @@ -89,11 +89,7 @@ export default function Home() {  /  Sign in diff --git a/cloud/app/src/routes/workspace.tsx b/cloud/app/src/routes/workspace.tsx index c8c05ef4..5149954f 100644 --- a/cloud/app/src/routes/workspace.tsx +++ b/cloud/app/src/routes/workspace.tsx @@ -23,10 +23,10 @@ const logout = action(async () => { if (current) await auth.update((val) => { delete val.account[current] + const first = Object.keys(val.account)[0] + val.current = first return val }) - - return redirect("/") }) export default function WorkspaceLayout(props: RouteSectionProps) { @@ -43,7 +43,7 @@ export default function WorkspaceLayout(props: RouteSectionProps) {
{userInfo()?.user.email} -
+ location.href = "/"} action={logout} method="post">