github.com/philhug/dnscontrol@v0.2.4-0.20180625181521-921fa9849001/models/t_tlsa.go (about) 1 package models 2 3 import ( 4 "strconv" 5 "strings" 6 7 "github.com/pkg/errors" 8 ) 9 10 // SetTargetTLSA sets the TLSA fields. 11 func (rc *RecordConfig) SetTargetTLSA(usage, selector, matchingtype uint8, target string) error { 12 rc.TlsaUsage = usage 13 rc.TlsaSelector = selector 14 rc.TlsaMatchingType = matchingtype 15 rc.SetTarget(target) 16 if rc.Type == "" { 17 rc.Type = "TLSA" 18 } 19 if rc.Type != "TLSA" { 20 panic("assertion failed: SetTargetTLSA called when .Type is not TLSA") 21 } 22 return nil 23 } 24 25 // SetTargetTLSAStrings is like SetTargetTLSA but accepts strings. 26 func (rc *RecordConfig) SetTargetTLSAStrings(usage, selector, matchingtype, target string) (err error) { 27 var i64usage, i64selector, i64matchingtype uint64 28 if i64usage, err = strconv.ParseUint(usage, 10, 8); err == nil { 29 if i64selector, err = strconv.ParseUint(selector, 10, 8); err == nil { 30 if i64matchingtype, err = strconv.ParseUint(matchingtype, 10, 8); err == nil { 31 return rc.SetTargetTLSA(uint8(i64usage), uint8(i64selector), uint8(i64matchingtype), target) 32 } 33 } 34 } 35 return errors.Wrap(err, "TLSA has value that won't fit in field") 36 } 37 38 // SetTargetTLSAString is like SetTargetTLSA but accepts one big string. 39 func (rc *RecordConfig) SetTargetTLSAString(s string) error { 40 part := strings.Fields(s) 41 if len(part) != 4 { 42 return errors.Errorf("TLSA value does not contain 4 fields: (%#v)", s) 43 } 44 return rc.SetTargetTLSAStrings(part[0], part[1], part[2], part[3]) 45 }