MCPcopy Create free account
hub / github.com/acoyfellow/UserDO / createAuthMiddleware

Function createAuthMiddleware

src/authMiddleware.ts:9–70  ·  view source on GitHub ↗
(getUserDO: GetUserDO, logPrefix = '')

Source from the content-addressed store, hash-verified

7export type GetUserDO = (c: Context, email: string) => UserDO
8
9export function createAuthMiddleware(getUserDO: GetUserDO, logPrefix = '') {
10 return async (c: Context, next: Next) => {
11 const url = new URL(c.req.url)
12 const token = getCookie(c, 'token') || ''
13 const refreshToken = getCookie(c, 'refreshToken') || ''
14
15 const prefix = logPrefix ? `[${logPrefix}] ` : ''
16 console.log(`🔐 ${prefix}Auth check for ${url.pathname}:`, {
17 hasToken: !!token,
18 hasRefreshToken: !!refreshToken
19 })
20
21 if (token || refreshToken) {
22 try {
23 const decodeJWT = (jwt: string) => {
24 try {
25 const parts = jwt.split('.')
26 return parts.length === 3 ? JSON.parse(atob(parts[1])) : null
27 } catch { return null }
28 }
29
30 const email =
31 decodeJWT(token)?.email?.toLowerCase() ||
32 decodeJWT(refreshToken)?.email?.toLowerCase()
33
34 if (email) {
35 const userDO = getUserDO(c, email)
36 let result = await userDO.verifyToken({ token })
37 console.log(`🔑 ${prefix}Token verification for ${email}:`, { success: result.ok })
38
39 if (!result.ok && refreshToken) {
40 try {
41 console.log(`🔄 ${prefix}Attempting token refresh...`)
42 const { token: newToken } = await userDO.refreshToken({ refreshToken })
43 setCookie(c, 'token', newToken, {
44 httpOnly: true,
45 secure: isRequestSecure(c),
46 path: '/',
47 sameSite: 'Lax'
48 })
49 result = await userDO.verifyToken({ token: newToken })
50 console.log(`✅ ${prefix}Token refreshed successfully`)
51 } catch (e) {
52 console.log(`❌ ${prefix}Token refresh failed:`, e)
53 deleteCookie(c, 'token')
54 deleteCookie(c, 'refreshToken')
55 }
56 }
57
58 if (result.ok && result.user) {
59 console.log(`👤 ${prefix}User set: ${result.user.email}`)
60 c.set('user', result.user)
61 }
62 }
63 } catch (e) {
64 console.error(`${prefix}Auth error:`, e)
65 }
66 }

Callers 1

createRoutesFunction · 0.85

Calls 8

getUserDOFunction · 0.85
verifyTokenMethod · 0.80
refreshTokenMethod · 0.80
decodeJWTFunction · 0.70
isRequestSecureFunction · 0.70
logMethod · 0.65
errorMethod · 0.65
setMethod · 0.45

Tested by

no test coverage detected