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; +};