update cloudflare context
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import type { Route } from './+types/api'
|
||||
|
||||
import type { User } from '@repo/auth/auth'
|
||||
import { userContext } from '@repo/auth/context'
|
||||
import { userContext, cloudflareContext } from '@repo/auth/context'
|
||||
|
||||
export const loader = proxy
|
||||
export const action = proxy
|
||||
@@ -11,8 +11,12 @@ async function proxy({
|
||||
context
|
||||
}: Route.ActionArgs): Promise<Response> {
|
||||
const pathname = new URL(request.url).pathname.replace(/^\/api\//, '')
|
||||
const cloudflare = context.get(cloudflareContext) as {
|
||||
env: Env
|
||||
ctx: ExecutionContext
|
||||
}
|
||||
const user = context.get(userContext) as User
|
||||
const url = new URL(pathname, context.cloudflare.env.API_URL)
|
||||
const url = new URL(pathname, cloudflare.env.API_URL)
|
||||
const headers = new Headers(request.headers)
|
||||
|
||||
headers.set('Authorization', `Bearer ${user.accessToken}`)
|
||||
|
||||
@@ -3,30 +3,29 @@ import type { Route } from './+types/login'
|
||||
import { redirect } from 'react-router'
|
||||
|
||||
import { createAuth, type User } from '@repo/auth/auth'
|
||||
import { requestIdContext } from '@repo/auth/context'
|
||||
import { requestIdContext, cloudflareContext } from '@repo/auth/context'
|
||||
import { createSessionStorage } from '@repo/auth/session'
|
||||
|
||||
export async function loader({ request, context }: Route.ActionArgs) {
|
||||
export async function loader({ request, context }: Route.LoaderArgs) {
|
||||
const url = new URL(request.url)
|
||||
const sessionStorage = createSessionStorage(context.cloudflare.env)
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const sessionStorage = createSessionStorage(cloudflare.env)
|
||||
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
||||
const requestId = context.get(requestIdContext)
|
||||
const user = session.get('user') as User | null
|
||||
const returnTo = (
|
||||
session.has('returnTo') ? session.get('returnTo') : '/'
|
||||
) as string
|
||||
const user = session.get('user')
|
||||
const returnTo = (session.get('returnTo') as string | undefined) ?? '/'
|
||||
|
||||
if (user) {
|
||||
return redirect(returnTo)
|
||||
}
|
||||
|
||||
try {
|
||||
const authenticator = createAuth(
|
||||
context.cloudflare.env,
|
||||
`${url?.origin}/login`
|
||||
)
|
||||
const user = await authenticator.authenticate('oidc', request)
|
||||
session.set('user', user)
|
||||
const authenticator = createAuth(cloudflare.env, `${url.origin}/login`)
|
||||
const authenticatedUser = (await authenticator.authenticate(
|
||||
'oidc',
|
||||
request
|
||||
)) as User
|
||||
session.set('user', authenticatedUser)
|
||||
|
||||
console.log(`[${requestId}] Redirecting the user to ${returnTo}`)
|
||||
|
||||
|
||||
@@ -5,12 +5,14 @@ import type { OAuth2Strategy } from 'remix-auth-oauth2'
|
||||
|
||||
import { createAuth, type User } from '@repo/auth/auth'
|
||||
import { createSessionStorage } from '@repo/auth/session'
|
||||
import { cloudflareContext } from '@repo/auth/context'
|
||||
|
||||
export async function loader({ request, context }: Route.LoaderArgs) {
|
||||
const authenticator = createAuth(context.cloudflare.env)
|
||||
const sessionStorage = createSessionStorage(context.cloudflare.env)
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const authenticator = createAuth(cloudflare.env)
|
||||
const sessionStorage = createSessionStorage(cloudflare.env)
|
||||
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
||||
const user = session.get('user') as User
|
||||
const user = session.get('user')
|
||||
const strategy = authenticator.get<OAuth2Strategy<User>>('oidc')
|
||||
|
||||
if (user?.accessToken && strategy) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Await, Link } from 'react-router'
|
||||
import { Suspense } from 'react'
|
||||
|
||||
import { type User } from '@repo/auth/auth'
|
||||
import { userContext } from '@repo/auth/context'
|
||||
import { userContext, cloudflareContext } from '@repo/auth/context'
|
||||
import {
|
||||
Breadcrumb,
|
||||
BreadcrumbItem,
|
||||
@@ -26,6 +26,7 @@ export function meta({}: Route.MetaArgs) {
|
||||
}
|
||||
|
||||
export async function loader({ request, context }: Route.ActionArgs) {
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const user = context.get(userContext) as User
|
||||
const { searchParams } = new URL(request.url)
|
||||
const status = searchParams.getAll('status') || []
|
||||
@@ -45,15 +46,17 @@ export async function loader({ request, context }: Route.ActionArgs) {
|
||||
sort: [sort],
|
||||
page,
|
||||
hitsPerPage,
|
||||
env: context.cloudflare.env
|
||||
env: cloudflare.env
|
||||
})
|
||||
|
||||
return {
|
||||
data: payments
|
||||
payments
|
||||
}
|
||||
}
|
||||
|
||||
export default function Component({ loaderData: { data } }) {
|
||||
export default function Component({
|
||||
loaderData: { payments }
|
||||
}: Route.ComponentProps) {
|
||||
return (
|
||||
<Container className="space-y-2.5">
|
||||
<Suspense fallback={<Skeleton />}>
|
||||
@@ -81,15 +84,17 @@ export default function Component({ loaderData: { data } }) {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<Await resolve={data}>
|
||||
{({ hits, page, hitsPerPage, totalHits }) => {
|
||||
<Await resolve={payments}>
|
||||
{({ hits, page = 1, hitsPerPage, totalHits }) => {
|
||||
return (
|
||||
<DataTable
|
||||
sort={[{ id: 'create_date', desc: true }]}
|
||||
columns={columns}
|
||||
data={hits as Order[]}
|
||||
pageIndex={page - 1}
|
||||
// @ts-ignore
|
||||
pageSize={hitsPerPage}
|
||||
// @ts-ignore
|
||||
rowCount={totalHits}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -15,7 +15,7 @@ import { Suspense, useMemo, type ComponentProps } from 'react'
|
||||
import { Await, NavLink, useSearchParams } from 'react-router'
|
||||
|
||||
import type { User } from '@repo/auth/auth'
|
||||
import { userContext } from '@repo/auth/context'
|
||||
import { userContext, cloudflareContext } from '@repo/auth/context'
|
||||
import { FacetedFilter } from '@repo/ui/components/faceted-filter'
|
||||
import { SearchForm } from '@repo/ui/components/search-form'
|
||||
import { Skeleton } from '@repo/ui/components/skeleton'
|
||||
@@ -60,6 +60,7 @@ export function meta({}: Route.MetaArgs) {
|
||||
}
|
||||
|
||||
export async function loader({ request, context }: Route.ActionArgs) {
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const user = context.get(userContext) as User
|
||||
const { searchParams } = new URL(request.url)
|
||||
const status = searchParams.getAll('status') || []
|
||||
@@ -74,7 +75,7 @@ export async function loader({ request, context }: Route.ActionArgs) {
|
||||
filter: builder.build(),
|
||||
sort: ['created_at:desc'],
|
||||
hitsPerPage: 100,
|
||||
env: context.cloudflare.env
|
||||
env: cloudflare.env
|
||||
})
|
||||
|
||||
return {
|
||||
|
||||
@@ -5,11 +5,14 @@ import { redirect } from 'react-router'
|
||||
import { userContext } from '@repo/auth/context'
|
||||
import type { User } from '@repo/auth/auth'
|
||||
|
||||
import { cloudflareContext } from 'workers/app'
|
||||
|
||||
const konvivaApi = 'https://lms.saladeaula.digital'
|
||||
|
||||
export async function loader({ context }: Route.LoaderArgs) {
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const user = context.get(userContext) as User
|
||||
const secretKey = context.cloudflare.env.KONVIVA_SECRET_KEY
|
||||
const secretKey = cloudflare.env.KONVIVA_SECRET_KEY
|
||||
const token = await getToken(user.email, secretKey)
|
||||
|
||||
const url = new URL('/action/acessoExterno', konvivaApi)
|
||||
|
||||
@@ -2,11 +2,13 @@ import type { Route } from './+types/layout'
|
||||
|
||||
import { useToggle } from 'ahooks'
|
||||
import { MenuIcon } from 'lucide-react'
|
||||
import { Link, NavLink, Outlet } from 'react-router'
|
||||
import { data, Link, NavLink, Outlet } from 'react-router'
|
||||
import { toast } from 'sonner'
|
||||
import { useEffect } from 'react'
|
||||
|
||||
import type { User } from '@repo/auth/auth'
|
||||
import { Toaster } from '@repo/ui/components/ui/sonner'
|
||||
import { userContext } from '@repo/auth/context'
|
||||
import { userContext, cloudflareContext } from '@repo/auth/context'
|
||||
import { authMiddleware } from '@repo/auth/middleware/auth'
|
||||
import { ModeToggle, ThemedImage } from '@repo/ui/components/dark-mode'
|
||||
import { NavUser } from '@repo/ui/components/nav-user'
|
||||
@@ -23,16 +25,14 @@ import {
|
||||
SheetTitle,
|
||||
SheetTrigger
|
||||
} from '@repo/ui/components/ui/sheet'
|
||||
import type { User } from '@repo/auth/auth'
|
||||
import { createSessionStorage } from '@repo/auth/session'
|
||||
import { data } from 'react-router'
|
||||
import { useEffect } from 'react'
|
||||
|
||||
export const middleware: Route.MiddlewareFunction[] = [authMiddleware]
|
||||
|
||||
export async function loader({ context, request }: Route.ActionArgs) {
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const user = context.get(userContext) as User
|
||||
const sessionStorage = createSessionStorage(context.cloudflare.env)
|
||||
const sessionStorage = createSessionStorage(cloudflare.env)
|
||||
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
||||
|
||||
const flash = {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import type { Route } from './+types/proxy'
|
||||
|
||||
import { cloudflareContext } from '@repo/auth/context'
|
||||
|
||||
// Mapping of extensions to MIME types
|
||||
const mimeTypes: Record<string, string> = {
|
||||
// Images
|
||||
@@ -25,8 +27,9 @@ const mimeTypes: Record<string, string> = {
|
||||
}
|
||||
|
||||
export async function loader({ params, context }: Route.LoaderArgs) {
|
||||
const bucketEndpoint = context.cloudflare.env.BUCKET_ENDPOINT
|
||||
const bucketName = context.cloudflare.env.BUCKET_NAME
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const bucketEndpoint = cloudflare.env.BUCKET_ENDPOINT
|
||||
const bucketName = cloudflare.env.BUCKET_NAME
|
||||
const param = params['*'] ?? ''
|
||||
const url = new URL(`${bucketName}/scorm/${param}`, bucketEndpoint)
|
||||
const upstream = await fetch(url.toString())
|
||||
|
||||
@@ -2,15 +2,16 @@ import type { Route } from './+types/verify'
|
||||
|
||||
import { redirect } from 'react-router'
|
||||
|
||||
import { userContext } from '@repo/auth/context'
|
||||
import { userContext, cloudflareContext } from '@repo/auth/context'
|
||||
import { createSessionStorage } from '@repo/auth/session'
|
||||
import { HttpMethod, request as req } from '@repo/util/request'
|
||||
|
||||
export async function loader({ params, request, context }: Route.LoaderArgs) {
|
||||
const { code } = params
|
||||
const sessionStorage = createSessionStorage(context.cloudflare.env)
|
||||
const cloudflare = context.get(cloudflareContext)
|
||||
const sessionStorage = createSessionStorage(cloudflare.env)
|
||||
const session = await sessionStorage.getSession(request.headers.get('cookie'))
|
||||
const user = context.get(userContext)
|
||||
const user = context.get(userContext)!
|
||||
|
||||
const r = await req({
|
||||
url: `/users/${user.sub}/emails/${code}/verify`,
|
||||
|
||||
@@ -39,7 +39,7 @@ import { formSchema, type Schema } from './emails/data'
|
||||
|
||||
export async function action({ request, context }: Route.ActionArgs) {
|
||||
const body = await request.json()
|
||||
const user = context.get(userContext)
|
||||
const user = context.get(userContext)!
|
||||
const r = await req({
|
||||
url: `/users/${user.sub}`,
|
||||
method: HttpMethod.PATCH,
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
import { createRequestHandler, RouterContextProvider } from 'react-router'
|
||||
import { cloudflareContext } from '@repo/auth/context'
|
||||
|
||||
declare module 'react-router' {
|
||||
export interface AppLoadContext {
|
||||
cloudflare: {
|
||||
env: Env
|
||||
ctx: ExecutionContext
|
||||
}
|
||||
}
|
||||
declare module '@repo/auth/context' {
|
||||
interface CloudflareEnv extends Env {}
|
||||
interface CloudflareCtx extends ExecutionContext {}
|
||||
}
|
||||
|
||||
const requestHandler = createRequestHandler(
|
||||
@@ -16,11 +13,10 @@ const requestHandler = createRequestHandler(
|
||||
|
||||
export default {
|
||||
async fetch(request, env, ctx) {
|
||||
const context = new RouterContextProvider()
|
||||
|
||||
return requestHandler(
|
||||
request,
|
||||
Object.assign(context, { cloudflare: { env, ctx } })
|
||||
const context = new RouterContextProvider(
|
||||
new Map([[cloudflareContext, { env, ctx }]])
|
||||
)
|
||||
|
||||
return requestHandler(request, context)
|
||||
}
|
||||
} satisfies ExportedHandler<Env>
|
||||
|
||||
@@ -6,10 +6,8 @@ main = "./workers/app.ts"
|
||||
[placement]
|
||||
mode = "smart"
|
||||
|
||||
|
||||
[vars]
|
||||
CLIENT_ID = "1a5483ab-4521-4702-9115-5857ac676851"
|
||||
REDIRECT_URI = "https://scorm.eduseg.workers.dev/login"
|
||||
SCOPE = "openid profile email offline_access"
|
||||
API_URL = "https://bcs7fgb9og.execute-api.sa-east-1.amazonaws.com"
|
||||
ISSUER_URL = "https://id.saladeaula.digital"
|
||||
|
||||
Reference in New Issue
Block a user