From c631566ab04a5897338552f0097a0077cf4556f9 Mon Sep 17 00:00:00 2001 From: Chip Wasson Date: Wed, 30 Oct 2024 10:38:18 -0600 Subject: [PATCH] Consume headers for IP --- src/junk-drawer/junk-drawer.controller.ts | 7 ++++--- src/utils/ip.ts | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 src/utils/ip.ts diff --git a/src/junk-drawer/junk-drawer.controller.ts b/src/junk-drawer/junk-drawer.controller.ts index 1dd81a7..8c3a090 100644 --- a/src/junk-drawer/junk-drawer.controller.ts +++ b/src/junk-drawer/junk-drawer.controller.ts @@ -2,7 +2,6 @@ import { Body, Controller, Get, - Ip, Param, Post, Redirect, @@ -19,6 +18,7 @@ import { FilesInterceptor } from '@nestjs/platform-express'; import { generateUniqueSlug } from 'src/utils/slug'; import { JunkDrawerMetadata } from './types'; import { Request, Response } from 'express'; +import { ipFromRequest } from 'src/utils/ip'; @Controller('junk-drawer') @ApiTags('junk-drawer') @@ -27,8 +27,9 @@ export class JunkDrawerController { @Get('') @Render('junk-drawer/upload') - async generateUploadForm(@Ip() ip: string) { + async generateUploadForm(@Req() req: Request) { let items: string[] = []; + const ip = ipFromRequest(req); if (ip) { items = await this.junkDrawerService.getItemsForIp(ip); } @@ -87,7 +88,6 @@ export class JunkDrawerController { async handleFileUpload( @UploadedFiles() files: Express.Multer.File[], @Req() request: Request, - @Ip() ip: string, @Body('description') description: string, @Body('private-ish') privateIsh: boolean, @Body('remember') remember: boolean, @@ -95,6 +95,7 @@ export class JunkDrawerController { const uniqueSlug = generateUniqueSlug({ random: privateIsh, }); + const ip = ipFromRequest(request); const metadata: JunkDrawerMetadata = { slug: uniqueSlug, version: '1.0.0', diff --git a/src/utils/ip.ts b/src/utils/ip.ts new file mode 100644 index 0000000..ae0fd78 --- /dev/null +++ b/src/utils/ip.ts @@ -0,0 +1,9 @@ +import { Request } from 'express'; + +export const ipFromRequest = (req: Request): string | undefined => { + const flyIp = req.headers['fly-client-ip'] as string | undefined; + const forwardedFor = (req.headers['x-forwarded-for'] as string)?.split( + ',', + )[0]; + return flyIp || forwardedFor || req.ip; +};