Skip to content

Commit 7b2ed8b

Browse files
committed
Fix the URL errors during jcli center login callback
1 parent cf2ccd5 commit 7b2ed8b

File tree

3 files changed

+32
-13
lines changed

3 files changed

+32
-13
lines changed

app/cmd/center_login.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"io/ioutil"
1111
"net"
1212
"net/http"
13+
"net/url"
1314
"sync"
1415

1516
"github.com/jenkins-zh/jenkins-cli/app/i18n"
@@ -80,10 +81,13 @@ var centerLoginCmd = &cobra.Command{
8081
logger.Warn("cannot find the external ip, use local instead of.")
8182
}
8283
port := listener.Addr().(*net.TCPAddr).Port
83-
callback := fmt.Sprintf(jenkins.URL+"/instance/generateToken?callback=http://%s:%d", ipAddr, port)
8484

85-
_ = util.Open(callback, "", nil)
86-
httpServerDone.Wait()
85+
var callback string
86+
if callback, err = util.URLJoinAsString(jenkins.URL,
87+
fmt.Sprintf("/instance/generateToken?callback=%s%s:%d", url.QueryEscape("http://"), ipAddr, port)); err == nil {
88+
_ = util.Open(callback, "", nil)
89+
httpServerDone.Wait()
90+
}
8791
return
8892
},
8993
}

client/common.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"log"
1212
"moul.io/http2curl"
1313
"net/http"
14-
"net/url"
15-
"path"
1614
"time"
1715

1816
"github.com/jenkins-zh/jenkins-cli/app"
@@ -246,18 +244,11 @@ func (j *JenkinsCore) Request(method, api string, headers map[string]string, pay
246244
requestURL string
247245
)
248246

249-
var jenkinsHost *url.URL
250-
if jenkinsHost, err = url.Parse(j.URL); err == nil {
251-
pathURL, _ := url.Parse(path.Join(jenkinsHost.Path, api))
252-
jenkinsHost = jenkinsHost.ResolveReference(pathURL)
253-
}
254-
255-
if err != nil {
247+
if requestURL, err = util.URLJoinAsString(j.URL, api); err != nil {
256248
err = fmt.Errorf("cannot parse the URL of Jenkins, error is %v", err)
257249
return
258250
}
259251

260-
requestURL = jenkinsHost.String()
261252
logger.Debug("send HTTP request", zap.String("URL", requestURL), zap.String("method", method))
262253
if req, err = http.NewRequest(method, requestURL, payload); err != nil {
263254
return

util/url.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package util
2+
3+
import (
4+
"net/url"
5+
"path"
6+
)
7+
8+
// URLJoin is a util function to join host URL and API URL
9+
func URLJoin(host, api string) (targetURL *url.URL, err error) {
10+
if targetURL, err = url.Parse(host); err == nil {
11+
pathURL, _ := url.Parse(path.Join(targetURL.Path, api))
12+
targetURL = targetURL.ResolveReference(pathURL)
13+
}
14+
return
15+
}
16+
17+
//URLJoinAsString is a util function to join host URL and API URL
18+
func URLJoinAsString(host, api string) (targetURLStr string, err error) {
19+
var targetURL *url.URL
20+
if targetURL, err = URLJoin(host, api); err == nil {
21+
targetURLStr = targetURL.String()
22+
}
23+
return
24+
}

0 commit comments

Comments
 (0)