Skip to content
Snippets Groups Projects
Verified Commit 39e4a175 authored by Dean's avatar Dean
Browse files

Fix delete objects bug

parent c76f6277
No related branches found
Tags v1.4.0
No related merge requests found
module owo.codes/whats-this/api
require (
github.com/BurntSushi/toml v0.3.1 // indirect
github.com/akamensky/base58 v0.0.0-20170920141933-92b0f56f531a
github.com/go-chi/chi v4.0.1+incompatible
github.com/coreos/go-etcd v2.0.0+incompatible // indirect
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/go-chi/chi v4.1.0+incompatible
github.com/go-chi/render v1.0.1
github.com/go-redis/redis v6.15.1+incompatible
github.com/go-redis/redis v6.15.7+incompatible
github.com/gofrs/uuid v3.2.0+incompatible
github.com/kr/pretty v0.1.0 // indirect
github.com/lib/pq v1.0.0
github.com/lib/pq v1.3.0
github.com/mitchellh/mapstructure v1.2.2 // indirect
github.com/onsi/ginkgo v1.7.0 // indirect
github.com/onsi/gomega v1.4.3 // indirect
github.com/pkg/errors v0.8.1
github.com/rs/zerolog v1.11.0
github.com/spf13/pflag v1.0.3
github.com/spf13/viper v1.3.1
github.com/pelletier/go-toml v1.7.0 // indirect
github.com/pkg/errors v0.9.1
github.com/rs/zerolog v1.18.0
github.com/spf13/afero v1.2.2 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.6.2
github.com/stretchr/testify v1.3.0 // indirect
golang.org/x/net v0.0.0-20190420063019-afa5a82059c6 // indirect
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 // indirect
golang.org/x/sys v0.0.0-20200406155108-e3b113bbe6a4 // indirect
golang.org/x/text v0.3.2 // indirect
gopkg.in/ini.v1 v1.55.0 // indirect
)
go 1.13
This diff is collapsed.
......@@ -246,6 +246,16 @@ func GetObject(bucket, key string) (Object, error) {
return scanObject(row)
}
// CheckIfObjectExists returns true if an object exists with the specified hash.
func CheckIfObjectExists(sha256 []byte) (bool, error) {
var count int
err := DB.QueryRow(countOfObjectsBySHA256, sha256).Scan(&count)
if err != nil {
return false, err
}
return count > 0, nil
}
// UpdateObjectToTombstoneByBucketKey sets an object to be a tombstone by bucket and key.
func UpdateObjectToTombstoneByBucketKey(bucket, key string, reason *string, retainAssociatedUser bool, retainHashes bool) error {
sql := updateObjectToTombstoneByBucketKey
......
......@@ -113,27 +113,14 @@ WHERE
LIMIT 1
`
var getObjectBySHA256Hash = `
var countOfObjectsBySHA256 = `
SELECT
bucket,
key,
dir,
"type",
dest_url,
content_type,
content_length,
created_at,
deleted_at,
delete_reason,
md5_hash,
sha256_hash,
associated_user
COUNT(*)
FROM
objects
WHERE
"type" = 0,
sha256_hash = $1
LIMIT 1
`
var updateObjectToTombstoneByBucketKey = `
......
......@@ -90,12 +90,20 @@ func DeleteObject(w http.ResponseWriter, r *http.Request) {
// Delete file from disk if type was 0
if object.Type == 0 {
destPath := filepath.Join(viper.GetString("files.storageLocation"), *object.SHA256Hash)
err = os.Remove(destPath)
exists, err := db.CheckIfObjectExists(object.SHA256HashBytes)
if err != nil {
log.Error().Err(err).Msg("failed to delete object file from disk")
log.Error().Err(err).Str("hash", *object.SHA256Hash).Msg("failed to check if file exists")
panic(apierrors.InternalServerError)
}
if !exists {
destPath := filepath.Join(viper.GetString("files.storageLocation"), *object.SHA256Hash)
err = os.Remove(destPath)
if err != nil {
log.Error().Err(err).Msg("failed to delete object file from disk")
panic(apierrors.InternalServerError)
}
}
}
// Return tombstone response
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment