Merge pull request #11301 from syskill/http-basic-auth
Basic authentication for HTTP remote state backend
This commit is contained in:
commit
ead20e4004
|
@ -44,20 +44,40 @@ func httpFactory(conf map[string]string) (Client, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &HTTPClient{
|
ret := &HTTPClient{
|
||||||
URL: url,
|
URL: url,
|
||||||
Client: client,
|
Client: client,
|
||||||
}, nil
|
}
|
||||||
|
if username, ok := conf["username"]; ok && username != "" {
|
||||||
|
ret.Username = username
|
||||||
|
}
|
||||||
|
if password, ok := conf["password"]; ok && password != "" {
|
||||||
|
ret.Password = password
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTPClient is a remote client that stores data in Consul or HTTP REST.
|
// HTTPClient is a remote client that stores data in Consul or HTTP REST.
|
||||||
type HTTPClient struct {
|
type HTTPClient struct {
|
||||||
URL *url.URL
|
URL *url.URL
|
||||||
Client *http.Client
|
Client *http.Client
|
||||||
|
Username string
|
||||||
|
Password string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *HTTPClient) Get() (*Payload, error) {
|
func (c *HTTPClient) Get() (*Payload, error) {
|
||||||
resp, err := c.Client.Get(c.URL.String())
|
req, err := http.NewRequest("GET", c.URL.String(), nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare the request
|
||||||
|
if c.Username != "" {
|
||||||
|
req.SetBasicAuth(c.Username, c.Password)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the request
|
||||||
|
resp, err := c.Client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -141,6 +161,9 @@ func (c *HTTPClient) Put(data []byte) error {
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
req.Header.Set("Content-MD5", b64)
|
req.Header.Set("Content-MD5", b64)
|
||||||
req.ContentLength = int64(len(data))
|
req.ContentLength = int64(len(data))
|
||||||
|
if c.Username != "" {
|
||||||
|
req.SetBasicAuth(c.Username, c.Password)
|
||||||
|
}
|
||||||
|
|
||||||
// Make the request
|
// Make the request
|
||||||
resp, err := c.Client.Do(req)
|
resp, err := c.Client.Do(req)
|
||||||
|
@ -164,6 +187,11 @@ func (c *HTTPClient) Delete() error {
|
||||||
return fmt.Errorf("Failed to make HTTP request: %s", err)
|
return fmt.Errorf("Failed to make HTTP request: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prepare the request
|
||||||
|
if c.Username != "" {
|
||||||
|
req.SetBasicAuth(c.Username, c.Password)
|
||||||
|
}
|
||||||
|
|
||||||
// Make the request
|
// Make the request
|
||||||
resp, err := c.Client.Do(req)
|
resp, err := c.Client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -36,5 +36,7 @@ data "terraform_remote_state" "foo" {
|
||||||
The following configuration options are supported:
|
The following configuration options are supported:
|
||||||
|
|
||||||
* `address` - (Required) The address of the REST endpoint
|
* `address` - (Required) The address of the REST endpoint
|
||||||
|
* `username` - (Optional) The username for HTTP basic authentication
|
||||||
|
* `password` - (Optional) The password for HTTP basic authentication
|
||||||
* `skip_cert_verification` - (Optional) Whether to skip TLS verification.
|
* `skip_cert_verification` - (Optional) Whether to skip TLS verification.
|
||||||
Defaults to `false`.
|
Defaults to `false`.
|
||||||
|
|
Loading…
Reference in New Issue