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)
 }