瀏覽代碼

Merge pull request #16494 from calavera/fix_plugin_url_scheme

Do not hardcode http as plugin URL scheme for secure connections.
Alexandre Beslic 9 年之前
父節點
當前提交
a1573dffee
共有 2 個文件被更改,包括 26 次插入4 次删除
  1. 10 4
      pkg/plugins/client.go
  2. 16 0
      pkg/plugins/client_test.go

+ 10 - 4
pkg/plugins/client.go

@@ -40,13 +40,19 @@ func NewClient(addr string, tlsConfig tlsconfig.Options) (*Client, error) {
 
 	protoAndAddr := strings.Split(addr, "://")
 	sockets.ConfigureTCPTransport(tr, protoAndAddr[0], protoAndAddr[1])
-	return &Client{&http.Client{Transport: tr}, protoAndAddr[1]}, nil
+
+	scheme := protoAndAddr[0]
+	if scheme != "https" {
+		scheme = "http"
+	}
+	return &Client{&http.Client{Transport: tr}, scheme, protoAndAddr[1]}, nil
 }
 
 // Client represents a plugin client.
 type Client struct {
-	http *http.Client // http client to use
-	addr string       // http address of the plugin
+	http   *http.Client // http client to use
+	scheme string       // scheme protocol of the plugin
+	addr   string       // http address of the plugin
 }
 
 // Call calls the specified method with the specified arguments for the plugin.
@@ -66,7 +72,7 @@ func (c *Client) callWithRetry(serviceMethod string, args interface{}, ret inter
 		return err
 	}
 	req.Header.Add("Accept", versionMimetype)
-	req.URL.Scheme = "http"
+	req.URL.Scheme = c.scheme
 	req.URL.Host = c.addr
 
 	var retries int

+ 16 - 0
pkg/plugins/client_test.go

@@ -105,3 +105,19 @@ func TestAbortRetry(t *testing.T) {
 		}
 	}
 }
+
+func TestClientScheme(t *testing.T) {
+	cases := map[string]string{
+		"tcp://127.0.0.1:8080":          "http",
+		"unix:///usr/local/plugins/foo": "http",
+		"http://127.0.0.1:8080":         "http",
+		"https://127.0.0.1:8080":        "https",
+	}
+
+	for addr, scheme := range cases {
+		c, _ := NewClient(addr, tlsconfig.Options{InsecureSkipVerify: true})
+		if c.scheme != scheme {
+			t.Fatalf("URL scheme mismatch, expected %s, got %s", scheme, c.scheme)
+		}
+	}
+}