From 3d052d94dd886e4e2f1f9e864d27775d5757b939 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Fri, 16 Dec 2022 16:37:33 +0000 Subject: [PATCH 1/2] removing workspaceOwner --- coderd/audit.go | 36 +++++++++++++++++++++++------------- coderd/workspaces.go | 30 +++++++++++------------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/coderd/audit.go b/coderd/audit.go index b30dd37c28683..0ed7d36f67ae4 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -161,9 +161,8 @@ func (api *API) convertAuditLogs(ctx context.Context, dblogs []database.GetAudit } type AdditionalFields struct { - WorkspaceName string - BuildNumber string - WorkspaceOwner string + WorkspaceName string + BuildNumber string } func (api *API) convertAuditLog(ctx context.Context, dblog database.GetAuditLogsOffsetRow) codersdk.AuditLog { @@ -199,9 +198,8 @@ func (api *API) convertAuditLog(ctx context.Context, dblog database.GetAuditLogs if err != nil { api.Logger.Error(ctx, "unmarshal additional fields", slog.Error(err)) resourceInfo := map[string]string{ - "workspaceName": "unknown", - "buildNumber": "unknown", - "workspaceOwner": "unknown", + "workspaceName": "unknown", + "buildNumber": "unknown", } dblog.AdditionalFields, err = json.Marshal(resourceInfo) api.Logger.Error(ctx, "marshal additional fields", slog.Error(err)) @@ -214,7 +212,7 @@ func (api *API) convertAuditLog(ctx context.Context, dblog database.GetAuditLogs if isDeleted { resourceLink = "" } else { - resourceLink = auditLogResourceLink(dblog, additionalFields) + resourceLink = api.auditLogResourceLink(ctx, dblog, additionalFields) } return codersdk.AuditLog{ @@ -324,7 +322,7 @@ func (api *API) auditLogIsResourceDeleted(ctx context.Context, alog database.Get } } -func auditLogResourceLink(alog database.GetAuditLogsOffsetRow, additionalFields AdditionalFields) string { +func (api *API) auditLogResourceLink(ctx context.Context, alog database.GetAuditLogsOffsetRow, additionalFields AdditionalFields) string { switch alog.ResourceType { case database.ResourceTypeTemplate: return fmt.Sprintf("/templates/%s", @@ -333,18 +331,30 @@ func auditLogResourceLink(alog database.GetAuditLogsOffsetRow, additionalFields return fmt.Sprintf("/users?filter=%s", alog.ResourceTarget) case database.ResourceTypeWorkspace: - workspaceOwner := alog.UserUsername.String - if len(additionalFields.WorkspaceOwner) != 0 && additionalFields.WorkspaceOwner != "unknown" { - workspaceOwner = additionalFields.WorkspaceOwner + workspace, getWorkspaceErr := api.Database.GetWorkspaceByID(ctx, alog.ResourceID) + if getWorkspaceErr != nil { + return "" + } + workspaceOwner, getWorkspaceOwnerErr := api.Database.GetUserByID(ctx, workspace.OwnerID) + if getWorkspaceOwnerErr != nil { + return "" } return fmt.Sprintf("/@%s/%s", - workspaceOwner, alog.ResourceTarget) + workspaceOwner.Username, alog.ResourceTarget) case database.ResourceTypeWorkspaceBuild: if len(additionalFields.WorkspaceName) == 0 || len(additionalFields.BuildNumber) == 0 { return "" } + workspace, getWorkspaceErr := api.Database.GetWorkspaceByID(ctx, alog.ResourceID) + if getWorkspaceErr != nil { + return "" + } + workspaceOwner, getWorkspaceOwnerErr := api.Database.GetUserByID(ctx, workspace.OwnerID) + if getWorkspaceOwnerErr != nil { + return "" + } return fmt.Sprintf("/@%s/%s/builds/%s", - alog.UserUsername.String, additionalFields.WorkspaceName, additionalFields.BuildNumber) + workspaceOwner.Username, additionalFields.WorkspaceName, additionalFields.BuildNumber) default: return "" } diff --git a/coderd/workspaces.go b/coderd/workspaces.go index 146d3bf2374a3..1a55902951e73 100644 --- a/coderd/workspaces.go +++ b/coderd/workspaces.go @@ -237,27 +237,19 @@ func (api *API) workspaceByOwnerAndName(rw http.ResponseWriter, r *http.Request) // Create a new workspace for the currently authenticated user. func (api *API) postWorkspacesByOrganization(rw http.ResponseWriter, r *http.Request) { var ( - ctx = r.Context() - organization = httpmw.OrganizationParam(r) - apiKey = httpmw.APIKey(r) - auditor = api.Auditor.Load() - user = httpmw.UserParam(r) - workspaceResourceInfo = map[string]string{ - "workspaceOwner": user.Username, - } + ctx = r.Context() + organization = httpmw.OrganizationParam(r) + apiKey = httpmw.APIKey(r) + 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, + }) ) - wriBytes, err := json.Marshal(workspaceResourceInfo) - if err != nil { - api.Logger.Warn(ctx, "marshal workspace owner name") - } - aReq, commitAudit := audit.InitRequest[database.Workspace](rw, &audit.RequestParams{ - Audit: *auditor, - Log: api.Logger, - Request: r, - Action: database.AuditActionCreate, - AdditionalFields: wriBytes, - }) defer commitAudit() if !api.Authorize(r, rbac.ActionCreate, From 4a95bbb4a4bc93ec9033a3c33c3395257630350b Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 11 Jan 2023 17:38:51 +0000 Subject: [PATCH 2/2] querying for workspace build --- coderd/audit.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/coderd/audit.go b/coderd/audit.go index aa1eafd57b54b..08f070fdb929d 100644 --- a/coderd/audit.go +++ b/coderd/audit.go @@ -364,7 +364,11 @@ func (api *API) auditLogResourceLink(ctx context.Context, alog database.GetAudit if len(additionalFields.WorkspaceName) == 0 || len(additionalFields.BuildNumber) == 0 { return "" } - workspace, getWorkspaceErr := api.Database.GetWorkspaceByID(ctx, alog.ResourceID) + workspaceBuild, getWorkspaceBuildErr := api.Database.GetWorkspaceBuildByID(ctx, alog.ResourceID) + if getWorkspaceBuildErr != nil { + return "" + } + workspace, getWorkspaceErr := api.Database.GetWorkspaceByID(ctx, workspaceBuild.WorkspaceID) if getWorkspaceErr != nil { return "" }