Compare commits

..

1 Commits

Author SHA1 Message Date
75d46d4e82 fix: add SYSTEM_ADMIN_IDS env var to compose file 2026-03-01 14:28:30 -06:00
7 changed files with 13 additions and 8 deletions

View File

@@ -1,7 +1,7 @@
import { Controller, Get, Query, Param, UseGuards } from "@nestjs/common"; import { Controller, Get, Query, Param, UseGuards } from "@nestjs/common";
import { ActivityService } from "./activity.service"; import { ActivityService } from "./activity.service";
import { EntityType } from "@prisma/client"; import { EntityType } from "@prisma/client";
import { QueryActivityLogDto } from "./dto"; import type { QueryActivityLogDto } from "./dto";
import { AuthGuard } from "../auth/guards/auth.guard"; import { AuthGuard } from "../auth/guards/auth.guard";
import { WorkspaceGuard, PermissionGuard } from "../common/guards"; import { WorkspaceGuard, PermissionGuard } from "../common/guards";
import { Workspace, Permission, RequirePermission } from "../common/decorators"; import { Workspace, Permission, RequirePermission } from "../common/decorators";

View File

@@ -111,9 +111,14 @@ export class CsrfGuard implements CanActivate {
throw new ForbiddenException("CSRF token not bound to session"); throw new ForbiddenException("CSRF token not bound to session");
} }
} else {
this.logger.debug({
event: "CSRF_SKIP_SESSION_BINDING",
method: request.method,
path: request.path,
reason: "User context not yet available (global guard runs before AuthGuard)",
});
} }
// Note: when userId is absent, the double-submit cookie check above is
// sufficient CSRF protection. AuthGuard populates request.user afterward.
return true; return true;
} }

View File

@@ -3,7 +3,7 @@ import { DashboardService } from "./dashboard.service";
import { AuthGuard } from "../auth/guards/auth.guard"; import { AuthGuard } from "../auth/guards/auth.guard";
import { WorkspaceGuard, PermissionGuard } from "../common/guards"; import { WorkspaceGuard, PermissionGuard } from "../common/guards";
import { Workspace, Permission, RequirePermission } from "../common/decorators"; import { Workspace, Permission, RequirePermission } from "../common/decorators";
import { DashboardSummaryDto } from "./dto"; import type { DashboardSummaryDto } from "./dto";
/** /**
* Controller for dashboard endpoints. * Controller for dashboard endpoints.

View File

@@ -15,7 +15,7 @@ import type { AuthUser } from "@mosaic/shared";
import { CurrentUser } from "../auth/decorators/current-user.decorator"; import { CurrentUser } from "../auth/decorators/current-user.decorator";
import { AdminGuard } from "../auth/guards/admin.guard"; import { AdminGuard } from "../auth/guards/admin.guard";
import { AuthGuard } from "../auth/guards/auth.guard"; import { AuthGuard } from "../auth/guards/auth.guard";
import { import type {
CreateProviderDto, CreateProviderDto,
ResetPasswordDto, ResetPasswordDto,
UpdateAgentConfigDto, UpdateAgentConfigDto,

View File

@@ -1,7 +1,7 @@
import { Controller, Get, Param, Query } from "@nestjs/common"; import { Controller, Get, Param, Query } from "@nestjs/common";
import type { LlmUsageLog } from "@prisma/client"; import type { LlmUsageLog } from "@prisma/client";
import { LlmUsageService } from "./llm-usage.service"; import { LlmUsageService } from "./llm-usage.service";
import { UsageAnalyticsQueryDto, UsageAnalyticsResponseDto } from "./dto"; import type { UsageAnalyticsQueryDto, UsageAnalyticsResponseDto } from "./dto";
/** /**
* LLM Usage Controller * LLM Usage Controller

View File

@@ -4,7 +4,7 @@ import { WidgetsService } from "./widgets.service";
import { WidgetDataService } from "./widget-data.service"; import { WidgetDataService } from "./widget-data.service";
import { AuthGuard } from "../auth/guards/auth.guard"; import { AuthGuard } from "../auth/guards/auth.guard";
import { WorkspaceGuard } from "../common/guards/workspace.guard"; import { WorkspaceGuard } from "../common/guards/workspace.guard";
import { StatCardQueryDto, ChartQueryDto, ListQueryDto, CalendarPreviewQueryDto } from "./dto"; import type { StatCardQueryDto, ChartQueryDto, ListQueryDto, CalendarPreviewQueryDto } from "./dto";
import type { RequestWithWorkspace } from "../common/types/user.types"; import type { RequestWithWorkspace } from "../common/types/user.types";
/** /**

View File

@@ -6,7 +6,7 @@ import { WorkspaceGuard, PermissionGuard } from "../common/guards";
import { Permission, RequirePermission } from "../common/decorators"; import { Permission, RequirePermission } from "../common/decorators";
import type { WorkspaceMember } from "@prisma/client"; import type { WorkspaceMember } from "@prisma/client";
import type { AuthenticatedUser } from "../common/types/user.types"; import type { AuthenticatedUser } from "../common/types/user.types";
import { AddMemberDto, UpdateMemberRoleDto, WorkspaceResponseDto } from "./dto"; import type { AddMemberDto, UpdateMemberRoleDto, WorkspaceResponseDto } from "./dto";
/** /**
* User-scoped workspace operations. * User-scoped workspace operations.