36 lines
511 B
Go
36 lines
511 B
Go
|
package webfinger
|
||
|
|
||
|
import (
|
||
|
"net/url"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type Addr struct {
|
||
|
prefix []string
|
||
|
URL *url.URL
|
||
|
}
|
||
|
|
||
|
func Parse(s string) *Addr {
|
||
|
addr := &Addr{}
|
||
|
|
||
|
addr.URL, _ = url.Parse(s)
|
||
|
|
||
|
if addr.URL.Opaque == "" {
|
||
|
return addr
|
||
|
}
|
||
|
|
||
|
var hasPfx = true
|
||
|
pfx := addr.URL.Scheme
|
||
|
|
||
|
for hasPfx {
|
||
|
addr.prefix = append(addr.prefix, pfx)
|
||
|
pfx, addr.URL.Opaque, hasPfx = strings.Cut(addr.URL.Opaque, ":")
|
||
|
}
|
||
|
|
||
|
user, host, _ := strings.Cut(pfx, "@")
|
||
|
addr.URL.User = url.User(user)
|
||
|
addr.URL.Host = host
|
||
|
|
||
|
return addr
|
||
|
}
|