From 1f9ccfa8d88bdc7b899c29dc4058fe537b9845cb Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Tue, 18 Oct 2022 21:41:56 +0000 Subject: [PATCH 01/11] adding workspace_build resource --- coderd/audit.go | 2 ++ coderd/audit/diff.go | 1 + coderd/audit/request.go | 6 ++++++ coderd/workspacebuilds.go | 28 +++++++++++++++++++++++----- codersdk/audit.go | 3 +++ enterprise/audit/table.go | 14 ++++++++++++++ 6 files changed, 49 insertions(+), 5 deletions(-) diff --git a/coderd/audit.go b/coderd/audit.go index f76a6565bce77..8324897768802 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -289,6 +289,8 @@ func resourceTypeFromString(resourceTypeString string) string { return resourceTypeString case codersdk.ResourceTypeWorkspace: return resourceTypeString + case codersdk.ResourceTypeWorkspaceBuild: + return resourceTypeString case codersdk.ResourceTypeGitSSHKey: return resourceTypeString case codersdk.ResourceTypeAPIKey: diff --git a/coderd/audit/diff.go b/coderd/audit/diff.go index 8d0b5494568f8..b8ca1dc8456f4 100644 --- a/coderd/audit/diff.go +++ b/coderd/audit/diff.go @@ -15,6 +15,7 @@ type Auditable interface { database.TemplateVersion | database.User | database.Workspace | + database.WorkspaceBuild | database.GitSSHKey } diff --git a/coderd/audit/request.go b/coderd/audit/request.go index c23ad2b1f7339..9e830711530db 100644 --- a/coderd/audit/request.go +++ b/coderd/audit/request.go @@ -43,6 +43,8 @@ func ResourceTarget[T Auditable](tgt T) string { return typed.Username case database.Workspace: return typed.Name + case database.WorkspaceBuild: + return string(typed.Transition) case database.GitSSHKey: return typed.PublicKey default: @@ -62,6 +64,8 @@ func ResourceID[T Auditable](tgt T) uuid.UUID { return typed.ID case database.Workspace: return typed.ID + case database.WorkspaceBuild: + return typed.ID case database.GitSSHKey: return typed.UserID default: @@ -81,6 +85,8 @@ func ResourceType[T Auditable](tgt T) database.ResourceType { return database.ResourceTypeUser case database.Workspace: return database.ResourceTypeWorkspace + case database.WorkspaceBuild: + return database.ResourceTypeWorkspaceBuild case database.GitSSHKey: return database.ResourceTypeGitSshKey default: diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index dc89f576b5484..31e7423d1e6ae 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -278,10 +278,11 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { return } - // we only want to create audit logs for delete builds right now + auditor := api.Auditor.Load() + + // if user deletes a workspace, audit the workspace if action == rbac.ActionDelete { var ( - auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ Audit: *auditor, Log: api.Logger, @@ -294,12 +295,29 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { aReq.Old = workspace } + latestBuild, latestBuildErr := api.Database.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspace.ID) + + // if a user starts/stops a workspace, audit the workspace build + if action == rbac.ActionUpdate { + + var ( + aReq, commitAudit = audit.InitRequest[database.WorkspaceBuild](rw, &audit.RequestParams{ + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + }) + ) + + defer commitAudit() + aReq.Old = latestBuild + } + if createBuild.TemplateVersionID == uuid.Nil { - latestBuild, err := api.Database.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspace.ID) - if err != nil { + if latestBuildErr != nil { httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{ Message: "Internal error fetching the latest workspace build.", - Detail: err.Error(), + Detail: latestBuildErr.Error(), }) return } diff --git a/codersdk/audit.go b/codersdk/audit.go index 068d8d63c9b3d..e83aeba86a47e 100644 --- a/codersdk/audit.go +++ b/codersdk/audit.go @@ -19,6 +19,7 @@ const ( ResourceTypeTemplateVersion ResourceType = "template_version" ResourceTypeUser ResourceType = "user" ResourceTypeWorkspace ResourceType = "workspace" + ResourceTypeWorkspaceBuild ResourceType = "workspace_build" ResourceTypeGitSSHKey ResourceType = "git_ssh_key" ResourceTypeAPIKey ResourceType = "api_key" ) @@ -35,6 +36,8 @@ func (r ResourceType) FriendlyString() string { return "user" case ResourceTypeWorkspace: return "workspace" + case ResourceTypeWorkspaceBuild: + return "workspace build" case ResourceTypeGitSSHKey: return "git ssh key" case ResourceTypeAPIKey: diff --git a/enterprise/audit/table.go b/enterprise/audit/table.go index 0a0ebeca7304f..efffc401c2ce7 100644 --- a/enterprise/audit/table.go +++ b/enterprise/audit/table.go @@ -101,6 +101,20 @@ var AuditableResources = auditMap(map[any]map[string]Action{ "ttl": ActionTrack, "last_used_at": ActionIgnore, }, + &database.WorkspaceBuild{}: { + "id": ActionIgnore, // Unimportant to the user + "created_at": ActionIgnore, // Never changes. + "updated_at": ActionIgnore, // Changes, but is implicit and not helpful in a diff. + "workspace_id": ActionTrack, + "template_version_id": ActionTrack, + "build_number": ActionIgnore, // Unimportant to the user + "transition": ActionTrack, + "initiator_id": ActionIgnore, // Changes, but is implicit and not helpful in a diff. + "provisioner_state": ActionIgnore, // Unimportant to the user + "job_id": ActionIgnore, // Unimportant to the user + "deadline": ActionIgnore, // Unimportant to the user + "reason": ActionTrack, + }, }) // auditMap converts a map of struct pointers to a map of struct names as From 13159ba689808d09b28cbb17030684defa51f48b Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 19 Oct 2022 15:28:55 +0000 Subject: [PATCH 02/11] added migration --- coderd/database/dump.sql | 3 ++- .../000063_add_resource_type_workspace_build.down.sql | 2 ++ .../migrations/000063_add_resource_type_workspace_build.up.sql | 1 + coderd/database/models.go | 1 + enterprise/audit/table.go | 2 +- 5 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 coderd/database/migrations/000063_add_resource_type_workspace_build.down.sql create mode 100644 coderd/database/migrations/000063_add_resource_type_workspace_build.up.sql diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index f68f8194f6dc2..a9b4e24bd6e89 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -87,7 +87,8 @@ CREATE TYPE resource_type AS ENUM ( 'user', 'workspace', 'git_ssh_key', - 'api_key' + 'api_key', + 'workspace_build' ); CREATE TYPE user_status AS ENUM ( diff --git a/coderd/database/migrations/000063_add_resource_type_workspace_build.down.sql b/coderd/database/migrations/000063_add_resource_type_workspace_build.down.sql new file mode 100644 index 0000000000000..d1d1637f4fa90 --- /dev/null +++ b/coderd/database/migrations/000063_add_resource_type_workspace_build.down.sql @@ -0,0 +1,2 @@ +-- It's not possible to drop enum values from enum types, so the UP has "IF NOT +-- EXISTS". diff --git a/coderd/database/migrations/000063_add_resource_type_workspace_build.up.sql b/coderd/database/migrations/000063_add_resource_type_workspace_build.up.sql new file mode 100644 index 0000000000000..6892709c8160c --- /dev/null +++ b/coderd/database/migrations/000063_add_resource_type_workspace_build.up.sql @@ -0,0 +1 @@ +ALTER TYPE resource_type ADD VALUE IF NOT EXISTS 'workspace_build'; diff --git a/coderd/database/models.go b/coderd/database/models.go index 7e398552de93e..57e4b55282de2 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -301,6 +301,7 @@ const ( ResourceTypeWorkspace ResourceType = "workspace" ResourceTypeGitSshKey ResourceType = "git_ssh_key" ResourceTypeApiKey ResourceType = "api_key" + ResourceTypeWorkspaceBuild ResourceType = "workspace_build" ) func (e *ResourceType) Scan(src interface{}) error { diff --git a/enterprise/audit/table.go b/enterprise/audit/table.go index efffc401c2ce7..0c91fe84947e1 100644 --- a/enterprise/audit/table.go +++ b/enterprise/audit/table.go @@ -113,7 +113,7 @@ var AuditableResources = auditMap(map[any]map[string]Action{ "provisioner_state": ActionIgnore, // Unimportant to the user "job_id": ActionIgnore, // Unimportant to the user "deadline": ActionIgnore, // Unimportant to the user - "reason": ActionTrack, + "reason": ActionIgnore, // Unimportant to the user }, }) From f1de71755e7f3a73e4693a74f2bd3f2ad53d3d21 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 19 Oct 2022 16:06:53 +0000 Subject: [PATCH 03/11] added migration for audit_actions --- coderd/database/dump.sql | 4 +++- .../migrations/000064_add_audit_actions.down.sql | 2 ++ .../migrations/000064_add_audit_actions.up.sql | 2 ++ coderd/database/models.go | 2 ++ coderd/workspacebuilds.go | 11 ++++++++++- codersdk/audit.go | 6 ++++++ site/src/api/typesGenerated.ts | 3 ++- 7 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 coderd/database/migrations/000064_add_audit_actions.down.sql create mode 100644 coderd/database/migrations/000064_add_audit_actions.up.sql diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index a9b4e24bd6e89..2631e4214deeb 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -14,7 +14,9 @@ CREATE TYPE app_sharing_level AS ENUM ( CREATE TYPE audit_action AS ENUM ( 'create', 'write', - 'delete' + 'delete', + 'start', + 'stop' ); CREATE TYPE build_reason AS ENUM ( diff --git a/coderd/database/migrations/000064_add_audit_actions.down.sql b/coderd/database/migrations/000064_add_audit_actions.down.sql new file mode 100644 index 0000000000000..d1d1637f4fa90 --- /dev/null +++ b/coderd/database/migrations/000064_add_audit_actions.down.sql @@ -0,0 +1,2 @@ +-- It's not possible to drop enum values from enum types, so the UP has "IF NOT +-- EXISTS". diff --git a/coderd/database/migrations/000064_add_audit_actions.up.sql b/coderd/database/migrations/000064_add_audit_actions.up.sql new file mode 100644 index 0000000000000..f0c81dd4ef15d --- /dev/null +++ b/coderd/database/migrations/000064_add_audit_actions.up.sql @@ -0,0 +1,2 @@ +ALTER TYPE audit_action ADD VALUE IF NOT EXISTS 'start'; +ALTER TYPE audit_action ADD VALUE IF NOT EXISTS 'stop'; diff --git a/coderd/database/models.go b/coderd/database/models.go index 57e4b55282de2..65c2d8e941f16 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -60,6 +60,8 @@ const ( AuditActionCreate AuditAction = "create" AuditActionWrite AuditAction = "write" AuditActionDelete AuditAction = "delete" + AuditActionStart AuditAction = "start" + AuditActionStop AuditAction = "stop" ) func (e *AuditAction) Scan(src interface{}) error { diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index 31e7423d1e6ae..31bd7bf53be5f 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -300,12 +300,21 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { // if a user starts/stops a workspace, audit the workspace build if action == rbac.ActionUpdate { + var auditAction database.AuditAction + if createBuild.Transition == codersdk.WorkspaceTransitionStart { + auditAction = database.AuditActionStart + } else if createBuild.Transition == codersdk.WorkspaceTransitionStop { + auditAction = database.AuditActionStop + } else { + auditAction = database.AuditActionWrite + } + var ( aReq, commitAudit = audit.InitRequest[database.WorkspaceBuild](rw, &audit.RequestParams{ Audit: *auditor, Log: api.Logger, Request: r, - Action: database.AuditActionWrite, + Action: auditAction, }) ) diff --git a/codersdk/audit.go b/codersdk/audit.go index e83aeba86a47e..a68bb2ff6a357 100644 --- a/codersdk/audit.go +++ b/codersdk/audit.go @@ -53,6 +53,8 @@ const ( AuditActionCreate AuditAction = "create" AuditActionWrite AuditAction = "write" AuditActionDelete AuditAction = "delete" + AuditActionStart AuditAction = "start" + AuditActionStop AuditAction = "stop" ) func (a AuditAction) FriendlyString() string { @@ -63,6 +65,10 @@ func (a AuditAction) FriendlyString() string { return "updated" case AuditActionDelete: return "deleted" + case AuditActionStart: + return "started" + case AuditActionStop: + return "stopped" default: return "unknown" } diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 0a709f8927a2a..1a8a770ffd027 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -886,7 +886,7 @@ export interface WorkspaceResourceMetadata { export type APIKeyScope = "all" | "application_connect" // From codersdk/audit.go -export type AuditAction = "create" | "delete" | "write" +export type AuditAction = "create" | "delete" | "start" | "stop" | "write" // From codersdk/workspacebuilds.go export type BuildReason = "autostart" | "autostop" | "initiator" @@ -945,6 +945,7 @@ export type ResourceType = | "template_version" | "user" | "workspace" + | "workspace_build" // From codersdk/sse.go export type ServerSentEventType = "data" | "error" | "ping" From 17aaa38188d33077818abafe4e2b8589e757b2f2 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 19 Oct 2022 17:09:40 +0000 Subject: [PATCH 04/11] fix keyword --- coderd/audit.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/coderd/audit.go b/coderd/audit.go index 8324897768802..fdb0ac588a0ce 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -226,6 +226,13 @@ func auditLogDescription(alog database.GetAuditLogsOffsetRow) string { codersdk.ResourceType(alog.ResourceType).FriendlyString(), ) + // Strings for build updates follow the below format: + // "{user} started workspace build for workspace {target}" + // where target is a workspace instead of the workspace build + if alog.ResourceType == database.ResourceTypeWorkspaceBuild { + str += " for workspace" + } + // We don't display the name for git ssh keys. It's fairly long and doesn't // make too much sense to display. if alog.ResourceType != database.ResourceTypeGitSshKey { From e17abf1376685e25b656f65dcf2a8cb11711fa76 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Thu, 20 Oct 2022 15:43:37 +0000 Subject: [PATCH 05/11] got rid oof diffs for workspace builds --- enterprise/audit/table.go | 25 ++++++++++--------- .../components/AuditLogRow/AuditLogRow.tsx | 18 ++++++------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/enterprise/audit/table.go b/enterprise/audit/table.go index 0c91fe84947e1..a4a697fab01e0 100644 --- a/enterprise/audit/table.go +++ b/enterprise/audit/table.go @@ -101,19 +101,20 @@ var AuditableResources = auditMap(map[any]map[string]Action{ "ttl": ActionTrack, "last_used_at": ActionIgnore, }, + // We don't show any diff for the WorkspaceBuild resource &database.WorkspaceBuild{}: { - "id": ActionIgnore, // Unimportant to the user - "created_at": ActionIgnore, // Never changes. - "updated_at": ActionIgnore, // Changes, but is implicit and not helpful in a diff. - "workspace_id": ActionTrack, - "template_version_id": ActionTrack, - "build_number": ActionIgnore, // Unimportant to the user - "transition": ActionTrack, - "initiator_id": ActionIgnore, // Changes, but is implicit and not helpful in a diff. - "provisioner_state": ActionIgnore, // Unimportant to the user - "job_id": ActionIgnore, // Unimportant to the user - "deadline": ActionIgnore, // Unimportant to the user - "reason": ActionIgnore, // Unimportant to the user + "id": ActionIgnore, + "created_at": ActionIgnore, + "updated_at": ActionIgnore, + "workspace_id": ActionIgnore, + "template_version_id": ActionIgnore, + "build_number": ActionIgnore, + "transition": ActionIgnore, + "initiator_id": ActionIgnore, + "provisioner_state": ActionIgnore, + "job_id": ActionIgnore, + "deadline": ActionIgnore, + "reason": ActionIgnore, }, }) diff --git a/site/src/components/AuditLogRow/AuditLogRow.tsx b/site/src/components/AuditLogRow/AuditLogRow.tsx index 6d72362911983..478c01e05aa19 100644 --- a/site/src/components/AuditLogRow/AuditLogRow.tsx +++ b/site/src/components/AuditLogRow/AuditLogRow.tsx @@ -130,13 +130,11 @@ export const AuditLogRow: React.FC = ({ -
- {isDiffOpen ? : } -
+ {shouldDisplayDiff ? ( +
{isDiffOpen ? : }
+ ) : ( +
+ )} {shouldDisplayDiff && ( @@ -190,8 +188,8 @@ const useStyles = makeStyles((theme) => ({ color: theme.palette.text.secondary, whiteSpace: "nowrap", }, - - disabledDropdownIcon: { - opacity: 0.5, + // offset the absence of the arrow icon on diff-less logs + columnWithoutDiff: { + marginLeft: "24px", }, })) From 69cdf39aa20d3feefe9e99e255dfa5ed1b206c92 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Fri, 21 Oct 2022 16:42:26 +0000 Subject: [PATCH 06/11] adding workspace name to string --- coderd/audit.go | 9 ++++++++- coderd/audit/request.go | 10 ++++++---- coderd/workspacebuilds.go | 17 +++++++++++++---- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/coderd/audit.go b/coderd/audit.go index fdb0ac588a0ce..fcf70c2da4b0c 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -220,6 +220,10 @@ func convertAuditLog(dblog database.GetAuditLogsOffsetRow) codersdk.AuditLog { } } +type WorkspaceResourceInfo struct { + WorkspaceName string +} + func auditLogDescription(alog database.GetAuditLogsOffsetRow) string { str := fmt.Sprintf("{user} %s %s", codersdk.AuditAction(alog.Action).FriendlyString(), @@ -230,7 +234,10 @@ func auditLogDescription(alog database.GetAuditLogsOffsetRow) string { // "{user} started workspace build for workspace {target}" // where target is a workspace instead of the workspace build if alog.ResourceType == database.ResourceTypeWorkspaceBuild { - str += " for workspace" + workspace_bytes := []byte(alog.AdditionalFields) + var workspaceResourceInfo WorkspaceResourceInfo + json.Unmarshal(workspace_bytes, &workspaceResourceInfo) + str += " for workspace " + workspaceResourceInfo.WorkspaceName } // We don't display the name for git ssh keys. It's fairly long and doesn't diff --git a/coderd/audit/request.go b/coderd/audit/request.go index 9e830711530db..c6339d982bcc6 100644 --- a/coderd/audit/request.go +++ b/coderd/audit/request.go @@ -20,8 +20,9 @@ type RequestParams struct { Audit Auditor Log slog.Logger - Request *http.Request - Action database.AuditAction + Request *http.Request + Action database.AuditAction + AdditionalFields json.RawMessage } type Request[T Auditable] struct { @@ -44,7 +45,8 @@ func ResourceTarget[T Auditable](tgt T) string { case database.Workspace: return typed.Name case database.WorkspaceBuild: - return string(typed.Transition) + // this isn't used + return string(typed.BuildNumber) case database.GitSSHKey: return typed.PublicKey default: @@ -147,7 +149,7 @@ func InitRequest[T Auditable](w http.ResponseWriter, p *RequestParams) (*Request Diff: diffRaw, StatusCode: int32(sw.Status), RequestID: httpmw.RequestID(p.Request), - AdditionalFields: json.RawMessage("{}"), + AdditionalFields: p.AdditionalFields, }) if err != nil { p.Log.Error(logCtx, "export audit log", slog.Error(err)) diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index 31bd7bf53be5f..bad847c6f6aba 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -309,12 +309,21 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { auditAction = database.AuditActionWrite } + // We pass the workspace name to the Auditor so that it + // can form a friendly string for the user. + workspaceResourceInfo := map[string]string{ + "workspaceName": workspace.Name, + } + + wri_bytes, _ := json.Marshal(workspaceResourceInfo) + var ( aReq, commitAudit = audit.InitRequest[database.WorkspaceBuild](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: auditAction, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: auditAction, + AdditionalFields: wri_bytes, }) ) From 2a3ce9ded0844eb991321390d9e997e5143d8cc5 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Fri, 21 Oct 2022 18:33:32 +0000 Subject: [PATCH 07/11] renamed migrations --- coderd/database/dump.sql | 2 +- ...wn.sql => 000065_add_resource_type_workspace_build.down.sql} | 0 ...d.up.sql => 000065_add_resource_type_workspace_build.up.sql} | 0 coderd/database/models.go | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) rename coderd/database/migrations/{000063_add_resource_type_workspace_build.down.sql => 000065_add_resource_type_workspace_build.down.sql} (100%) rename coderd/database/migrations/{000063_add_resource_type_workspace_build.up.sql => 000065_add_resource_type_workspace_build.up.sql} (100%) diff --git a/coderd/database/dump.sql b/coderd/database/dump.sql index 8b0d4249e188b..11892c418db18 100644 --- a/coderd/database/dump.sql +++ b/coderd/database/dump.sql @@ -90,8 +90,8 @@ CREATE TYPE resource_type AS ENUM ( 'workspace', 'git_ssh_key', 'api_key', + 'group', 'workspace_build' - 'group' ); CREATE TYPE user_status AS ENUM ( diff --git a/coderd/database/migrations/000063_add_resource_type_workspace_build.down.sql b/coderd/database/migrations/000065_add_resource_type_workspace_build.down.sql similarity index 100% rename from coderd/database/migrations/000063_add_resource_type_workspace_build.down.sql rename to coderd/database/migrations/000065_add_resource_type_workspace_build.down.sql diff --git a/coderd/database/migrations/000063_add_resource_type_workspace_build.up.sql b/coderd/database/migrations/000065_add_resource_type_workspace_build.up.sql similarity index 100% rename from coderd/database/migrations/000063_add_resource_type_workspace_build.up.sql rename to coderd/database/migrations/000065_add_resource_type_workspace_build.up.sql diff --git a/coderd/database/models.go b/coderd/database/models.go index 61ad1b9f701ed..59347c14f2c1b 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -303,8 +303,8 @@ const ( ResourceTypeWorkspace ResourceType = "workspace" ResourceTypeGitSshKey ResourceType = "git_ssh_key" ResourceTypeApiKey ResourceType = "api_key" - ResourceTypeWorkspaceBuild ResourceType = "workspace_build" ResourceTypeGroup ResourceType = "group" + ResourceTypeWorkspaceBuild ResourceType = "workspace_build" ) func (e *ResourceType) Scan(src interface{}) error { From 2caba31d8cffe433f91ab92ac4dbcaf88be16fb0 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Fri, 21 Oct 2022 18:41:52 +0000 Subject: [PATCH 08/11] fixed lint --- coderd/audit.go | 4 ++-- coderd/workspacebuilds.go | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/coderd/audit.go b/coderd/audit.go index fcf70c2da4b0c..359147a02c55c 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -234,9 +234,9 @@ func auditLogDescription(alog database.GetAuditLogsOffsetRow) string { // "{user} started workspace build for workspace {target}" // where target is a workspace instead of the workspace build if alog.ResourceType == database.ResourceTypeWorkspaceBuild { - workspace_bytes := []byte(alog.AdditionalFields) + workspaceBytes := []byte(alog.AdditionalFields) var workspaceResourceInfo WorkspaceResourceInfo - json.Unmarshal(workspace_bytes, &workspaceResourceInfo) + _ = json.Unmarshal(workspaceBytes, &workspaceResourceInfo) str += " for workspace " + workspaceResourceInfo.WorkspaceName } diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index bad847c6f6aba..3f90b3dbc4c55 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -299,7 +299,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { // if a user starts/stops a workspace, audit the workspace build if action == rbac.ActionUpdate { - var auditAction database.AuditAction if createBuild.Transition == codersdk.WorkspaceTransitionStart { auditAction = database.AuditActionStart @@ -315,7 +314,7 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { "workspaceName": workspace.Name, } - wri_bytes, _ := json.Marshal(workspaceResourceInfo) + wriBytes, _ := json.Marshal(workspaceResourceInfo) var ( aReq, commitAudit = audit.InitRequest[database.WorkspaceBuild](rw, &audit.RequestParams{ @@ -323,7 +322,7 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { Log: api.Logger, Request: r, Action: auditAction, - AdditionalFields: wri_bytes, + AdditionalFields: wriBytes, }) ) From 00c073fc96aabe68d81b588aa1de79ab34405bea Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Fri, 21 Oct 2022 20:08:41 +0000 Subject: [PATCH 09/11] pass throough AdditionalFields and fix tests --- coderd/gitsshkey.go | 10 ++++--- coderd/templates.go | 19 +++++++----- coderd/templateversions.go | 18 ++++++----- coderd/users.go | 55 +++++++++++++++++++--------------- coderd/workspacebuilds.go | 9 +++--- coderd/workspacebuilds_test.go | 4 +-- coderd/workspaces.go | 36 ++++++++++++---------- enterprise/coderd/groups.go | 28 +++++++++-------- enterprise/coderd/templates.go | 10 ++++--- 9 files changed, 107 insertions(+), 82 deletions(-) diff --git a/coderd/gitsshkey.go b/coderd/gitsshkey.go index 357f5b2e44dab..01ccda744dc0f 100644 --- a/coderd/gitsshkey.go +++ b/coderd/gitsshkey.go @@ -1,6 +1,7 @@ package coderd import ( + "encoding/json" "net/http" "github.com/coder/coder/coderd/audit" @@ -18,10 +19,11 @@ func (api *API) regenerateGitSSHKey(rw http.ResponseWriter, r *http.Request) { user = httpmw.UserParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.GitSSHKey](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() diff --git a/coderd/templates.go b/coderd/templates.go index a1108dfc43082..f3550e2b62750 100644 --- a/coderd/templates.go +++ b/coderd/templates.go @@ -5,6 +5,7 @@ import ( "crypto/sha256" "database/sql" "encoding/hex" + "encoding/json" "errors" "fmt" "net/http" @@ -84,10 +85,11 @@ func (api *API) deleteTemplate(rw http.ResponseWriter, r *http.Request) { template = httpmw.TemplateParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -444,10 +446,11 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) { template = httpmw.TemplateParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() diff --git a/coderd/templateversions.go b/coderd/templateversions.go index ccc1cd976111b..719f29e2631d0 100644 --- a/coderd/templateversions.go +++ b/coderd/templateversions.go @@ -599,10 +599,11 @@ func (api *API) patchActiveTemplateVersion(rw http.ResponseWriter, r *http.Reque template = httpmw.TemplateParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -673,10 +674,11 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht organization = httpmw.OrganizationParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.TemplateVersion](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, + AdditionalFields: json.RawMessage("{}"), }) req codersdk.CreateTemplateVersionRequest diff --git a/coderd/users.go b/coderd/users.go index 1e1682dbfd912..8113660f0b1d6 100644 --- a/coderd/users.go +++ b/coderd/users.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "database/sql" + "encoding/json" "errors" "fmt" "net/http" @@ -256,10 +257,11 @@ func (api *API) postUser(rw http.ResponseWriter, r *http.Request) { ctx := r.Context() auditor := *api.Auditor.Load() aReq, commitAudit := audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, + AdditionalFields: json.RawMessage("{}"), }) defer commitAudit() @@ -343,10 +345,11 @@ func (api *API) deleteUser(rw http.ResponseWriter, r *http.Request) { auditor := *api.Auditor.Load() user := httpmw.UserParam(r) aReq, commitAudit := audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, + AdditionalFields: json.RawMessage("{}"), }) aReq.Old = user defer commitAudit() @@ -420,10 +423,11 @@ func (api *API) putUserProfile(rw http.ResponseWriter, r *http.Request) { user = httpmw.UserParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -502,10 +506,11 @@ func (api *API) putUserStatus(status database.UserStatus) func(rw http.ResponseW apiKey = httpmw.APIKey(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -570,10 +575,11 @@ func (api *API) putUserPassword(rw http.ResponseWriter, r *http.Request) { params codersdk.UpdateUserPasswordRequest auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -732,10 +738,11 @@ func (api *API) putUserRoles(rw http.ResponseWriter, r *http.Request) { apiKey = httpmw.APIKey(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index 3f90b3dbc4c55..e60c9eb0c3a70 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -284,10 +284,11 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { if action == rbac.ActionDelete { var ( aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, + AdditionalFields: json.RawMessage("{}"), }) ) diff --git a/coderd/workspacebuilds_test.go b/coderd/workspacebuilds_test.go index 983063a1907bc..46b18a1d7180f 100644 --- a/coderd/workspacebuilds_test.go +++ b/coderd/workspacebuilds_test.go @@ -579,6 +579,6 @@ func TestWorkspaceBuildStatus(t *testing.T) { require.EqualValues(t, codersdk.WorkspaceStatusDeleted, workspace.LatestBuild.Status) // assert an audit log has been created for deletion - require.Len(t, auditor.AuditLogs, 5) - assert.Equal(t, database.AuditActionDelete, auditor.AuditLogs[4].Action) + require.Len(t, auditor.AuditLogs, 7) + assert.Equal(t, database.AuditActionDelete, auditor.AuditLogs[6].Action) } diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 0295dc29d5e56..e35371cc23125 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -282,10 +282,11 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req auditor = api.Auditor.Load() user = httpmw.UserParam(r) aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -566,10 +567,11 @@ func (api *API) patchWorkspace(rw http.ResponseWriter, r *http.Request) { workspace = httpmw.WorkspaceParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -644,10 +646,11 @@ func (api *API) putWorkspaceAutostart(rw http.ResponseWriter, r *http.Request) { workspace = httpmw.WorkspaceParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -706,10 +709,11 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) { workspace = httpmw.WorkspaceParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() diff --git a/enterprise/coderd/groups.go b/enterprise/coderd/groups.go index 6537602eb3b7d..c41ec09769c2c 100644 --- a/enterprise/coderd/groups.go +++ b/enterprise/coderd/groups.go @@ -2,6 +2,7 @@ package coderd import ( "database/sql" + "encoding/json" "fmt" "net/http" @@ -23,10 +24,11 @@ func (api *API) postGroupByOrganization(rw http.ResponseWriter, r *http.Request) org = httpmw.OrganizationParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Group](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -75,10 +77,11 @@ func (api *API) patchGroup(rw http.ResponseWriter, r *http.Request) { group = httpmw.GroupParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Group](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() @@ -225,10 +228,11 @@ func (api *API) deleteGroup(rw http.ResponseWriter, r *http.Request) { group = httpmw.GroupParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Group](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() diff --git a/enterprise/coderd/templates.go b/enterprise/coderd/templates.go index 9fbcb403735e8..9a3d9a4f7aacb 100644 --- a/enterprise/coderd/templates.go +++ b/enterprise/coderd/templates.go @@ -3,6 +3,7 @@ package coderd import ( "context" "database/sql" + "encoding/json" "fmt" "net/http" @@ -98,10 +99,11 @@ func (api *API) patchTemplateACL(rw http.ResponseWriter, r *http.Request) { template = httpmw.TemplateParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, + AdditionalFields: json.RawMessage("{}"), }) ) defer commitAudit() From 8eab0d0c0ad6e50cc6ca865c19ba016de69c972e Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Mon, 24 Oct 2022 22:24:48 +0000 Subject: [PATCH 10/11] no need to pass through each handler --- coderd/audit/request.go | 4 +++ coderd/gitsshkey.go | 10 +++---- coderd/templates.go | 19 +++++------- coderd/templateversions.go | 18 +++++------ coderd/users.go | 55 +++++++++++++++------------------- coderd/workspacebuilds.go | 31 ++++++++----------- coderd/workspaces.go | 36 ++++++++++------------ enterprise/coderd/groups.go | 28 ++++++++--------- enterprise/coderd/templates.go | 10 +++---- 9 files changed, 93 insertions(+), 118 deletions(-) diff --git a/coderd/audit/request.go b/coderd/audit/request.go index 16853a888dfb5..efba7ebb4304b 100644 --- a/coderd/audit/request.go +++ b/coderd/audit/request.go @@ -137,6 +137,10 @@ func InitRequest[T Auditable](w http.ResponseWriter, p *RequestParams) (*Request } } + if p.AdditionalFields == nil { + p.AdditionalFields = json.RawMessage("{}") + } + ip := parseIP(p.Request.RemoteAddr) err := p.Audit.Export(ctx, database.AuditLog{ ID: uuid.New(), diff --git a/coderd/gitsshkey.go b/coderd/gitsshkey.go index 01ccda744dc0f..357f5b2e44dab 100644 --- a/coderd/gitsshkey.go +++ b/coderd/gitsshkey.go @@ -1,7 +1,6 @@ package coderd import ( - "encoding/json" "net/http" "github.com/coder/coder/coderd/audit" @@ -19,11 +18,10 @@ func (api *API) regenerateGitSSHKey(rw http.ResponseWriter, r *http.Request) { user = httpmw.UserParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.GitSSHKey](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() diff --git a/coderd/templates.go b/coderd/templates.go index f3550e2b62750..a1108dfc43082 100644 --- a/coderd/templates.go +++ b/coderd/templates.go @@ -5,7 +5,6 @@ import ( "crypto/sha256" "database/sql" "encoding/hex" - "encoding/json" "errors" "fmt" "net/http" @@ -85,11 +84,10 @@ func (api *API) deleteTemplate(rw http.ResponseWriter, r *http.Request) { template = httpmw.TemplateParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, }) ) defer commitAudit() @@ -446,11 +444,10 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) { template = httpmw.TemplateParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() diff --git a/coderd/templateversions.go b/coderd/templateversions.go index d40947cc6d2c4..e434482ad8b69 100644 --- a/coderd/templateversions.go +++ b/coderd/templateversions.go @@ -599,11 +599,10 @@ func (api *API) patchActiveTemplateVersion(rw http.ResponseWriter, r *http.Reque template = httpmw.TemplateParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -674,11 +673,10 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht organization = httpmw.OrganizationParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.TemplateVersion](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, }) req codersdk.CreateTemplateVersionRequest diff --git a/coderd/users.go b/coderd/users.go index 8113660f0b1d6..1e1682dbfd912 100644 --- a/coderd/users.go +++ b/coderd/users.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "database/sql" - "encoding/json" "errors" "fmt" "net/http" @@ -257,11 +256,10 @@ func (api *API) postUser(rw http.ResponseWriter, r *http.Request) { ctx := r.Context() auditor := *api.Auditor.Load() aReq, commitAudit := audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, }) defer commitAudit() @@ -345,11 +343,10 @@ func (api *API) deleteUser(rw http.ResponseWriter, r *http.Request) { auditor := *api.Auditor.Load() user := httpmw.UserParam(r) aReq, commitAudit := audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, }) aReq.Old = user defer commitAudit() @@ -423,11 +420,10 @@ func (api *API) putUserProfile(rw http.ResponseWriter, r *http.Request) { user = httpmw.UserParam(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -506,11 +502,10 @@ func (api *API) putUserStatus(status database.UserStatus) func(rw http.ResponseW apiKey = httpmw.APIKey(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -575,11 +570,10 @@ func (api *API) putUserPassword(rw http.ResponseWriter, r *http.Request) { params codersdk.UpdateUserPasswordRequest auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -738,11 +732,10 @@ func (api *API) putUserRoles(rw http.ResponseWriter, r *http.Request) { apiKey = httpmw.APIKey(r) auditor = *api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.User](rw, &audit.RequestParams{ - Audit: auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() diff --git a/coderd/workspacebuilds.go b/coderd/workspacebuilds.go index e60c9eb0c3a70..0e1f5713e58c1 100644 --- a/coderd/workspacebuilds.go +++ b/coderd/workspacebuilds.go @@ -282,15 +282,12 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { // if user deletes a workspace, audit the workspace if action == rbac.ActionDelete { - var ( - aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, - AdditionalFields: json.RawMessage("{}"), - }) - ) + aReq, commitAudit := audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, + }) defer commitAudit() aReq.Old = workspace @@ -317,15 +314,13 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) { wriBytes, _ := json.Marshal(workspaceResourceInfo) - var ( - aReq, commitAudit = audit.InitRequest[database.WorkspaceBuild](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: auditAction, - AdditionalFields: wriBytes, - }) - ) + aReq, commitAudit := audit.InitRequest[database.WorkspaceBuild](rw, &audit.RequestParams{ + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: auditAction, + AdditionalFields: wriBytes, + }) defer commitAudit() aReq.Old = latestBuild diff --git a/coderd/workspaces.go b/coderd/workspaces.go index e35371cc23125..0295dc29d5e56 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -282,11 +282,10 @@ func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Req auditor = api.Auditor.Load() user = httpmw.UserParam(r) aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, }) ) defer commitAudit() @@ -567,11 +566,10 @@ func (api *API) patchWorkspace(rw http.ResponseWriter, r *http.Request) { workspace = httpmw.WorkspaceParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -646,11 +644,10 @@ func (api *API) putWorkspaceAutostart(rw http.ResponseWriter, r *http.Request) { workspace = httpmw.WorkspaceParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -709,11 +706,10 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) { workspace = httpmw.WorkspaceParam(r) auditor = api.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() diff --git a/enterprise/coderd/groups.go b/enterprise/coderd/groups.go index c41ec09769c2c..6537602eb3b7d 100644 --- a/enterprise/coderd/groups.go +++ b/enterprise/coderd/groups.go @@ -2,7 +2,6 @@ package coderd import ( "database/sql" - "encoding/json" "fmt" "net/http" @@ -24,11 +23,10 @@ func (api *API) postGroupByOrganization(rw http.ResponseWriter, r *http.Request) org = httpmw.OrganizationParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Group](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionCreate, }) ) defer commitAudit() @@ -77,11 +75,10 @@ func (api *API) patchGroup(rw http.ResponseWriter, r *http.Request) { group = httpmw.GroupParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Group](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() @@ -228,11 +225,10 @@ func (api *API) deleteGroup(rw http.ResponseWriter, r *http.Request) { group = httpmw.GroupParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Group](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionDelete, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionDelete, }) ) defer commitAudit() diff --git a/enterprise/coderd/templates.go b/enterprise/coderd/templates.go index 9a3d9a4f7aacb..9fbcb403735e8 100644 --- a/enterprise/coderd/templates.go +++ b/enterprise/coderd/templates.go @@ -3,7 +3,6 @@ package coderd import ( "context" "database/sql" - "encoding/json" "fmt" "net/http" @@ -99,11 +98,10 @@ func (api *API) patchTemplateACL(rw http.ResponseWriter, r *http.Request) { template = httpmw.TemplateParam(r) auditor = api.AGPL.Auditor.Load() aReq, commitAudit = audit.InitRequest[database.Template](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionWrite, - AdditionalFields: json.RawMessage("{}"), + Audit: *auditor, + Log: api.Logger, + Request: r, + Action: database.AuditActionWrite, }) ) defer commitAudit() From bdf48bb4d740af3d115d2f89aaad4dff96787ca2 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Mon, 24 Oct 2022 22:46:28 +0000 Subject: [PATCH 11/11] cleaned up migrations --- ...d_audit_actions.down.sql => 000064_add_audit_enums.down.sql} | 0 ...4_add_audit_actions.up.sql => 000064_add_audit_enums.up.sql} | 2 ++ .../000065_add_resource_type_workspace_build.down.sql | 2 -- .../migrations/000065_add_resource_type_workspace_build.up.sql | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) rename coderd/database/migrations/{000064_add_audit_actions.down.sql => 000064_add_audit_enums.down.sql} (100%) rename coderd/database/migrations/{000064_add_audit_actions.up.sql => 000064_add_audit_enums.up.sql} (62%) delete mode 100644 coderd/database/migrations/000065_add_resource_type_workspace_build.down.sql delete mode 100644 coderd/database/migrations/000065_add_resource_type_workspace_build.up.sql diff --git a/coderd/database/migrations/000064_add_audit_actions.down.sql b/coderd/database/migrations/000064_add_audit_enums.down.sql similarity index 100% rename from coderd/database/migrations/000064_add_audit_actions.down.sql rename to coderd/database/migrations/000064_add_audit_enums.down.sql diff --git a/coderd/database/migrations/000064_add_audit_actions.up.sql b/coderd/database/migrations/000064_add_audit_enums.up.sql similarity index 62% rename from coderd/database/migrations/000064_add_audit_actions.up.sql rename to coderd/database/migrations/000064_add_audit_enums.up.sql index f0c81dd4ef15d..dc623e05e77e2 100644 --- a/coderd/database/migrations/000064_add_audit_actions.up.sql +++ b/coderd/database/migrations/000064_add_audit_enums.up.sql @@ -1,2 +1,4 @@ ALTER TYPE audit_action ADD VALUE IF NOT EXISTS 'start'; ALTER TYPE audit_action ADD VALUE IF NOT EXISTS 'stop'; + +ALTER TYPE resource_type ADD VALUE IF NOT EXISTS 'workspace_build'; diff --git a/coderd/database/migrations/000065_add_resource_type_workspace_build.down.sql b/coderd/database/migrations/000065_add_resource_type_workspace_build.down.sql deleted file mode 100644 index d1d1637f4fa90..0000000000000 --- a/coderd/database/migrations/000065_add_resource_type_workspace_build.down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- It's not possible to drop enum values from enum types, so the UP has "IF NOT --- EXISTS". diff --git a/coderd/database/migrations/000065_add_resource_type_workspace_build.up.sql b/coderd/database/migrations/000065_add_resource_type_workspace_build.up.sql deleted file mode 100644 index 6892709c8160c..0000000000000 --- a/coderd/database/migrations/000065_add_resource_type_workspace_build.up.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TYPE resource_type ADD VALUE IF NOT EXISTS 'workspace_build';