Revert "Patch 1431"
[icn.git] / cmd / bpa-restapi-agent / api / imagehandler.go
index fa7f697..0d7b787 100644 (file)
@@ -2,14 +2,16 @@ package api
 
 import (
        "bytes"
-       //"encoding/base64"
+       "encoding/base64"
        "encoding/json"
        "fmt"
        "io"
        "io/ioutil"
        "net/http"
        "os"
+       "os/user"
        "log"
+       "path"
        "strconv"
 
        image "bpa-restapi-agent/internal/app"
@@ -70,6 +72,12 @@ func (h imageHandler) createHandler(w http.ResponseWriter, r *http.Request) {
                return
        }
 
+       //Create file directory
+       dir, err := createFileDir(v.Type)
+       if err != nil {
+               log.Fatal("Error creating file server directory", err)
+       }
+
        //Read the file section and ignore the header
        file, _, err := r.FormFile("file")
        if err != nil {
@@ -79,12 +87,31 @@ func (h imageHandler) createHandler(w http.ResponseWriter, r *http.Request) {
 
        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.Config = base64.StdEncoding.EncodeToString(content)
 
        ret, err := h.client.Create(v)
        if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
+       h.dirPath = dir
+       filePath := path.Join(h.dirPath, v.ImageName)
+       file1, err := os.Create(filePath)
+       if err != nil {
+               e := "Error creating file in filesystem"
+               log.Printf("%s %s\n", e, err)
+               w.WriteHeader(http.StatusInternalServerError)
+               return
+       }
+
+       defer file1.Close()
 
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusCreated)
@@ -95,11 +122,30 @@ func (h imageHandler) createHandler(w http.ResponseWriter, r *http.Request) {
        }
 }
 
+// Create file
+
+func createFileDir(dirName string) (string, error) {
+    u, err := user.Current()
+    if err != nil {
+        log.Println("Error while fetching user home directory", err)
+        return "", err
+    }
+    home := u.HomeDir
+    dirPath := path.Join(home, "images", dirName)
+    err = os.MkdirAll(dirPath, 0744)
+    if err != nil {
+        log.Println("Error while creating file server directory", err)
+        return "", err
+    }
+    return dirPath, nil
+}
 
 // getHandler handles GET operations on a particular name
 // Returns an Image
 func (h imageHandler) getHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
+       // ownerName := vars["owner"]
+       // clusterName := vars["clustername"]
        imageName := vars["imgname"]
 
        ret, err := h.client.Get(imageName)
@@ -120,6 +166,8 @@ func (h imageHandler) getHandler(w http.ResponseWriter, r *http.Request) {
 // deleteHandler handles DELETE operations on a particular record
 func (h imageHandler) deleteHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
+       // ownerName := vars["owner"]
+       // clusterName := vars["clustername"]
        imageName := vars["imgname"]
 
        err := h.client.Delete(imageName)
@@ -175,6 +223,15 @@ func (h imageHandler) updateHandler(w http.ResponseWriter, r *http.Request) {
 
        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.Config = base64.StdEncoding.EncodeToString(content)
+
        ret, err := h.client.Update(imageName, v)
        if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -244,12 +301,15 @@ func (h imageHandler) patchHandler(w http.ResponseWriter, r *http.Request) {
                log.Println("Size of received file ", len(body))
        }
 
-       fp, _, err := h.client.GetDirPath(imageName)
+       u, err := user.Current()
        if err != nil {
-               log.Printf("unable to get file path %s\n", err)
-               w.WriteHeader(http.StatusInternalServerError)
-               return
+                       log.Println("Error while fetching user home directory", err)
+                       return
        }
+       home := u.HomeDir
+       dir := path.Join(home, "images", file.Type)
+       h.dirPath = dir
+       fp := fmt.Sprintf("%s/%s", h.dirPath, imageName)
        f, err := os.OpenFile(fp, os.O_APPEND|os.O_WRONLY, 0644)
        if err != nil {
                log.Printf("unable to open file %s\n", err)
@@ -275,12 +335,12 @@ func (h imageHandler) patchHandler(w http.ResponseWriter, r *http.Request) {
                *file.UploadComplete = true
        }
 
-       _, err = h.client.Update(imageName, file)
-       if err != nil {
-               log.Println("Error while updating file", err)
-               w.WriteHeader(http.StatusInternalServerError)
-               return
-       }
+       // err = h.updateFile(file)
+       // if err != nil {
+       //      log.Println("Error while updating file", err)
+       //      w.WriteHeader(http.StatusInternalServerError)
+       //      return
+       // }
        w.WriteHeader(http.StatusNoContent)
 
        return