Adding TLS authentication
[icn.git] / cmd / bpa-restapi-agent / internal / app / image.go
index a1beed8..28cda77 100644 (file)
@@ -1,10 +1,10 @@
 package app
 
 import (
-  //"encoding/base64"
        "encoding/json"
-       //"io/ioutil"
-
+       "os"
+       "os/user"
+       "path"
        "bpa-restapi-agent/internal/db"
 
        pkgerrors "github.com/pkg/errors"
@@ -16,7 +16,6 @@ type Image struct {
        ClusterName         string               `json:"cluster_name"`
        Type                string               `json:"type"`
        ImageName           string               `json:"image_name"`
-       Config                                                  string                                                   `json:"config"`
        ImageOffset                                     *int                                                       `json:"image_offset"`
        ImageLength                                     int                                                                      `json:"image_length"`
        UploadComplete                  *bool                                                            `json:"upload_complete"`
@@ -52,6 +51,7 @@ type ImageManager interface {
        Delete(imageName string) error
        Update(imageName string, c Image) (Image, error)
        GetImageRecordByName(imgname, imageName string) (map[string]string, error)
+       GetDirPath(imageName string) (string, string, error)
 }
 
 // ImageClient implements the ImageManager
@@ -66,21 +66,21 @@ type ImageClient struct {
 // which implements the ImageManager
 func NewBinaryImageClient() *ImageClient {
        return &ImageClient{
-               storeName: "binary_image",
+               storeName: "binary_images",
                tagMeta:   "metadata",
        }
 }
 
 func NewContainerImageClient() *ImageClient {
        return &ImageClient{
-               storeName: "container_image",
+               storeName: "container_images",
                tagMeta:   "metadata",
        }
 }
 
 func NewOSImageClient() *ImageClient {
        return &ImageClient{
-               storeName: "os_image",
+               storeName: "os_images",
                tagMeta:   "metadata",
        }
 }
@@ -106,9 +106,37 @@ func (v *ImageClient) Create(c Image) (Image, error) {
                return Image{}, pkgerrors.Wrap(err, "Creating DB Entry")
        }
 
+       err = v.CreateFile(v.storeName, c)
+       if err != nil {
+               return Image{}, pkgerrors.Wrap(err, "Creating File in FS")
+       }
+
        return c, nil
 }
 
+// Create file
+
+func (v *ImageClient) CreateFile(dirName string, c Image) error {
+       filePath, dirPath, err := v.GetDirPath(c.ImageName)
+       if err != nil {
+               return pkgerrors.Wrap(err, "Get file path")
+       }
+  err = os.MkdirAll(dirPath, 0744)
+  if err != nil {
+               return pkgerrors.Wrap(err, "Make image directory")
+  }
+       file1, err := os.Create(filePath)
+       if err != nil {
+               return pkgerrors.Wrap(err, "Create image file")
+       }
+
+       defer file1.Close()
+
+
+  return nil
+}
+
+
 // Get returns Image for corresponding to name
 func (v *ImageClient) Get(imageName string) (Image, error) {
 
@@ -154,6 +182,18 @@ func (v *ImageClient) GetImageRecordByName(imgName string,
        return nil, pkgerrors.New("Image record " + imageRecordName + " not found")
 }
 
+func (v *ImageClient) GetDirPath(imageName string) (string, string, error) {
+       u, err := user.Current()
+       if err != nil {
+               return "", "", pkgerrors.Wrap(err, "Current user")
+       }
+       home := u.HomeDir
+       dirPath := path.Join(home, "images", v.storeName)
+       filePath := path.Join(dirPath, imageName)
+
+       return filePath, dirPath, err
+}
+
 // Delete the Image from database
 func (v *ImageClient) Delete(imageName string) error {
 
@@ -167,6 +207,16 @@ func (v *ImageClient) Delete(imageName string) error {
        if err != nil {
                return pkgerrors.Wrap(err, "Delete Image")
        }
+
+       //Delete image from FS
+       filePath, _, err := v.GetDirPath(imageName)
+       if err != nil {
+               return pkgerrors.Wrap(err, "Get file path")
+       }
+       err = os.Remove(filePath)
+       if err != nil {
+               return pkgerrors.Wrap(err, "Delete image file")
+       }
        return nil
 }
 
@@ -174,8 +224,6 @@ func (v *ImageClient) Delete(imageName string) error {
 func (v *ImageClient) Update(imageName string, c Image) (Image, error) {
 
        key := ImageKey{
-               // Owner:       c.Owner,
-               // ClusterName: c.ClusterName,
                ImageName: imageName,
        }