Skip to content

Commit 459ce5c

Browse files
committed
write audit log
1 parent 2eea932 commit 459ce5c

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

coderd/workspacebuilds.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package coderd
33
import (
44
"context"
55
"database/sql"
6+
"encoding/json"
67
"errors"
78
"fmt"
89
"math"
@@ -431,6 +432,37 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
431432
// Client probably doesn't care about this error, so just log it.
432433
api.Logger.Error(ctx, "failed to post provisioner job to pubsub", slog.Error(err))
433434
}
435+
436+
// We may need to complete the audit if wsbuilder determined that
437+
// no provisioner could handle an orphan-delete job and completed it.
438+
if createBuild.Orphan && createBuild.Transition == codersdk.WorkspaceTransitionDelete && provisionerJob.CompletedAt.Valid {
439+
buildResourceInfo := audit.AdditionalFields{
440+
WorkspaceName: workspace.Name,
441+
BuildNumber: strconv.Itoa(int(workspaceBuild.BuildNumber)),
442+
BuildReason: workspaceBuild.Reason,
443+
WorkspaceID: workspace.ID,
444+
WorkspaceOwner: workspace.OwnerName,
445+
}
446+
briBytes, err := json.Marshal(buildResourceInfo)
447+
if err != nil {
448+
api.Logger.Error(ctx, "failed to marshal build resource info for audit", slog.Error(err))
449+
}
450+
auditor := api.Auditor.Load()
451+
bag := audit.BaggageFromContext(ctx)
452+
audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.WorkspaceBuild]{
453+
Audit: *auditor,
454+
Log: api.Logger,
455+
UserID: provisionerJob.InitiatorID,
456+
OrganizationID: workspace.OrganizationID,
457+
RequestID: provisionerJob.ID,
458+
IP: bag.IP,
459+
Action: database.AuditActionDelete,
460+
Old: previousWorkspaceBuild,
461+
New: *workspaceBuild,
462+
Status: http.StatusOK,
463+
AdditionalFields: briBytes,
464+
})
465+
}
434466
}
435467

436468
apiBuild, err := api.convertWorkspaceBuild(

coderd/wsbuilder/wsbuilder.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,6 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
493493
return BuildError{http.StatusInternalServerError, "mark orphan-delete provisioner job as completed", err}
494494
}
495495

496-
// TODO: audit baggage?
497-
498496
// Re-fetch the completed provisioner job.
499497
if pj, err := store.GetProvisionerJobByID(b.ctx, provisionerJob.ID); err == nil {
500498
provisionerJob = pj

0 commit comments

Comments
 (0)