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  }