Bläddra i källkod

Do not hardcode http as plugin URL scheme for secure connections.

Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera 9 år sedan
förälder
incheckning
dc17613297
2 ändrade filer med 26 tillägg och 4 borttagningar
  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)
+		}
+	}
+}