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 } }