From b404367c01f0cc9a8a45fc762cba8592c2050d7d Mon Sep 17 00:00:00 2001 From: Dave Brudner Date: Thu, 8 Oct 2020 10:37:30 -0500 Subject: [PATCH 1/2] Fix "link" header access in `populatePageCursor` to be case-insensitive --- recurly.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/recurly.go b/recurly.go index bbc9168..f693ce4 100644 --- a/recurly.go +++ b/recurly.go @@ -234,12 +234,13 @@ func newResponse(r *http.Response) *response { } func (r *response) populatePageCursor() { - links, ok := r.Response.Header["Link"] - if !ok || len(links) == 0 { + links := r.Response.Header.Get("Link") + + if len(links) == 0 { return } - for _, link := range strings.Split(links[0], ",") { + for _, link := range strings.Split(links, ",") { segments := strings.Split(strings.TrimSpace(link), ";") if len(segments) < 2 { // link must at least have href and rel From c28a1da02fb24a72b8b2b9371bffe41809ff7d2e Mon Sep 17 00:00:00 2001 From: Dave Brudner Date: Mon, 26 Oct 2020 11:29:37 -0500 Subject: [PATCH 2/2] Fixing formatting for links header update --- recurly.go | 49 +++++++++++++++++++++++-------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/recurly.go b/recurly.go index f693ce4..0f03031 100644 --- a/recurly.go +++ b/recurly.go @@ -235,35 +235,32 @@ func newResponse(r *http.Response) *response { func (r *response) populatePageCursor() { links := r.Response.Header.Get("Link") + if links != "" { + for _, link := range strings.Split(links, ",") { + segments := strings.Split(strings.TrimSpace(link), ";") + + if len(segments) < 2 { // link must at least have href and rel + continue + } else if !strings.HasPrefix(segments[0], "<") || !strings.HasSuffix(segments[0], ">") { // ensure href is properly formatted + continue + } - if len(links) == 0 { - return - } - - for _, link := range strings.Split(links, ",") { - segments := strings.Split(strings.TrimSpace(link), ";") - - if len(segments) < 2 { // link must at least have href and rel - continue - } else if !strings.HasPrefix(segments[0], "<") || !strings.HasSuffix(segments[0], ">") { // ensure href is properly formatted - continue - } - - // try to pull out cursor parameter - url, err := url.Parse(segments[0][1 : len(segments[0])-1]) - if err != nil { - continue - } + // try to pull out cursor parameter + url, err := url.Parse(segments[0][1 : len(segments[0])-1]) + if err != nil { + continue + } - cursor := url.Query().Get("cursor") - if cursor == "" { - continue - } + cursor := url.Query().Get("cursor") + if cursor == "" { + continue + } - for _, segment := range segments[1:] { - switch strings.TrimSpace(segment) { - case `rel="next"`: - r.cursor = cursor + for _, segment := range segments[1:] { + switch strings.TrimSpace(segment) { + case `rel="next"`: + r.cursor = cursor + } } } }