@@ -122,14 +122,32 @@ func (gl *GitLabGateway) authenticate(w http.ResponseWriter, r *http.Request) er
122
122
var gitlabLinkRegex = regexp .MustCompile ("<(.*?)>" )
123
123
var gitlabLinkRelRegex = regexp .MustCompile ("rel=\" (.*?)\" " )
124
124
125
+ func rewriteGitlabLinkEntry (linkEntry , endpointAPIURL , proxyAPIURL string ) string {
126
+ linkAndRel := strings .Split (strings .TrimSpace (linkEntry ), ";" )
127
+ if len (linkAndRel ) != 2 {
128
+ return linkEntry
129
+ }
130
+
131
+ linkMatch := gitlabLinkRegex .FindStringSubmatch (linkAndRel [0 ])
132
+ if len (linkMatch ) < 2 {
133
+ return linkEntry
134
+ }
135
+
136
+ relMatch := gitlabLinkRelRegex .FindStringSubmatch (linkAndRel [1 ])
137
+ if len (relMatch ) < 2 {
138
+ return linkEntry
139
+ }
140
+
141
+ proxiedLink := proxyAPIURL + strings .TrimPrefix (linkMatch [1 ], endpointAPIURL )
142
+ rel := relMatch [1 ]
143
+ return "<" + proxiedLink + ">; rel=\" " + rel + "\" "
144
+ }
145
+
125
146
func rewriteGitlabLinks (linkHeader , endpointAPIURL , proxyAPIURL string ) string {
126
147
linkEntries := strings .Split (linkHeader , "," )
127
- finalLinkEntries := []string {}
128
- for _ , linkEntry := range linkEntries {
129
- linkAndRel := strings .Split (strings .TrimSpace (linkEntry ), ";" )
130
- link := proxyAPIURL + strings .TrimPrefix (gitlabLinkRegex .FindStringSubmatch (linkAndRel [0 ])[1 ], endpointAPIURL )
131
- rel := gitlabLinkRelRegex .FindStringSubmatch (linkAndRel [1 ])[1 ]
132
- finalLinkEntries = append (finalLinkEntries , "<" + link + ">; rel=\" " + rel + "\" " )
148
+ finalLinkEntries := make ([]string , len (linkEntries ), len (linkEntries ))
149
+ for i , linkEntry := range linkEntries {
150
+ finalLinkEntries [i ] = rewriteGitlabLinkEntry (linkEntry , endpointAPIURL , proxyAPIURL )
133
151
}
134
152
finalLinkHeader := strings .Join (finalLinkEntries , "," )
135
153
return finalLinkHeader
0 commit comments