65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type HostKeyPolicy string
|
|
|
|
const (
|
|
HostKeyPolicyStrict HostKeyPolicy = "strict"
|
|
HostKeyPolicyAcceptNew HostKeyPolicy = "accept-new"
|
|
HostKeyPolicyOff HostKeyPolicy = "off"
|
|
)
|
|
|
|
func (p *HostKeyPolicy) UnmarshalYAML(value *yaml.Node) error {
|
|
switch value.Kind {
|
|
case yaml.ScalarNode:
|
|
default:
|
|
return fmt.Errorf("host_key_policy must be a boolean or string")
|
|
}
|
|
|
|
switch value.Tag {
|
|
case "!!bool":
|
|
var enabled bool
|
|
if err := value.Decode(&enabled); err != nil {
|
|
return err
|
|
}
|
|
if enabled {
|
|
*p = HostKeyPolicyStrict
|
|
} else {
|
|
*p = HostKeyPolicyOff
|
|
}
|
|
return nil
|
|
case "!!str":
|
|
var raw string
|
|
if err := value.Decode(&raw); err != nil {
|
|
return err
|
|
}
|
|
normalized, ok := NormalizeHostKeyPolicy(raw)
|
|
if !ok {
|
|
return fmt.Errorf("host_key_policy must be strict, true, accept-new, off, or false")
|
|
}
|
|
*p = normalized
|
|
return nil
|
|
default:
|
|
return fmt.Errorf("host_key_policy must be a boolean or string")
|
|
}
|
|
}
|
|
|
|
func NormalizeHostKeyPolicy(value string) (HostKeyPolicy, bool) {
|
|
switch strings.ToLower(value) {
|
|
case "", string(HostKeyPolicyAcceptNew):
|
|
return HostKeyPolicyAcceptNew, true
|
|
case string(HostKeyPolicyStrict), "true":
|
|
return HostKeyPolicyStrict, true
|
|
case string(HostKeyPolicyOff), "false":
|
|
return HostKeyPolicyOff, true
|
|
default:
|
|
return "", false
|
|
}
|
|
}
|