Fix server logs leak (#18423)

# Introduction

Previously the auth jwt stragegy would lod the whole user entity in the
auth user context
On an exception it would completely get logged on the pods


## Security layer
- 0/ Updating the type system ( devxp only though )
- 1/ The jwt auth stragegy only load a specific sub set of the user
entity
- 2/ Sanitizing at the exception log level directly in case of a user
context
- 3/ Sanitizing at the console driver

The last two sanitization could sound a bit redundant though they're
still good fallback to keep in case new path occurs in the cb
This commit is contained in:
Paul Rastoin
2026-03-05 14:40:23 +01:00
committed by GitHub
parent 647c32ff3e
commit 38ad0820c0
31 changed files with 147 additions and 75 deletions
@@ -1,10 +1,12 @@
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
import { Args, Query } from '@nestjs/graphql';
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import {
AuthContext,
type AuthContextUser,
} from 'src/engine/core-modules/auth/types/auth-context.type';
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
@@ -29,7 +31,7 @@ export class BarChartDataResolver {
async barChartData(
@Args('input') input: BarChartDataInput,
@AuthWorkspace() workspace: WorkspaceEntity,
@AuthUser() user: UserEntity,
@AuthUser() user: AuthContextUser,
@AuthWorkspaceMemberId() workspaceMemberId: string,
@AuthUserWorkspaceId() userWorkspaceId: string,
): Promise<BarChartDataDTO> {
@@ -1,10 +1,12 @@
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
import { Args, Query } from '@nestjs/graphql';
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import {
AuthContext,
type AuthContextUser,
} from 'src/engine/core-modules/auth/types/auth-context.type';
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
@@ -29,7 +31,7 @@ export class LineChartDataResolver {
async lineChartData(
@Args('input') input: LineChartDataInput,
@AuthWorkspace() workspace: WorkspaceEntity,
@AuthUser() user: UserEntity,
@AuthUser() user: AuthContextUser,
@AuthWorkspaceMemberId() workspaceMemberId: string,
@AuthUserWorkspaceId() userWorkspaceId: string,
): Promise<LineChartDataDTO> {
@@ -1,10 +1,12 @@
import { UseFilters, UseGuards, UsePipes } from '@nestjs/common';
import { Args, Query } from '@nestjs/graphql';
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import {
AuthContext,
type AuthContextUser,
} from 'src/engine/core-modules/auth/types/auth-context.type';
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
@@ -29,7 +31,7 @@ export class PieChartDataResolver {
async pieChartData(
@Args('input') input: PieChartDataInput,
@AuthWorkspace() workspace: WorkspaceEntity,
@AuthUser() user: UserEntity,
@AuthUser() user: AuthContextUser,
@AuthWorkspaceMemberId() workspaceMemberId: string,
@AuthUserWorkspaceId() userWorkspaceId: string,
): Promise<PieChartDataDTO> {
@@ -1,7 +1,9 @@
import { Controller, Param, Post, UseFilters, UseGuards } from '@nestjs/common';
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import {
AuthContext,
type AuthContextUser,
} from 'src/engine/core-modules/auth/types/auth-context.type';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
@@ -26,7 +28,7 @@ export class DashboardController {
async duplicate(
@Param('id') id: string,
@AuthWorkspace() workspace: WorkspaceEntity,
@AuthUser() user: UserEntity,
@AuthUser() user: AuthContextUser,
@AuthWorkspaceMemberId() workspaceMemberId: string,
@AuthUserWorkspaceId() userWorkspaceId: string,
): Promise<DuplicatedDashboardDTO> {
@@ -3,9 +3,11 @@ import { Args, Mutation } from '@nestjs/graphql';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
import { AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import {
AuthContext,
type AuthContextUser,
} from 'src/engine/core-modules/auth/types/auth-context.type';
import { ResolverValidationPipe } from 'src/engine/core-modules/graphql/pipes/resolver-validation.pipe';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUserWorkspaceId } from 'src/engine/decorators/auth/auth-user-workspace-id.decorator';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
@@ -35,7 +37,7 @@ export class DashboardResolver {
async duplicateDashboard(
@Args('id', { type: () => UUIDScalarType }) id: string,
@AuthWorkspace() workspace: WorkspaceEntity,
@AuthUser() user: UserEntity,
@AuthUser() user: AuthContextUser,
@AuthWorkspaceMemberId() workspaceMemberId: string,
@AuthUserWorkspaceId() userWorkspaceId: string,
): Promise<DuplicatedDashboardDTO> {