github.com/GregorioDiStefano/go-file-storage@v0.0.0-20161001105139-5707ab351525/controllers/deleteFile.go (about)

     1  package controller
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/GregorioDiStefano/go-file-storage/log"
     7  	"github.com/GregorioDiStefano/go-file-storage/models"
     8  	"github.com/gin-gonic/gin"
     9  )
    10  
    11  type Delete struct {
    12  	uploader GenericUploader
    13  }
    14  
    15  func NewDeleter(uploader Upload) *Delete {
    16  	return &Delete{uploader}
    17  }
    18  
    19  func (delete Delete) DeleteFile(c *gin.Context) {
    20  	key := c.Param("key")
    21  	deleteKey := c.Param("delete_key")
    22  	fileName := c.Param("filename")
    23  
    24  	if models.DB.DoesKeyExist(key) {
    25  		sf := models.DB.ReadStoredFile(key)
    26  
    27  		if sf.Deleted {
    28  			log.WithFields(log.Fields{"key": key, "delete_key": deleteKey, "fn": fileName}).Infoln("File is already deleted")
    29  			sendError(c, "File is already deleted.")
    30  			return
    31  		}
    32  
    33  		if sf.DeleteKey != deleteKey || sf.FileName != fileName {
    34  			log.WithFields(log.Fields{"key": key, "delete_key": deleteKey, "fn": fileName}).Infoln("Delete key or filename was incorrect")
    35  			sendError(c, "Delete key or filename was incorrect")
    36  			return
    37  		}
    38  
    39  		if err := delete.uploader.doActualDelete(deleteKey, key, fileName); err != nil {
    40  			//log.WithFields(log.Fields{"key" : key, "delete_key": deleteKey, "fn": fileName}).Infoln("Delete key or filename was incorrect")
    41  			sendError(c, "Failed to delete file")
    42  			return
    43  		}
    44  
    45  		sf.Deleted = true
    46  		models.DB.WriteStoredFile(*sf)
    47  		log.WithFields(log.Fields{"key": key, "delete_key": deleteKey, "fn": fileName}).Infoln("File set to deleted.")
    48  		c.JSON(http.StatusOK, map[string]string{"msg": "File deleted"})
    49  		return
    50  	}
    51  
    52  	log.WithFields(log.Fields{"key": key, "delete_key": deleteKey, "fn": fileName}).Infoln("Failed to delete file.")
    53  	sendError(c, "Something went wrong deleting the requested file")
    54  }