Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 1 addition & 54 deletions src/app/dashboard/account/route.ts
Original file line number Diff line number Diff line change
@@ -1,56 +1,22 @@
import { AUTH_URLS, PROTECTED_URLS } from '@/configs/urls'
import { l } from '@/lib/clients/logger/logger'
import { createClient } from '@/lib/clients/supabase/server'
import { encodedRedirect } from '@/lib/utils/auth'
import { setTeamCookies } from '@/lib/utils/cookies'
import { resolveUserTeam } from '@/server/team/resolve-user-team'
import { NextRequest, NextResponse } from 'next/server'

export async function GET(request: NextRequest) {
l.debug(
{
key: 'account_route:start',
url: request.url,
},
'account route - start'
)

const supabase = await createClient()
const { data, error } = await supabase.auth.getUser()

l.debug(
{
key: 'account_route:user_auth',
hasUser: !!data?.user,
userId: data?.user?.id,
hasError: !!error,
},
'account route - user auth'
)

if (error || !data.user) {
l.debug(
{
key: 'account_route:auth_redirect',
redirectTo: '/sign-in',
},
'account route - auth redirect'
)
return NextResponse.redirect(new URL('/sign-in', request.url))
return NextResponse.redirect(new URL(AUTH_URLS.SIGN_IN, request.url))
}

// Resolve team for the user
const team = await resolveUserTeam(data.user.id)

if (!team) {
l.debug(
{
key: 'account_route:no_teams',
userId: data.user.id,
},
'account route - no teams found, redirecting to sign-in'
)

// UNEXPECTED STATE - sign out and redirect to sign-in
await supabase.auth.signOut()

Expand All @@ -63,16 +29,6 @@ export async function GET(request: NextRequest) {
)
}

l.debug(
{
key: 'account_route:team_resolved',
teamId: team.id,
teamSlug: team.slug,
source: team.source,
},
'account route - team resolved'
)

// Set team cookies for persistence
await setTeamCookies(team.id, team.slug)

Expand All @@ -87,14 +43,5 @@ export async function GET(request: NextRequest) {
redirectUrl.searchParams.set(key, value)
})

l.debug(
{
key: 'account_route:redirect',
redirectPath: redirectUrl.toString(),
teamIdentifier: team.slug || team.id,
},
'account route - redirecting to account settings'
)

