svchost/auth: static credentials source
This uses an in-memory table of credentials keyed on hostname. This is the simplest possible credentials source that can actually return credentials, and is suitable for representing statically-configured credentials from configuration.
This commit is contained in:
parent
865e61b4ea
commit
d5b0beac01
|
@ -0,0 +1,28 @@
|
||||||
|
package auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hashicorp/terraform/svchost"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StaticCredentialsSource is a credentials source that retrieves credentials
|
||||||
|
// from the provided map. It returns nil if a requested hostname is not
|
||||||
|
// present in the map.
|
||||||
|
//
|
||||||
|
// The caller should not modify the given map after passing it to this function.
|
||||||
|
func StaticCredentialsSource(creds map[svchost.Hostname]map[string]interface{}) CredentialsSource {
|
||||||
|
return staticCredentialsSource(creds)
|
||||||
|
}
|
||||||
|
|
||||||
|
type staticCredentialsSource map[svchost.Hostname]map[string]interface{}
|
||||||
|
|
||||||
|
func (s staticCredentialsSource) ForHost(host svchost.Hostname) (HostCredentials, error) {
|
||||||
|
if s == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if m, exists := s[host]; exists {
|
||||||
|
return HostCredentialsFromMap(m), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package auth
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/svchost"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestStaticCredentialsSource(t *testing.T) {
|
||||||
|
src := StaticCredentialsSource(map[svchost.Hostname]map[string]interface{}{
|
||||||
|
svchost.Hostname("example.com"): map[string]interface{}{
|
||||||
|
"token": "abc123",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("exists", func(t *testing.T) {
|
||||||
|
creds, err := src.ForHost(svchost.Hostname("example.com"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if tokCreds, isToken := creds.(HostCredentialsToken); isToken {
|
||||||
|
if got, want := string(tokCreds), "abc123"; got != want {
|
||||||
|
t.Errorf("wrong token %q; want %q", got, want)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
t.Errorf("creds is %#v; want HostCredentialsToken", creds)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("does not exist", func(t *testing.T) {
|
||||||
|
creds, err := src.ForHost(svchost.Hostname("example.net"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if creds != nil {
|
||||||
|
t.Errorf("creds is %#v; want nil", creds)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue