49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
|
package http
|
||
|
|
||
|
import (
|
||
|
"github.com/dolanor/caldav-go/utils"
|
||
|
"io"
|
||
|
"log"
|
||
|
"net/url"
|
||
|
spath "path"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var _ = log.Print
|
||
|
|
||
|
// a server that accepts HTTP requests
|
||
|
type Server struct {
|
||
|
baseUrl *url.URL
|
||
|
}
|
||
|
|
||
|
// creates a reference to an http server
|
||
|
func NewServer(baseUrlStr string) (*Server, error) {
|
||
|
var err error
|
||
|
var s = new(Server)
|
||
|
if s.baseUrl, err = url.Parse(baseUrlStr); err != nil {
|
||
|
return nil, utils.NewError(NewServer, "unable to parse server base url", baseUrlStr, err)
|
||
|
} else {
|
||
|
return s, nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// converts a path name to an absolute URL
|
||
|
func (s *Server) UserInfo() *url.Userinfo {
|
||
|
return s.baseUrl.User
|
||
|
}
|
||
|
|
||
|
// converts a path name to an absolute URL
|
||
|
func (s *Server) AbsUrlStr(path string) string {
|
||
|
uri := *s.baseUrl
|
||
|
uri.Path = spath.Join(uri.Path, path)
|
||
|
if strings.HasSuffix(path, "/") {
|
||
|
uri.Path = uri.Path + "/"
|
||
|
}
|
||
|
return uri.String()
|
||
|
}
|
||
|
|
||
|
// creates a new HTTP request object
|
||
|
func (s *Server) NewRequest(method string, path string, body ...io.ReadCloser) (*Request, error) {
|
||
|
return NewRequest(method, s.AbsUrlStr(path), body...)
|
||
|
}
|