aboutsummaryrefslogtreecommitdiff
path: root/request.go
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2018-02-19 20:51:16 +0100
committerStefan Majewsky <majewsky@gmx.net>2018-02-19 20:51:16 +0100
commit8f777460661bbbcbe42730979140f525b382110e (patch)
treef6360dc2f4c7ce9342de38c88cde247fa70a4467 /request.go
parent46081e2068aeea62783863515ab116bb6af20661 (diff)
downloadgo-schwift-8f777460661bbbcbe42730979140f525b382110e.tar.gz
introduce Client interface
Diffstat (limited to 'request.go')
-rw-r--r--request.go38
1 files changed, 6 insertions, 32 deletions
diff --git a/request.go b/request.go
index 9303e85..70c30af 100644
--- a/request.go
+++ b/request.go
@@ -24,8 +24,6 @@ import (
"net/http"
"net/url"
"strings"
-
- "github.com/gophercloud/gophercloud"
)
//RequestOptions contains additional headers and values for a request.
@@ -62,8 +60,8 @@ type Request struct {
}
//URL returns the full URL for this request.
-func (r Request) URL(client *gophercloud.ServiceClient, values url.Values) (string, error) {
- uri, err := url.Parse(client.Endpoint)
+func (r Request) URL(client Client, values url.Values) (string, error) {
+ uri, err := url.Parse(client.EndpointURL())
if err != nil {
return "", err
}
@@ -86,14 +84,8 @@ func (r Request) URL(client *gophercloud.ServiceClient, values url.Values) (stri
return uri.String(), nil
}
-//Do executes this request on the given service client.
-func (r Request) Do(client *gophercloud.ServiceClient) (*http.Response, error) {
- return r.do(client, false)
-}
-
-func (r Request) do(client *gophercloud.ServiceClient, afterReauth bool) (*http.Response, error) {
- provider := client.ProviderClient
-
+//Do executes this request on the given Client.
+func (r Request) Do(client Client) (*http.Response, error) {
//build URL
var values url.Values
if r.Options != nil {
@@ -113,15 +105,11 @@ func (r Request) do(client *gophercloud.ServiceClient, afterReauth bool) (*http.
for k, v := range r.Headers {
req.Header[k] = v
}
- req.Header.Set("User-Agent", provider.UserAgent.Join())
- for key, value := range provider.AuthenticatedHeaders() {
- req.Header.Set(key, value)
- }
if r.Body != nil {
req.Header.Set("Expect", "100-continue")
}
- resp, err := provider.HTTPClient.Do(req)
+ resp, err := client.Do(req)
if err != nil {
return nil, err
}
@@ -141,21 +129,7 @@ func (r Request) do(client *gophercloud.ServiceClient, afterReauth bool) (*http.
}
}
- //detect expired token
- if resp.StatusCode == http.StatusUnauthorized && !afterReauth {
- err := drainResponseBody(resp)
- if err != nil {
- return nil, err
- }
- err = provider.Reauthenticate(resp.Request.Header.Get("X-Auth-Token"))
- if err != nil {
- return nil, err
- }
- //restart request with new token
- return r.do(client, true)
- }
-
- //other unexpected status code -> generate UnexpectedStatusCodeError
+ //unexpected status code -> generate error
buf, err := collectResponseBody(resp)
if err != nil {
return nil, err