Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Construct count filter in searchquery.AuditLogs method
  • Loading branch information
kacpersaw committed Jun 30, 2025
commit b599e4dcaad3246f95e3ec469bee7aa8c5d27b0e
19 changes: 4 additions & 15 deletions coderd/audit.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (api *API) auditLogs(rw http.ResponseWriter, r *http.Request) {
}

queryStr := r.URL.Query().Get("q")
filter, errs := searchquery.AuditLogs(ctx, api.Database, queryStr)
filter, countFilter, errs := searchquery.AuditLogs(ctx, api.Database, queryStr)
if len(errs) > 0 {
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
Message: "Invalid audit search query.",
Expand All @@ -62,23 +62,12 @@ func (api *API) auditLogs(rw http.ResponseWriter, r *http.Request) {
if filter.Username == "me" {
filter.UserID = apiKey.UserID
filter.Username = ""
countFilter.UserID = apiKey.UserID
countFilter.Username = ""
}

// Use the same filters to count the number of audit logs
count, err := api.Database.CountAuditLogs(ctx, database.CountAuditLogsParams{
ResourceType: filter.ResourceType,
ResourceID: filter.ResourceID,
OrganizationID: filter.OrganizationID,
ResourceTarget: filter.ResourceTarget,
Action: filter.Action,
UserID: filter.UserID,
Username: filter.Username,
Email: filter.Email,
DateFrom: filter.DateFrom,
DateTo: filter.DateTo,
BuildReason: filter.BuildReason,
RequestID: filter.RequestID,
})
count, err := api.Database.CountAuditLogs(ctx, countFilter)
if dbauthz.IsNotAuthorizedError(err) {
httpapi.Forbidden(rw)
return
Expand Down
22 changes: 19 additions & 3 deletions coderd/searchquery/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,16 @@
// - resource_type: string (enum)
// - action: string (enum)
// - build_reason: string (enum)
func AuditLogs(ctx context.Context, db database.Store, query string) (database.GetAuditLogsOffsetParams, []codersdk.ValidationError) {
func AuditLogs(ctx context.Context, db database.Store, query string) (database.GetAuditLogsOffsetParams,
database.CountAuditLogsParams, []codersdk.ValidationError) {
// Always lowercase for all searches.
query = strings.ToLower(query)
values, errors := searchTerms(query, func(term string, values url.Values) error {
values.Add("resource_type", term)
return nil
})
if len(errors) > 0 {
return database.GetAuditLogsOffsetParams{}, errors
return database.GetAuditLogsOffsetParams{}, database.CountAuditLogsParams{}, errors

Check failure on line 45 in coderd/searchquery/search.go

View workflow job for this annotation

GitHub Actions / lint

database.CountAuditLogsParams is missing fields ResourceType, ResourceID, OrganizationID, ResourceTarget, Action, UserID, Username, Email, DateFrom, DateTo, BuildReason, RequestID (exhaustruct)
}

const dateLayout = "2006-01-02"
Expand All @@ -63,8 +64,23 @@
filter.DateTo = filter.DateTo.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
}

// Prepare the count filter, which uses the same parameters as the GetAuditLogsOffsetParams.
countFilter := database.CountAuditLogsParams{

Check failure on line 68 in coderd/searchquery/search.go

View workflow job for this annotation

GitHub Actions / lint

database.CountAuditLogsParams is missing field UserID (exhaustruct)
RequestID: filter.RequestID,
ResourceID: filter.ResourceID,
ResourceTarget: filter.ResourceTarget,
Username: filter.Username,
Email: filter.Email,
DateFrom: filter.DateFrom,
DateTo: filter.DateTo,
OrganizationID: filter.OrganizationID,
ResourceType: filter.ResourceType,
Action: filter.Action,
BuildReason: filter.BuildReason,
}

parser.ErrorExcessParams(values)
return filter, parser.Errors
return filter, countFilter, parser.Errors
}

func Users(query string) (database.GetUsersParams, []codersdk.ValidationError) {
Expand Down
7 changes: 6 additions & 1 deletion coderd/searchquery/search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,7 @@ func TestSearchAudit(t *testing.T) {
Name string
Query string
Expected database.GetAuditLogsOffsetParams
ExpectedCountParams database.CountAuditLogsParams
ExpectedErrorContains string
}{
{
Expand Down Expand Up @@ -372,6 +373,9 @@ func TestSearchAudit(t *testing.T) {
Expected: database.GetAuditLogsOffsetParams{
ResourceTarget: "foo",
},
ExpectedCountParams: database.CountAuditLogsParams{
ResourceTarget: "foo",
},
},
{
Name: "RequestID",
Expand All @@ -386,7 +390,7 @@ func TestSearchAudit(t *testing.T) {
// Do not use a real database, this is only used for an
// organization lookup.
db := dbmem.New()
values, errs := searchquery.AuditLogs(context.Background(), db, c.Query)
values, countValues, errs := searchquery.AuditLogs(context.Background(), db, c.Query)
if c.ExpectedErrorContains != "" {
require.True(t, len(errs) > 0, "expect some errors")
var s strings.Builder
Expand All @@ -397,6 +401,7 @@ func TestSearchAudit(t *testing.T) {
} else {
require.Len(t, errs, 0, "expected no error")
require.Equal(t, c.Expected, values, "expected values")
require.Equal(t, c.ExpectedCountParams, countValues, "expected count values")
}
})
}
Expand Down
Loading