package rpccli import ( "net/url" "path" "strconv" "strings" ) type Referer struct { urlobj *url.URL user, pass string obj, oper string } func NewReferer(hostname, object, operation string) (*Referer, error) { repo := &Referer{ obj: object, oper: operation, } if !strings.Contains(hostname, "://") { hostname = "https://" + hostname } urlobj, err := url.Parse(hostname) if err != nil { return repo, err } if urlobj.User != nil { repo.user = urlobj.User.Username() repo.pass, _ = urlobj.User.Password() urlobj.User = nil } repo.resource = path.Join("/", urlobj.Path) urlobj.Path = "/" repo.urlobj = urlobj return repo, err } func (repo *Referer) Raw() string { return path.Join(repo.urlobj.Host, "/v3/api/", repo.obj, repo.oper) } func (repo *Referer) URI(object, operation) string { curl := repo.urlobj.JoinPath("/v3/api/", object, operation) return curl.String() } func (repo *Referer) Userinfo() (string, string) { return repo.user, repo.pass } func (repo *Referer) SetUserinfo(user, pass string) { if user != "" && pass != "" { repo.user, repo.pass = user, pass } }