66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package cryptparse
|
|
|
|
import (
|
|
`fmt`
|
|
`net/url`
|
|
`reflect`
|
|
|
|
`r00t2.io/goutils/structutils`
|
|
)
|
|
|
|
/*
|
|
reflectFlatUri is the reflection used for a TlsFlat when converting to a TlsUri.
|
|
*/
|
|
func reflectFlatUri(s *TlsFlat, tagName string) (tu *TlsUri, err error) {
|
|
|
|
var uri *url.URL
|
|
var field reflect.StructField
|
|
var fieldVal reflect.Value
|
|
var params url.Values = make(url.Values)
|
|
var sVal reflect.Value = reflect.ValueOf(s)
|
|
var sType reflect.Type = sVal.Type()
|
|
var kind reflect.Kind = sType.Kind()
|
|
var parsedTagOpts map[string]bool
|
|
|
|
if s == nil {
|
|
return
|
|
}
|
|
|
|
if uri, err = url.Parse(fmt.Sprintf("tls://%s", s.Host)); err != nil {
|
|
return
|
|
}
|
|
if s.Port != nil {
|
|
uri.Host = fmt.Sprintf("%s:%d", uri.Host, *s.Port)
|
|
}
|
|
|
|
for i := 0; i < sType.NumField(); i++ {
|
|
field = sType.Field(i)
|
|
fieldVal = sVal.Field(i)
|
|
if !fieldVal.CanSet() {
|
|
continue
|
|
}
|
|
|
|
parsedTagOpts = structutils.TagToBoolMap(field, "tlsUri")
|
|
if parsedTagOpts["-"] {
|
|
continue
|
|
}
|
|
|
|
}
|
|
|
|
// TODO
|
|
|
|
if len(params) != 0 {
|
|
if uri.Path == "" {
|
|
uri.Path = "/"
|
|
}
|
|
if uri, err = url.Parse(fmt.Sprintf("%s%s", uri.String(), params.Encode())); err != nil {
|
|
return
|
|
}
|
|
}
|
|
tu = &TlsUri{
|
|
URL: uri,
|
|
}
|
|
|
|
return
|
|
}
|