mirror of
https://github.com/docmost/docmost.git
synced 2026-05-07 06:23:06 +08:00
ip
This commit is contained in:
@@ -75,6 +75,7 @@
|
|||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
"class-validator": "^0.15.1",
|
"class-validator": "^0.15.1",
|
||||||
"cookie": "^1.1.1",
|
"cookie": "^1.1.1",
|
||||||
|
"fastify-ip": "^2.0.0",
|
||||||
"fs-extra": "^11.3.4",
|
"fs-extra": "^11.3.4",
|
||||||
"happy-dom": "20.8.9",
|
"happy-dom": "20.8.9",
|
||||||
"ioredis": "^5.10.1",
|
"ioredis": "^5.10.1",
|
||||||
|
|||||||
@@ -50,20 +50,12 @@ export function createPinoConfig(): Params {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
serializers: {
|
serializers: {
|
||||||
req: (req) => {
|
req: (req) => ({
|
||||||
const forwardedFor = req.headers?.['x-forwarded-for'];
|
|
||||||
const ip =
|
|
||||||
req.headers?.['cf-connecting-ip'] ||
|
|
||||||
(typeof forwardedFor === 'string' ? forwardedFor.split(',')[0]?.trim() : undefined) ||
|
|
||||||
req.remoteAddress;
|
|
||||||
|
|
||||||
return {
|
|
||||||
method: req.method,
|
method: req.method,
|
||||||
url: req.url,
|
url: req.url,
|
||||||
ip,
|
ip: req.ip || req.remoteAddress,
|
||||||
userAgent: req.headers?.['user-agent'],
|
userAgent: req.headers?.['user-agent'],
|
||||||
};
|
}),
|
||||||
},
|
|
||||||
res: (res) => ({
|
res: (res) => ({
|
||||||
statusCode: res.statusCode,
|
statusCode: res.statusCode,
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ export class AuditContextMiddleware implements NestMiddleware {
|
|||||||
|
|
||||||
use(req: FastifyRequest['raw'], res: FastifyReply['raw'], next: () => void) {
|
use(req: FastifyRequest['raw'], res: FastifyReply['raw'], next: () => void) {
|
||||||
const workspaceId = (req as any).workspaceId ?? null;
|
const workspaceId = (req as any).workspaceId ?? null;
|
||||||
const ipAddress = this.extractIpAddress(req);
|
|
||||||
|
const ipAddress = (req as any).ip ?? (req as any).socket?.remoteAddress ?? null;
|
||||||
|
|
||||||
const userAgent =
|
const userAgent =
|
||||||
(req.headers['user-agent'] as string) ?? null;
|
(req.headers['user-agent'] as string) ?? null;
|
||||||
@@ -35,21 +36,4 @@ export class AuditContextMiddleware implements NestMiddleware {
|
|||||||
|
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
private extractIpAddress(req: FastifyRequest['raw']): string | null {
|
|
||||||
const xForwardedFor = req.headers['x-forwarded-for'];
|
|
||||||
if (xForwardedFor) {
|
|
||||||
const ips = Array.isArray(xForwardedFor)
|
|
||||||
? xForwardedFor[0]
|
|
||||||
: xForwardedFor.split(',')[0];
|
|
||||||
return ips?.trim() ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const xRealIp = req.headers['x-real-ip'];
|
|
||||||
if (xRealIp) {
|
|
||||||
return Array.isArray(xRealIp) ? xRealIp[0] : xRealIp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (req as any).socket?.remoteAddress ?? null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import Redis from 'ioredis';
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
throttlers: [{ name: 'auth', ttl: 60_000, limit: 10 }],
|
throttlers: [{ name: 'auth', ttl: 60_000, limit: 10 }],
|
||||||
|
errorMessage: 'Too many requests',
|
||||||
storage: new ThrottlerStorageRedisService(
|
storage: new ThrottlerStorageRedisService(
|
||||||
new Redis({
|
new Redis({
|
||||||
host: redisConfig.host,
|
host: redisConfig.host,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { TransformHttpResponseInterceptor } from './common/interceptors/http-res
|
|||||||
import { WsRedisIoAdapter } from './ws/adapter/ws-redis.adapter';
|
import { WsRedisIoAdapter } from './ws/adapter/ws-redis.adapter';
|
||||||
import fastifyMultipart from '@fastify/multipart';
|
import fastifyMultipart from '@fastify/multipart';
|
||||||
import fastifyCookie from '@fastify/cookie';
|
import fastifyCookie from '@fastify/cookie';
|
||||||
|
import fastifyIp from 'fastify-ip';
|
||||||
import { InternalLogFilter } from './common/logger/internal-log-filter';
|
import { InternalLogFilter } from './common/logger/internal-log-filter';
|
||||||
|
|
||||||
async function bootstrap() {
|
async function bootstrap() {
|
||||||
@@ -45,6 +46,7 @@ async function bootstrap() {
|
|||||||
|
|
||||||
app.useWebSocketAdapter(redisIoAdapter);
|
app.useWebSocketAdapter(redisIoAdapter);
|
||||||
|
|
||||||
|
await app.register(fastifyIp);
|
||||||
await app.register(fastifyMultipart);
|
await app.register(fastifyMultipart);
|
||||||
await app.register(fastifyCookie);
|
await app.register(fastifyCookie);
|
||||||
|
|
||||||
|
|||||||
Generated
+11
@@ -586,6 +586,9 @@ importers:
|
|||||||
cookie:
|
cookie:
|
||||||
specifier: ^1.1.1
|
specifier: ^1.1.1
|
||||||
version: 1.1.1
|
version: 1.1.1
|
||||||
|
fastify-ip:
|
||||||
|
specifier: ^2.0.0
|
||||||
|
version: 2.0.0
|
||||||
fs-extra:
|
fs-extra:
|
||||||
specifier: ^11.3.4
|
specifier: ^11.3.4
|
||||||
version: 11.3.4
|
version: 11.3.4
|
||||||
@@ -7038,6 +7041,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==}
|
resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
fastify-ip@2.0.0:
|
||||||
|
resolution: {integrity: sha512-7mQyAc7sapawpiriEFoJyQIs41nNIO42UCzgMKrjNGsIegnevj2VhOlXLLTa+q7cxXfJ5fDGmOAdQpaIgA9ObA==}
|
||||||
|
engines: {node: '>=20.x'}
|
||||||
|
|
||||||
fastify-plugin@5.0.1:
|
fastify-plugin@5.0.1:
|
||||||
resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==}
|
resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==}
|
||||||
|
|
||||||
@@ -18109,6 +18116,10 @@ snapshots:
|
|||||||
path-expression-matcher: 1.2.0
|
path-expression-matcher: 1.2.0
|
||||||
strnum: 2.2.1
|
strnum: 2.2.1
|
||||||
|
|
||||||
|
fastify-ip@2.0.0:
|
||||||
|
dependencies:
|
||||||
|
fastify-plugin: 5.1.0
|
||||||
|
|
||||||
fastify-plugin@5.0.1: {}
|
fastify-plugin@5.0.1: {}
|
||||||
|
|
||||||
fastify-plugin@5.1.0: {}
|
fastify-plugin@5.1.0: {}
|
||||||
|
|||||||
Reference in New Issue
Block a user