feat(api): handle getting request ip through proxy

This commit is contained in:
Julien Oculi 2024-06-20 13:59:49 +02:00
parent c6758721ec
commit 4b228bfce5

View file

@ -44,7 +44,7 @@ export const handler: SessionHandlers = {
// save token to session // save token to session
ctx.state.session.flash<MagicLinkInfos>(`MAGIC_LINK__${token}`, { ctx.state.session.flash<MagicLinkInfos>(`MAGIC_LINK__${token}`, {
email, email,
remoteId: remoteId(ctx), remoteId: remoteId(request, ctx),
timestamp: Date.now(), timestamp: Date.now(),
}) })
@ -69,7 +69,7 @@ export const handler: SessionHandlers = {
) )
} }
}, },
async GET(_request, ctx) { async GET(request, ctx) {
const token = ctx.url.searchParams.get('token') const token = ctx.url.searchParams.get('token')
const redirect = ctx.url.searchParams.get('redirect') const redirect = ctx.url.searchParams.get('redirect')
@ -87,7 +87,7 @@ export const handler: SessionHandlers = {
} }
// check remote id (same user/machine that has query the token) // check remote id (same user/machine that has query the token)
if (entry.remoteId === remoteId(ctx)) { if (entry.remoteId === remoteId(request, ctx)) {
const user = await getUserByMail(entry.email) const user = await getUserByMail(entry.email)
ctx.state.session.set('user', user) ctx.state.session.set('user', user)
@ -109,8 +109,16 @@ export const handler: SessionHandlers = {
} }
function remoteId( function remoteId(
{ headers }: { headers: Headers },
{ remoteAddr }: { remoteAddr: FreshContext['remoteAddr'] }, { remoteAddr }: { remoteAddr: FreshContext['remoteAddr'] },
): string { ): string {
const forwardedAddress = headers.get('X-FORWARDED-FOR')
const forwardedProto = headers.get('X-FORWARDED-PROTO')
if (forwardedAddress && forwardedProto) {
return `${forwardedProto}://${forwardedAddress}`
}
return `(${remoteAddr.transport}):${remoteAddr.hostname}:${remoteAddr.port}` return `(${remoteAddr.transport}):${remoteAddr.hostname}:${remoteAddr.port}`
} }