49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
![]() |
package auth
|
||
|
|
||
|
import (
|
||
|
"github.com/zclconf/go-cty/cty"
|
||
|
)
|
||
|
|
||
|
// HostCredentialsFromMap converts a map of key-value pairs from a credentials
|
||
|
// definition provided by the user (e.g. in a config file, or via a credentials
|
||
|
// helper) into a HostCredentials object if possible, or returns nil if
|
||
|
// no credentials could be extracted from the map.
|
||
|
//
|
||
|
// This function ignores map keys it is unfamiliar with, to allow for future
|
||
|
// expansion of the credentials map format for new credential types.
|
||
|
func HostCredentialsFromMap(m map[string]interface{}) HostCredentials {
|
||
|
if m == nil {
|
||
|
return nil
|
||
|
}
|
||
|
if token, ok := m["token"].(string); ok {
|
||
|
return HostCredentialsToken(token)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// HostCredentialsFromObject converts a cty.Value of an object type into a
|
||
|
// HostCredentials object if possible, or returns nil if no credentials could
|
||
|
// be extracted from the map.
|
||
|
//
|
||
|
// This function ignores object attributes it is unfamiliar with, to allow for
|
||
|
// future expansion of the credentials object structure for new credential types.
|
||
|
//
|
||
|
// If the given value is not of an object type, this function will panic.
|
||
|
func HostCredentialsFromObject(obj cty.Value) HostCredentials {
|
||
|
if !obj.Type().HasAttribute("token") {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
tokenV := obj.GetAttr("token")
|
||
|
if tokenV.IsNull() || !tokenV.IsKnown() {
|
||
|
return nil
|
||
|
}
|
||
|
if !cty.String.Equals(tokenV.Type()) {
|
||
|
// Weird, but maybe some future Terraform version accepts an object
|
||
|
// here for some reason, so we'll be resilient.
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
return HostCredentialsToken(tokenV.AsString())
|
||
|
}
|