Merge pull request #6 from 30x/XAPID-1062
Xapid 1062: changes to blobstrore api specs
diff --git a/bundle.go b/bundle.go
index 43f243e..b2206ea 100644
--- a/bundle.go
+++ b/bundle.go
@@ -15,6 +15,7 @@
import (
"encoding/base64"
+ "encoding/json"
"fmt"
"io"
"io/ioutil"
@@ -28,7 +29,7 @@
)
const (
- blobStoreUri = "/v1/blobs/{blobId}/signedurl"
+ blobStoreUri = "/blobs/{blobId}"
)
type bundleManagerInterface interface {
@@ -55,6 +56,14 @@
workers []*BundleDownloader
}
+type blobServerResponse struct {
+ Id string `json:"id"`
+ Kind string `json:"kind"`
+ Self string `json:"self"`
+ SignedUrl string `json:"signedurl"`
+ SignedUrlExpiryTimestamp string `json:"signedurlexpirytimestamp"`
+}
+
func (bm *bundleManager) initializeBundleDownloading() {
atomic.StoreInt32(bm.isClosed, 0)
bm.workers = make([]*BundleDownloader, bm.concurrentDownloads)
@@ -211,7 +220,6 @@
blobUri.Path += strings.Replace(blobStoreUri, "{blobId}", blobId, 1)
parameters := url.Values{}
parameters.Add("action", "GET")
- parameters.Add("key", blobId)
blobUri.RawQuery = parameters.Encode()
uri := blobUri.String()
@@ -221,13 +229,21 @@
log.Errorf("Unable to get signed URL from BlobServer %s: %v", uri, err)
return "", err
}
+ defer surl.Close()
- signedURL, err := ioutil.ReadAll(surl)
+ body, err := ioutil.ReadAll(surl)
if err != nil {
log.Errorf("Invalid response from BlobServer for {%s} error: {%v}", uri, err)
return "", err
}
- return string(signedURL), nil
+ res := blobServerResponse{}
+ err = json.Unmarshal(body, &res)
+ if err != nil {
+ log.Errorf("Invalid response from BlobServer for {%s} error: {%v}", uri, err)
+ return "", err
+ }
+
+ return res.SignedUrl, nil
}
// downloadFromURI involves retrieving the signed URL for the blob, and storing the resource locally
diff --git a/bundle_test.go b/bundle_test.go
index e848cec..0b8b535 100644
--- a/bundle_test.go
+++ b/bundle_test.go
@@ -18,6 +18,7 @@
"net/http"
"bytes"
+ "encoding/json"
"github.com/gorilla/mux"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
@@ -166,7 +167,18 @@
uriString := strings.Replace(bundleTestUrl+b.signedEndpoint, "{blobId}", blobId, 1)
log.Debug("dummyBlobServer returnSigned: " + uriString)
- _, err := io.Copy(w, bytes.NewReader([]byte(uriString)))
+
+ res := blobServerResponse{
+ Id: blobId,
+ Kind: "Blob",
+ Self: r.RequestURI,
+ SignedUrl: uriString,
+ SignedUrlExpiryTimestamp: time.Now().Add(3 * time.Hour).Format(time.RFC3339),
+ }
+
+ resBytes, err := json.Marshal(res)
+ Expect(err).Should(Succeed())
+ _, err = io.Copy(w, bytes.NewReader(resBytes))
Expect(err).Should(Succeed())
w.Header().Set("Content-Type", headerSteam)
}