Skip to content

Commit d682af3

Browse files
committed
fix: logging system
1 parent d160b29 commit d682af3

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

libs/interceptors/http-exceptions-filter.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,12 @@ export class HttpExceptionsFilter implements ExceptionFilter {
5353
ip: req.ip,
5454
...mapKeys(
5555
req.user || {
56-
userId: 'unauthorized',
5756
body: pick(req.body || {}, ['passKey']),
5857
headers: pick(req.headers || {}, ['x-access-token', 'authorization']),
5958
},
6059
(_, key) => `user.${key}`,
6160
),
62-
userAgent: req.headers['user-agent'],
61+
user_agent: req.headers['user-agent'],
6362
});
6463

6564
return res.status(status).json({

libs/interceptors/http-logging.middleware.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { ConsoleLogger, Injectable, Logger, NestMiddleware } from '@nestjs/common';
2+
import * as Sentry from '@sentry/nestjs';
23
import { NextFunction, Request, Response } from 'express';
4+
import mapKeys from 'lodash/mapKeys';
5+
import pick from 'lodash/pick';
36
import moment from 'moment';
7+
import { fallbackUser } from '../../src/auth';
48

59
export class CustomLogger extends ConsoleLogger {
610
getTimestamp(): string {
@@ -36,6 +40,22 @@ export class HttpLoggingMiddleware implements NestMiddleware {
3640

3741
const logType = statusCode >= 500 ? 'error' : statusCode >= 400 ? 'warn' : 'debug';
3842
this.logger[logType](logMessage, method);
43+
44+
if (req.user?.userId !== fallbackUser.userId) {
45+
Sentry.logger.info(`[${req.method}] ${statusCode} ${req.url}`, {
46+
status: statusCode,
47+
method: req.method,
48+
path: req.url,
49+
ip: req.ip,
50+
...mapKeys(
51+
req.user || {
52+
body: pick(req.body || {}, ['passKey']),
53+
},
54+
(_, key) => `user.${key}`,
55+
),
56+
user_agent: req.headers['user-agent'],
57+
});
58+
}
3959
}
4060

4161
private formatIp(ip?: string): string {

src/auth/auth.controller.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class AuthController {
5555
@ApiExcludeEndpoint()
5656
async loginWithTurnstile(
5757
@Req() req: Request,
58-
@Res() res: Response,
58+
@Res({ passthrough: true }) res: Response,
5959
@Body() body: TurnstileLoginDto,
6060
): Promise<LoginOkDto> {
6161
const remoteIp = (req.headers['cf-connecting-ip'] || req.ip) as string;
@@ -66,10 +66,10 @@ export class AuthController {
6666
secure: true,
6767
sameSite: 'strict',
6868
signed: true,
69-
maxAge: 5 * 60 * 60 * 1000,
69+
maxAge: 5 * 60 * 1000,
7070
});
7171

72-
return res.json(result) as unknown as LoginOkDto;
72+
return result;
7373
}
7474

7575
@Get('/handoff/:token')

src/exports/exports.controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { ExportsService } from './exports.service';
1010
export class ExportsController {
1111
constructor(private readonly exportsService: ExportsService) {}
1212

13-
@Cache(10 * 60 * 1000)
13+
@Cache(10 * 60)
1414
@Post('/members')
1515
exportClanMembers(@Body() body: ExportMembersInput): Promise<ExportMembersOutputDto> {
1616
return this.exportsService.exportClanMembers(body);

0 commit comments

Comments
 (0)