Skip to content

Commit fd60b60

Browse files
RI-7200 add request metadata to session metadata and exclude it from logs
1 parent 78b64b8 commit fd60b60

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

redisinsight/api/src/common/decorators/client-metadata/client-metadata.decorator.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ export const clientMetadataParamFactory = (
4646
db: options?.ignoreDbIndex
4747
? undefined
4848
: req?.headers?.[API_HEADER_DATABASE_INDEX],
49+
}, {
50+
groups: ['security'],
4951
});
5052

5153
const errors = validator.validateSync(clientMetadata, {

redisinsight/api/src/common/decorators/session/session-metadata.decorator.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@ export const sessionMetadataFromRequest = (
2424
'correlationId',
2525
]);
2626
const correlationId = request.res?.locals?.session?.correlationId || uuidv4();
27+
const requestMetadata = request.res?.locals?.session?.requestMetadata;
2728

2829
const requestSession = {
2930
userId,
3031
data,
3132
sessionId,
3233
correlationId,
34+
requestMetadata,
3335
};
3436

35-
// todo: do not forget to deal with session vs sessionMetadata property
36-
const session = plainToInstance(SessionMetadata, requestSession);
37+
const session = plainToInstance(SessionMetadata, requestSession, { groups: ['security'] });
3738

3839
const errors = validator.validateSync(session, {
3940
whitelist: false, // we need this to allow additional fields if needed for flexibility

redisinsight/api/src/common/logger/app-logger.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { LoggerService, Injectable } from '@nestjs/common';
22
import { WinstonModule, WinstonModuleOptions } from 'nest-winston';
33
import { cloneDeep, isString } from 'lodash';
44
import { ClientMetadata, SessionMetadata } from 'src/common/models';
5+
import { instanceToPlain } from 'class-transformer';
56

67
type LogMeta = object;
78

@@ -106,8 +107,8 @@ export class AppLogger implements LoggerService {
106107
message,
107108
context,
108109
error,
109-
...userMetadata,
110-
data: optionalParamsCopy?.length ? optionalParamsCopy : undefined,
110+
...instanceToPlain(userMetadata),
111+
data: optionalParamsCopy?.length ? instanceToPlain(optionalParamsCopy) : undefined,
111112
};
112113
}
113114

redisinsight/api/src/common/models/client-metadata.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Session, SessionMetadata } from 'src/common/models/session';
1+
import { SessionMetadata } from 'src/common/models/session';
22
import { Type } from 'class-transformer';
33
import {
44
IsEnum,
@@ -23,7 +23,7 @@ export enum ClientContext {
2323

2424
export class ClientMetadata {
2525
@IsNotEmpty()
26-
@Type(() => Session)
26+
@Type(() => SessionMetadata)
2727
sessionMetadata: SessionMetadata;
2828

2929
@IsNotEmpty()

redisinsight/api/src/common/models/session.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { IsNotEmpty, IsObject, IsOptional, IsString } from 'class-validator';
22
import { BadRequestException } from '@nestjs/common';
33
import ERROR_MESSAGES from 'src/constants/error-messages';
4+
import { Expose } from 'class-transformer';
45

56
export interface ISessionMetadata {
67
userId: string;
@@ -9,21 +10,31 @@ export interface ISessionMetadata {
910
}
1011

1112
export class SessionMetadata implements ISessionMetadata {
13+
@Expose()
1214
@IsNotEmpty()
1315
@IsString()
1416
userId: string;
1517

18+
@Expose()
1619
@IsObject()
1720
data?: Record<string, any> = {};
1821

22+
@Expose({ groups: ['security'] })
23+
@IsObject()
24+
@IsOptional()
25+
requestMetadata?: Record<string, any> = {};
26+
27+
@Expose()
1928
@IsNotEmpty()
2029
@IsString()
2130
sessionId: string;
2231

32+
@Expose()
2333
@IsOptional()
2434
@IsString()
2535
uniqueId?: string;
2636

37+
@Expose()
2738
@IsOptional()
2839
@IsString()
2940
correlationId?: string;

0 commit comments

Comments
 (0)