From e92aa7e8baa4d9a80532a8da5cd969e8cfdaf517 Mon Sep 17 00:00:00 2001 From: Mathias Fredriksson Date: Mon, 24 Feb 2025 12:24:04 +0000 Subject: [PATCH] fix(coderd): handle deletes and links for new agent/app audit resources --- coderd/audit.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/coderd/audit.go b/coderd/audit.go index 72be70754c2ea..ce932c9143a98 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -367,6 +367,26 @@ func (api *API) auditLogIsResourceDeleted(ctx context.Context, alog database.Get api.Logger.Error(ctx, "unable to fetch workspace", slog.Error(err)) } return workspace.Deleted + case database.ResourceTypeWorkspaceAgent: + // We use workspace as a proxy for workspace agents. + workspace, err := api.Database.GetWorkspaceByAgentID(ctx, alog.AuditLog.ResourceID) + if err != nil { + if xerrors.Is(err, sql.ErrNoRows) { + return true + } + api.Logger.Error(ctx, "unable to fetch workspace", slog.Error(err)) + } + return workspace.Deleted + case database.ResourceTypeWorkspaceApp: + // We use workspace as a proxy for workspace apps. + workspace, err := api.Database.GetWorkspaceByWorkspaceAppID(ctx, alog.AuditLog.ResourceID) + if err != nil { + if xerrors.Is(err, sql.ErrNoRows) { + return true + } + api.Logger.Error(ctx, "unable to fetch workspace", slog.Error(err)) + } + return workspace.Deleted case database.ResourceTypeOauth2ProviderApp: _, err := api.Database.GetOAuth2ProviderAppByID(ctx, alog.AuditLog.ResourceID) if xerrors.Is(err, sql.ErrNoRows) { @@ -429,6 +449,26 @@ func (api *API) auditLogResourceLink(ctx context.Context, alog database.GetAudit return fmt.Sprintf("/@%s/%s/builds/%s", workspaceOwner.Username, additionalFields.WorkspaceName, additionalFields.BuildNumber) + case database.ResourceTypeWorkspaceAgent: + if additionalFields.WorkspaceOwner != "" && additionalFields.WorkspaceName != "" { + return fmt.Sprintf("/@%s/%s", additionalFields.WorkspaceOwner, additionalFields.WorkspaceName) + } + workspace, getWorkspaceErr := api.Database.GetWorkspaceByAgentID(ctx, alog.AuditLog.ResourceID) + if getWorkspaceErr != nil { + return "" + } + return fmt.Sprintf("/@%s/%s", workspace.OwnerUsername, workspace.Name) + + case database.ResourceTypeWorkspaceApp: + if additionalFields.WorkspaceOwner != "" && additionalFields.WorkspaceName != "" { + return fmt.Sprintf("/@%s/%s", additionalFields.WorkspaceOwner, additionalFields.WorkspaceName) + } + workspace, getWorkspaceErr := api.Database.GetWorkspaceByWorkspaceAppID(ctx, alog.AuditLog.ResourceID) + if getWorkspaceErr != nil { + return "" + } + return fmt.Sprintf("/@%s/%s", workspace.OwnerUsername, workspace.Name) + case database.ResourceTypeOauth2ProviderApp: return fmt.Sprintf("/deployment/oauth2-provider/apps/%s", alog.AuditLog.ResourceID)