Consume headers for IP

This commit is contained in:
2024-10-30 10:38:18 -06:00
parent 6418bff35c
commit c631566ab0
2 changed files with 13 additions and 3 deletions

View File

@@ -2,7 +2,6 @@ import {
Body, Body,
Controller, Controller,
Get, Get,
Ip,
Param, Param,
Post, Post,
Redirect, Redirect,
@@ -19,6 +18,7 @@ import { FilesInterceptor } from '@nestjs/platform-express';
import { generateUniqueSlug } from 'src/utils/slug'; import { generateUniqueSlug } from 'src/utils/slug';
import { JunkDrawerMetadata } from './types'; import { JunkDrawerMetadata } from './types';
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import { ipFromRequest } from 'src/utils/ip';
@Controller('junk-drawer') @Controller('junk-drawer')
@ApiTags('junk-drawer') @ApiTags('junk-drawer')
@@ -27,8 +27,9 @@ export class JunkDrawerController {
@Get('') @Get('')
@Render('junk-drawer/upload') @Render('junk-drawer/upload')
async generateUploadForm(@Ip() ip: string) { async generateUploadForm(@Req() req: Request) {
let items: string[] = []; let items: string[] = [];
const ip = ipFromRequest(req);
if (ip) { if (ip) {
items = await this.junkDrawerService.getItemsForIp(ip); items = await this.junkDrawerService.getItemsForIp(ip);
} }
@@ -87,7 +88,6 @@ export class JunkDrawerController {
async handleFileUpload( async handleFileUpload(
@UploadedFiles() files: Express.Multer.File[], @UploadedFiles() files: Express.Multer.File[],
@Req() request: Request, @Req() request: Request,
@Ip() ip: string,
@Body('description') description: string, @Body('description') description: string,
@Body('private-ish') privateIsh: boolean, @Body('private-ish') privateIsh: boolean,
@Body('remember') remember: boolean, @Body('remember') remember: boolean,
@@ -95,6 +95,7 @@ export class JunkDrawerController {
const uniqueSlug = generateUniqueSlug({ const uniqueSlug = generateUniqueSlug({
random: privateIsh, random: privateIsh,
}); });
const ip = ipFromRequest(request);
const metadata: JunkDrawerMetadata = { const metadata: JunkDrawerMetadata = {
slug: uniqueSlug, slug: uniqueSlug,
version: '1.0.0', version: '1.0.0',

9
src/utils/ip.ts Normal file
View File

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