update cf context on id

This commit is contained in:
2025-12-18 00:20:20 -03:00
parent 8081e838a3
commit 11e8fa5a41
7 changed files with 35 additions and 21 deletions

View File

@@ -3,11 +3,14 @@ import type { Route } from './+types/authorize'
import { redirect } from 'react-router' import { redirect } from 'react-router'
import { parse } from 'cookie' import { parse } from 'cookie'
import { cloudflareContext } from '@repo/auth/context'
export async function loader({ request, context }: Route.LoaderArgs) { export async function loader({ request, context }: Route.LoaderArgs) {
const cloudflare = context.get(cloudflareContext)
const cookies = parse(request.headers.get('Cookie') || '') const cookies = parse(request.headers.get('Cookie') || '')
const url = new URL(request.url) const url = new URL(request.url)
const loginUrl = new URL('/', url.origin) const loginUrl = new URL('/', url.origin)
const authorizeUrl = new URL('/authorize', context.cloudflare.env.ISSUER_URL) const authorizeUrl = new URL('/authorize', cloudflare.env.ISSUER_URL)
authorizeUrl.search = url.search authorizeUrl.search = url.search
loginUrl.search = url.search loginUrl.search = url.search
@@ -16,7 +19,7 @@ export async function loader({ request, context }: Route.LoaderArgs) {
} }
if (!url.searchParams.has('client_id')) { if (!url.searchParams.has('client_id')) {
throw redirect(context.cloudflare.env.APP_URL) throw redirect(cloudflare.env.APP_URL)
} }
const r = await fetch(authorizeUrl.toString(), { const r = await fetch(authorizeUrl.toString(), {

View File

@@ -7,6 +7,7 @@ import { Link } from 'react-router'
import { MailIcon } from 'lucide-react' import { MailIcon } from 'lucide-react'
import { z } from 'zod' import { z } from 'zod'
import { cloudflareContext } from '@repo/auth/context'
import logo from '@repo/ui/components/logo2.svg' import logo from '@repo/ui/components/logo2.svg'
import { Button } from '@repo/ui/components/ui/button' import { Button } from '@repo/ui/components/ui/button'
import { import {
@@ -44,7 +45,8 @@ export function meta({}: Route.MetaArgs) {
} }
export async function action({ request, context }: Route.ActionArgs) { export async function action({ request, context }: Route.ActionArgs) {
const url = new URL('/forgot', context.cloudflare.env.ISSUER_URL) const cloudflare = context.get(cloudflareContext)
const url = new URL('/forgot', cloudflare.env.ISSUER_URL)
const body = await request.json() const body = await request.json()
console.log(url.toString()) console.log(url.toString())

View File

@@ -8,6 +8,7 @@ import { useForm } from 'react-hook-form'
import { Link, useFetcher } from 'react-router' import { Link, useFetcher } from 'react-router'
import { z } from 'zod' import { z } from 'zod'
import { cloudflareContext } from '@repo/auth/context'
import logo from '@repo/ui/components/logo2.svg' import logo from '@repo/ui/components/logo2.svg'
import { Button } from '@repo/ui/components/ui/button' import { Button } from '@repo/ui/components/ui/button'
import { Checkbox } from '@repo/ui/components/ui/checkbox' import { Checkbox } from '@repo/ui/components/ui/checkbox'
@@ -47,7 +48,8 @@ export function meta({}: Route.MetaArgs) {
} }
export async function action({ request, context }: Route.ActionArgs) { export async function action({ request, context }: Route.ActionArgs) {
const url = new URL('/authentication', context.cloudflare.env.ISSUER_URL) const cloudflare = context.get(cloudflareContext)
const url = new URL('/authentication', cloudflare.env.ISSUER_URL)
const formData = Object.fromEntries(await request.formData()) const formData = Object.fromEntries(await request.formData())
try { try {

View File

@@ -8,6 +8,7 @@ import { CheckCircle2Icon } from 'lucide-react'
import { useForm } from 'react-hook-form' import { useForm } from 'react-hook-form'
import { redirect, useFetcher } from 'react-router' import { redirect, useFetcher } from 'react-router'
import { cloudflareContext } from '@repo/auth/context'
import { Button } from '@repo/ui/components/ui/button' import { Button } from '@repo/ui/components/ui/button'
import { Checkbox } from '@repo/ui/components/ui/checkbox' import { Checkbox } from '@repo/ui/components/ui/checkbox'
import { import {
@@ -35,7 +36,8 @@ export function meta({}: Route.MetaArgs) {
} }
export async function action({ request, context }: Route.ActionArgs) { export async function action({ request, context }: Route.ActionArgs) {
const url = new URL('/register', context.cloudflare.env.ISSUER_URL) const cloudflare = context.get(cloudflareContext)
const url = new URL('/register', cloudflare.env.ISSUER_URL)
const body = await request.json() const body = await request.json()
const r = await fetch(url.toString(), { const r = await fetch(url.toString(), {

View File

@@ -22,7 +22,7 @@ import {
} from '@repo/ui/components/ui/form' } from '@repo/ui/components/ui/form'
import { Label } from '@repo/ui/components/ui/label' import { Label } from '@repo/ui/components/ui/label'
import { Spinner } from '@repo/ui/components/ui/spinner' import { Spinner } from '@repo/ui/components/ui/spinner'
import { request as req } from '@repo/util/request' import { cloudflareContext } from '@repo/auth/context'
import { import {
Alert, Alert,
AlertDescription, AlertDescription,
@@ -50,8 +50,8 @@ export function meta({}: Route.MetaArgs) {
} }
export async function action({ params, request, context }: Route.ActionArgs) { export async function action({ params, request, context }: Route.ActionArgs) {
const { token } = params const cloudflare = context.get(cloudflareContext)
const url = new URL(`/reset/${token}`, context.cloudflare.env.ISSUER_URL) const url = new URL(`/reset/${params.token}`, cloudflare.env.ISSUER_URL)
const body = await request.json() const body = await request.json()
const r = await fetch(url.toString(), { const r = await fetch(url.toString(), {

View File

@@ -1,5 +1,7 @@
import type { Route } from './+types/upstream' import type { Route } from './+types/upstream'
import { cloudflareContext } from '@repo/auth/context'
export const loader = proxy export const loader = proxy
export const action = proxy export const action = proxy
@@ -9,8 +11,9 @@ async function proxy({
request, request,
context context
}: Route.ActionArgs): Promise<Response> { }: Route.ActionArgs): Promise<Response> {
const cloudflare = context.get(cloudflareContext)
const { pathname, search } = new URL(request.url) const { pathname, search } = new URL(request.url)
const url = new URL(pathname + search, context.cloudflare.env.ISSUER_URL) const url = new URL(pathname + search, cloudflare.env.ISSUER_URL)
const headers = new Headers(request.headers) const headers = new Headers(request.headers)
const shouldCache = const shouldCache =
@@ -44,7 +47,7 @@ async function proxy({
}) })
// Store asynchronously (dont block response) // Store asynchronously (dont block response)
context.cloudflare.ctx.waitUntil(cache.put(cacheKey, cacheResponse)) cloudflare.ctx.waitUntil(cache.put(cacheKey, cacheResponse))
} }
const contentType = response.headers.get('content-type') || '' const contentType = response.headers.get('content-type') || ''

View File

@@ -1,14 +1,17 @@
import { createRequestHandler, RouterContextProvider } from 'react-router' import { createRequestHandler, RouterContextProvider } from 'react-router'
import { cloudflareContext } from '@repo/auth/context'
declare module 'react-router' { declare global {
export interface AppLoadContext { interface CacheStorage {
cloudflare: { default: Cache
env: Env
ctx: ExecutionContext
}
} }
} }
declare module '@repo/auth/context' {
interface CloudflareEnv extends Env {}
interface CloudflareCtx extends ExecutionContext {}
}
const requestHandler = createRequestHandler( const requestHandler = createRequestHandler(
() => import('virtual:react-router/server-build'), () => import('virtual:react-router/server-build'),
import.meta.env.MODE import.meta.env.MODE
@@ -16,11 +19,10 @@ const requestHandler = createRequestHandler(
export default { export default {
async fetch(request, env, ctx) { async fetch(request, env, ctx) {
const context = new RouterContextProvider() const context = new RouterContextProvider(
new Map([[cloudflareContext, { env, ctx }]])
return requestHandler(
request,
Object.assign(context, { cloudflare: { env, ctx } })
) )
return requestHandler(request, context)
} }
} satisfies ExportedHandler<Env> } satisfies ExportedHandler<Env>