cmd: switch programs over to certlib.Fetcher.
This commit is contained in:
@@ -26,8 +26,14 @@ func parseURL(host string) (string, int, error) {
|
||||
return "", 0, fmt.Errorf("certlib/hosts: invalid host: %s", host)
|
||||
}
|
||||
|
||||
if strings.ToLower(url.Scheme) != "https" {
|
||||
switch strings.ToLower(url.Scheme) {
|
||||
case "https":
|
||||
// OK
|
||||
case "tls":
|
||||
// OK
|
||||
default:
|
||||
return "", 0, errors.New("certlib/hosts: only https scheme supported")
|
||||
|
||||
}
|
||||
|
||||
if url.Port() == "" {
|
||||
@@ -43,28 +49,28 @@ func parseURL(host string) (string, int, error) {
|
||||
}
|
||||
|
||||
func parseHostPort(host string) (string, int, error) {
|
||||
host, sport, err := net.SplitHostPort(host)
|
||||
shost, sport, err := net.SplitHostPort(host)
|
||||
if err == nil {
|
||||
portInt, err2 := strconv.ParseInt(sport, 10, 16)
|
||||
if err2 != nil {
|
||||
return "", 0, fmt.Errorf("certlib/hosts: invalid port: %s", sport)
|
||||
}
|
||||
|
||||
return host, int(portInt), nil
|
||||
return shost, int(portInt), nil
|
||||
}
|
||||
|
||||
return host, defaultHTTPSPort, nil
|
||||
}
|
||||
|
||||
func ParseHost(host string) (*Target, error) {
|
||||
host, port, err := parseURL(host)
|
||||
uhost, port, err := parseURL(host)
|
||||
if err == nil {
|
||||
return &Target{Host: host, Port: port}, nil
|
||||
return &Target{Host: uhost, Port: port}, nil
|
||||
}
|
||||
|
||||
host, port, err = parseHostPort(host)
|
||||
shost, port, err := parseHostPort(host)
|
||||
if err == nil {
|
||||
return &Target{Host: host, Port: port}, nil
|
||||
return &Target{Host: shost, Port: port}, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("certlib/hosts: invalid host: %s", host)
|
||||
|
||||
34
certlib/hosts/hosts_test.go
Normal file
34
certlib/hosts/hosts_test.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package hosts_test
|
||||
|
||||
import (
|
||||
"git.wntrmute.dev/kyle/goutils/certlib/hosts"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type testCase struct {
|
||||
Host string
|
||||
Target hosts.Target
|
||||
}
|
||||
|
||||
var testCases = []testCase{
|
||||
{Host: "server-name", Target: hosts.Target{Host: "server-name", Port: 443}},
|
||||
{Host: "server-name:8443", Target: hosts.Target{Host: "server-name", Port: 8443}},
|
||||
{Host: "tls://server-name", Target: hosts.Target{Host: "server-name", Port: 443}},
|
||||
{Host: "https://server-name", Target: hosts.Target{Host: "server-name", Port: 443}},
|
||||
{Host: "https://server-name:8443", Target: hosts.Target{Host: "server-name", Port: 8443}},
|
||||
{Host: "tls://server-name:8443", Target: hosts.Target{Host: "server-name", Port: 8443}},
|
||||
{Host: "https://server-name/something/else", Target: hosts.Target{Host: "server-name", Port: 443}},
|
||||
}
|
||||
|
||||
func TestParseHost(t *testing.T) {
|
||||
for i, tc := range testCases {
|
||||
target, err := hosts.ParseHost(tc.Host)
|
||||
if err != nil {
|
||||
t.Fatalf("test case %d: %s", i+1, err)
|
||||
}
|
||||
|
||||
if target.Host != tc.Target.Host {
|
||||
t.Fatalf("test case %d: got host '%s', want host '%s'", i+1, target.Host, tc.Target.Host)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user