// Package route is a higher level client for routed suitable to embed into // Go programs. package route import ( "net/http" "git.xeserv.us/xena/route/proto" ) // New creates a new instance of the routed client with a given token and service // URL. func New(routedURL, token string, underlying *http.Client) *Client { c := &Client{ underlying: underlying, authToken: token, serverURL: routedURL, } c.Backends = proto.NewBackendsProtobufClient(routedURL, c.hClient()) c.Routes = proto.NewRoutesProtobufClient(routedURL, c.hClient()) c.Tokens = proto.NewTokensProtobufClient(routedURL, c.hClient()) return c } // Client is a higher level client for routed type Client struct { Backends proto.Backends Routes proto.Routes Tokens proto.Tokens underlying *http.Client authToken string serverURL string } // RoundTrip executes a HTTP request, adding authentication headers and then // executing it using the underlying http client. func (c *Client) RoundTrip(r *http.Request) (*http.Response, error) { ck := &http.Cookie{ Name: "routed", Value: c.authToken, } r.AddCookie(ck) return c.underlying.Do(r) } func (c *Client) hClient() *http.Client { return &http.Client{ Transport: c, } }