return NextResponse.redirect(redirectUrl)
}
55 changes: 0 additions & 55 deletions src/app/dashboard/route.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { AUTH_URLS, PROTECTED_URLS } from '@/configs/urls'
import { l } from '@/lib/clients/logger/logger'
import { createClient } from '@/lib/clients/supabase/server'
import { encodedRedirect } from '@/lib/utils/auth'
import { setTeamCookies } from '@/lib/utils/cookies'
Expand All @@ -24,51 +23,17 @@ export async function GET(request: NextRequest) {
const searchParams = request.nextUrl.searchParams
const tab = searchParams.get('tab')

l.debug(
{
key: 'dashboard_route:start',
tab,
url: request.url,
},
'dashboard route - start'
)

const supabase = await createClient()

const { data, error } = await supabase.auth.getUser()

l.debug(
{
key: 'dashboard_route:user_auth',
hasUser: !!data?.user,
userId: data?.user?.id,
hasError: !!error,
},
'dashboard route - user auth'
)

if (error || !data.user) {
l.debug(
{
key: 'dashboard_route:auth_redirect',
redirectTo: '/sign-in',
},
'dashboard route - auth redirect'
)
return NextResponse.redirect(new URL('/sign-in', request.url))
}

const team = await resolveUserTeam(data.user.id)

if (!team) {
l.debug(
{
key: 'dashboard_route:no_teams',
userId: data.user.id,
},
'dashboard route - no teams found, redirecting to sign-in'
)

// UNEXPECTED STATE - sign out and redirect to sign-in
await supabase.auth.signOut()

Expand All @@ -81,16 +46,6 @@ export async function GET(request: NextRequest) {
)
}

l.debug(
{
key: 'dashboard_route:team_resolved',
teamId: team.id,
teamSlug: team.slug,
source: team.source,
},
'dashboard route - team resolved'
)

// Set team cookies for persistence
await setTeamCookies(team.id, team.slug)

Expand All @@ -100,15 +55,5 @@ export async function GET(request: NextRequest) {
? urlGenerator(team.slug || team.id)
: PROTECTED_URLS.SANDBOXES(team.slug || team.id)

l.debug(
{
key: 'dashboard_route:redirect',
tab,
redirectPath,
teamIdentifier: team.slug || team.id,
},
'dashboard route - redirecting to tab'
)

return NextResponse.redirect(new URL(redirectPath, request.url))
}
103 changes: 13 additions & 90 deletions src/lib/utils/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,105 +46,28 @@ export async function generateE2BUserAccessToken(supabaseAccessToken: string) {
return res.data
}

/**
* Resolves team metadata from cookies.
* If no metadata is found, it redirects to the dashboard.
*/
export const getTeamMetadataFromCookiesCache = cache(
async (
teamIdOrSlug: string,
cookieTeamId: string,
cookieTeamSlug: string
) => {
const isSensical =
cookieTeamId === teamIdOrSlug || cookieTeamSlug === teamIdOrSlug
const isUUID = z.uuid().safeParse(cookieTeamId).success

l.debug(
{
key: 'get_team_metadata_from_cookies:validation',
teamIdOrSlug,
cookieTeamId,
cookieTeamSlug,
isSensical,
isUUID,
},
'validating team metadata'
)

if (isUUID && isSensical) {
l.debug(
{
key: 'get_team_metadata_from_cookies:success',
teamIdOrSlug,
cookieTeamId,
cookieTeamSlug,
},
'successfully resolved team metadata from cookies'
)
return {
id: cookieTeamId,
slug: cookieTeamSlug,
}
}

l.debug(
{
key: 'get_team_metadata_from_cookies:invalid_data',
teamIdOrSlug,
cookieTeamId,
cookieTeamSlug,
isSensical,
isUUID,
},
'invalid team data, returning null'
)
return null
}
)

export const getTeamMetadataFromCookiesMemo = async (teamIdOrSlug: string) => {
export const getTeamMetadataFromCookies = async (teamIdOrSlug: string) => {
const cookiesStore = await cookies()

l.debug(
{
key: 'get_team_metadata_from_cookies:start',
cookiesStore: cookiesStore.getAll(),
},
'resolving team metadata from cookies'
)

const cookieTeamId = cookiesStore.get(COOKIE_KEYS.SELECTED_TEAM_ID)?.value
const cookieTeamSlug = cookiesStore.get(COOKIE_KEYS.SELECTED_TEAM_SLUG)?.value

l.debug(
{
key: 'get_team_metadata_from_cookies:start',
hasId: !!cookieTeamId,
hasSlug: !!cookieTeamSlug,
cookieTeamId,
cookieTeamSlug,
},
'resolving team metadata from cookies'
)

if (!cookieTeamId || !cookieTeamSlug) {
l.debug(
{
key: 'get_team_metadata_from_cookies:missing_data',
hasId: !!cookieTeamId,
hasSlug: !!cookieTeamSlug,
},
'missing team data in cookies, returning null'
)
return null
}

return getTeamMetadataFromCookiesCache(
teamIdOrSlug,
cookieTeamId,
cookieTeamSlug
)
const isSensical =
cookieTeamId === teamIdOrSlug || cookieTeamSlug === teamIdOrSlug
const isUUID = z.uuid().safeParse(cookieTeamId).success

if (isUUID && isSensical) {
return {
id: cookieTeamId,
slug: cookieTeamSlug,
}
}

return null
}

/**
Expand Down
Loading
Loading