From 369eba3170ddfe9805ff468cbbe98f3dbb5a9c6c Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 25 Aug 2022 16:34:52 -0400 Subject: [PATCH 1/7] List Secret Scan Alerts with index based pagination --- github/secret_scanning.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/github/secret_scanning.go b/github/secret_scanning.go index ec64950a67..f78ce8595e 100644 --- a/github/secret_scanning.go +++ b/github/secret_scanning.go @@ -61,6 +61,9 @@ type SecretScanningAlertListOptions struct { Resolution string `url:"resolution,omitempty"` ListCursorOptions + + // Listing for Org supports index based pagination + ListOptions } // SecretScanningAlertUpdateOptions specifies optional parameters to the SecretScanningService.UpdateAlert method. From bd6696f822e20eff81bcc8e0282c146720e4b17f Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 1 Sep 2022 14:14:17 -0500 Subject: [PATCH 2/7] added comment --- github/secret_scanning.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/github/secret_scanning.go b/github/secret_scanning.go index f78ce8595e..a7943f10cc 100644 --- a/github/secret_scanning.go +++ b/github/secret_scanning.go @@ -62,7 +62,9 @@ type SecretScanningAlertListOptions struct { ListCursorOptions - // Listing for Org supports index based pagination + // List options can vary on the Enterprise type. On Enterprise Cloud, Secret Scan alerts show to support requesting by page number + // along with provided a cursor for an after param https://docs.github.com/en/enterprise-cloud@latest/rest/secret-scanning#list-secret-scanning-alerts-for-an-organization + // Whereas on Enterprise Server, it is just by pagination by index https://docs.github.com/en/enterprise-server@3.6/rest/secret-scanning#list-secret-scanning-alerts-for-an-organization ListOptions } From c90faaf1ab9c884191d2b3d9d36e9fbdd1894e98 Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 1 Sep 2022 14:23:34 -0500 Subject: [PATCH 3/7] add Secret Scan indexed pagination test --- github/secret_scanning_test.go | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/github/secret_scanning_test.go b/github/secret_scanning_test.go index afe6144e7c..6301c17764 100644 --- a/github/secret_scanning_test.go +++ b/github/secret_scanning_test.go @@ -146,6 +146,73 @@ func TestSecretScanningService_ListAlertsForOrg(t *testing.T) { }) } +func TestSecretScanningService_ListAlertsForOrgListOptions(t *testing.T) { + client, mux, _, teardown := setup() + defer teardown() + + mux.HandleFunc("/orgs/o/secret-scanning/alerts", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{"state": "open", "secret_type": "mailchimp_api_key"}) + + fmt.Fprint(w, `[{ + "number": 1, + "created_at": "1996-06-20T00:00:00Z", + "url": "https://api.github.com/repos/o/r/secret-scanning/alerts/1", + "html_url": "https://github.com/o/r/security/secret-scanning/1", + "locations_url": "https://api.github.com/repos/o/r/secret-scanning/alerts/1/locations", + "state": "open", + "resolution": null, + "resolved_at": null, + "resolved_by": null, + "secret_type": "mailchimp_api_key", + "secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2" + }]`) + }) + + ctx := context.Background() + + // Testing pagination by index + opts := &SecretScanningAlertListOptions{State: "open", SecretType: "mailchimp_api_key", &ListOptions{Page: 1, PerPage: 1}} + + alerts, _, err := client.SecretScanning.ListAlertsForOrg(ctx, "o", opts) + if err != nil { + t.Errorf("SecretScanning.ListAlertsForOrg returned error: %v", err) + } + + date := Timestamp{time.Date(1996, time.June, 20, 00, 00, 00, 0, time.UTC)} + want := []*SecretScanningAlert{ + { + Number: Int(1), + CreatedAt: &date, + URL: String("https://api.github.com/repos/o/r/secret-scanning/alerts/1"), + HTMLURL: String("https://github.com/o/r/security/secret-scanning/1"), + LocationsURL: String("https://api.github.com/repos/o/r/secret-scanning/alerts/1/locations"), + State: String("open"), + Resolution: nil, + ResolvedAt: nil, + ResolvedBy: nil, + SecretType: String("mailchimp_api_key"), + Secret: String("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us2"), + }, + } + + if !cmp.Equal(alerts, want) { + t.Errorf("SecretScanning.ListAlertsForOrg returned %+v, want %+v", alerts, want) + } + + const methodName = "ListAlertsForOrg" + + testBadOptions(t, methodName, func() (err error) { + _, _, err = client.SecretScanning.ListAlertsForOrg(ctx, "\n", opts) + return err + }) + + testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { + _, resp, err := client.SecretScanning.ListAlertsForOrg(ctx, "o", opts) + return resp, err + }) +} + func TestSecretScanningService_ListAlertsForRepo(t *testing.T) { client, mux, _, teardown := setup() defer teardown() From 1a3390c6dd9a9e889c4177e704b6f0739e909163 Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 1 Sep 2022 14:34:42 -0500 Subject: [PATCH 4/7] update test, no pointer --- github/secret_scanning_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/secret_scanning_test.go b/github/secret_scanning_test.go index 6301c17764..0500c2e7df 100644 --- a/github/secret_scanning_test.go +++ b/github/secret_scanning_test.go @@ -172,7 +172,7 @@ func TestSecretScanningService_ListAlertsForOrgListOptions(t *testing.T) { ctx := context.Background() // Testing pagination by index - opts := &SecretScanningAlertListOptions{State: "open", SecretType: "mailchimp_api_key", &ListOptions{Page: 1, PerPage: 1}} + opts := &SecretScanningAlertListOptions{State: "open", SecretType: "mailchimp_api_key", ListOptions{Page: 1, PerPage: 1}} alerts, _, err := client.SecretScanning.ListAlertsForOrg(ctx, "o", opts) if err != nil { From 06d123a6a22c1477c51c23512bbb272c8eeb9cf4 Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 1 Sep 2022 14:40:21 -0500 Subject: [PATCH 5/7] field:value --- github/secret_scanning_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/secret_scanning_test.go b/github/secret_scanning_test.go index 0500c2e7df..b6730203dd 100644 --- a/github/secret_scanning_test.go +++ b/github/secret_scanning_test.go @@ -172,7 +172,7 @@ func TestSecretScanningService_ListAlertsForOrgListOptions(t *testing.T) { ctx := context.Background() // Testing pagination by index - opts := &SecretScanningAlertListOptions{State: "open", SecretType: "mailchimp_api_key", ListOptions{Page: 1, PerPage: 1}} + opts := &SecretScanningAlertListOptions{State: "open", SecretType: "mailchimp_api_key", ListOptions: ListOptions{Page: 1, PerPage: 1}} alerts, _, err := client.SecretScanning.ListAlertsForOrg(ctx, "o", opts) if err != nil { From c9aa01deabdd609a12b52a247825ab0a2d2b5ddd Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 1 Sep 2022 15:16:34 -0500 Subject: [PATCH 6/7] fix expected opts --- github/secret_scanning_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/secret_scanning_test.go b/github/secret_scanning_test.go index b6730203dd..af70fc8087 100644 --- a/github/secret_scanning_test.go +++ b/github/secret_scanning_test.go @@ -152,7 +152,7 @@ func TestSecretScanningService_ListAlertsForOrgListOptions(t *testing.T) { mux.HandleFunc("/orgs/o/secret-scanning/alerts", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") - testFormValues(t, r, values{"state": "open", "secret_type": "mailchimp_api_key"}) + testFormValues(t, r, values{"state": "open", "secret_type": "mailchimp_api_key", "per_page": "1", "page": "1"}) fmt.Fprint(w, `[{ "number": 1, From a41be50eb4a1d7814671231afa87b2280678d1ca Mon Sep 17 00:00:00 2001 From: Mustafa Abban Date: Thu, 1 Sep 2022 15:42:19 -0500 Subject: [PATCH 7/7] Update github/secret_scanning.go Co-authored-by: Glenn Lewis <6598971+gmlewis@users.noreply.github.com> --- github/secret_scanning.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/github/secret_scanning.go b/github/secret_scanning.go index a7943f10cc..d512560d9f 100644 --- a/github/secret_scanning.go +++ b/github/secret_scanning.go @@ -62,9 +62,12 @@ type SecretScanningAlertListOptions struct { ListCursorOptions - // List options can vary on the Enterprise type. On Enterprise Cloud, Secret Scan alerts show to support requesting by page number - // along with provided a cursor for an after param https://docs.github.com/en/enterprise-cloud@latest/rest/secret-scanning#list-secret-scanning-alerts-for-an-organization - // Whereas on Enterprise Server, it is just by pagination by index https://docs.github.com/en/enterprise-server@3.6/rest/secret-scanning#list-secret-scanning-alerts-for-an-organization + // List options can vary on the Enterprise type. + // On Enterprise Cloud, Secret Scan alerts support requesting by page number + // along with providing a cursor for an "after" param. + // See: https://docs.github.com/en/enterprise-cloud@latest/rest/secret-scanning#list-secret-scanning-alerts-for-an-organization + // Whereas on Enterprise Server, pagination is by index. + // See: https://docs.github.com/en/enterprise-server@3.6/rest/secret-scanning#list-secret-scanning-alerts-for-an-organization ListOptions }