aboutsummaryrefslogtreecommitdiffstats
path: root/src/k8splugin/internal/connection/connectionhandler.go
diff options
context:
space:
mode:
authorKiran Kamineni <kiran.k.kamineni@intel.com>2019-05-01 12:31:14 -0700
committerKiran Kamineni <kiran.k.kamineni@intel.com>2019-05-02 15:25:21 -0700
commita2ae972e814f80184033ee75e9715d1d76323410 (patch)
tree0916ce2ef051b455a76756ba8bd4d9c6d8efd72e /src/k8splugin/internal/connection/connectionhandler.go
parent2eec43edc8b9a438865422fcf6ae340c2aec036d (diff)
Create kubeconfig files in kubeconfig dir
The connectivity api should allow the creation of kubeconfig files in the kubeconfig dir. Issue-ID: MULTICLOUD-292 Change-Id: I5ecc92622648c6c90b71ffad433a132e191cf4b3 Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
Diffstat (limited to 'src/k8splugin/internal/connection/connectionhandler.go')
-rw-r--r--src/k8splugin/internal/connection/connectionhandler.go40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/k8splugin/internal/connection/connectionhandler.go b/src/k8splugin/internal/connection/connectionhandler.go
index 0f8014fa..8c860d31 100644
--- a/src/k8splugin/internal/connection/connectionhandler.go
+++ b/src/k8splugin/internal/connection/connectionhandler.go
@@ -17,8 +17,11 @@
package connection
import (
+ "bytes"
+ "encoding/base64"
"encoding/json"
"io"
+ "io/ioutil"
"net/http"
"github.com/gorilla/mux"
@@ -32,11 +35,25 @@ type ConnectionHandler struct {
Client ConnectionManager
}
-// createHandler handles creation of the connectivity entry in the database
+// CreateHandler handles creation of the connectivity entry in the database
+// This is a multipart handler. See following example curl request
+// curl -i -F "metadata={\"cloud-region\":\"kud\",\"cloud-owner\":\"me\"};type=application/json" \
+// -F file=@/home/user/.kube/config \
+// -X POST http://localhost:8081/v1/connectivity-info
func (h ConnectionHandler) CreateHandler(w http.ResponseWriter, r *http.Request) {
var v Connection
- err := json.NewDecoder(r.Body).Decode(&v)
+ // Implemenation using multipart form
+ // Review and enable/remove at a later date
+ // Set Max size to 16mb here
+ err := r.ParseMultipartForm(16777216)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusUnprocessableEntity)
+ return
+ }
+
+ jsn := bytes.NewBuffer([]byte(r.FormValue("metadata")))
+ err = json.NewDecoder(jsn).Decode(&v)
switch {
case err == io.EOF:
http.Error(w, "Empty body", http.StatusBadRequest)
@@ -58,11 +75,24 @@ func (h ConnectionHandler) CreateHandler(w http.ResponseWriter, r *http.Request)
return
}
- // Kubeconfig is required.
- if v.Kubeconfig == nil {
- http.Error(w, "Missing Kubeconfig in POST request", http.StatusBadRequest)
+ //Read the file section and ignore the header
+ file, _, err := r.FormFile("file")
+ if err != nil {
+ http.Error(w, "Unable to process file", http.StatusUnprocessableEntity)
return
}
+
+ defer file.Close()
+
+ //Convert the file content to base64 for storage
+ content, err := ioutil.ReadAll(file)
+ if err != nil {
+ http.Error(w, "Unable to read file", http.StatusUnprocessableEntity)
+ return
+ }
+
+ v.Kubeconfig = base64.StdEncoding.EncodeToString(content)
+
ret, err := h.Client.Create(v)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)