summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorDaniel Schalla <daniel@schalla.me>2018-06-25 18:12:59 +0200
committerHarrison Healey <harrisonmhealey@gmail.com>2018-06-25 12:12:59 -0400
commitecefa6cdd1e7376046bbec82c1b47f7756fea646 (patch)
treed1cb2486e344c1bb93353020713b9eb2146a5b6f /utils
parentfc158fce907b602bbde3babfadfd1a04d1dde31e (diff)
downloadchat-ecefa6cdd1e7376046bbec82c1b47f7756fea646.tar.gz
chat-ecefa6cdd1e7376046bbec82c1b47f7756fea646.tar.bz2
chat-ecefa6cdd1e7376046bbec82c1b47f7756fea646.zip
Implementation of File Exists Function; Delete FileInfos upon Permanent User Delete (#8958)
Check if file was deleted on FS Warning message if file couldnt be removed
Diffstat (limited to 'utils')
-rw-r--r--utils/file_backend.go1
-rw-r--r--utils/file_backend_local.go12
-rw-r--r--utils/file_backend_s3.go19
-rw-r--r--utils/file_backend_test.go17
4 files changed, 49 insertions, 0 deletions
diff --git a/utils/file_backend.go b/utils/file_backend.go
index 9ed564592..368e1ba28 100644
--- a/utils/file_backend.go
+++ b/utils/file_backend.go
@@ -15,6 +15,7 @@ type FileBackend interface {
Reader(path string) (io.ReadCloser, *model.AppError)
ReadFile(path string) ([]byte, *model.AppError)
+ FileExists(path string) (bool, *model.AppError)
CopyFile(oldPath, newPath string) *model.AppError
MoveFile(oldPath, newPath string) *model.AppError
WriteFile(fr io.Reader, path string) (int64, *model.AppError)
diff --git a/utils/file_backend_local.go b/utils/file_backend_local.go
index ec0c657a7..681ab9234 100644
--- a/utils/file_backend_local.go
+++ b/utils/file_backend_local.go
@@ -49,6 +49,18 @@ func (b *LocalFileBackend) ReadFile(path string) ([]byte, *model.AppError) {
}
}
+func (b *LocalFileBackend) FileExists(path string) (bool, *model.AppError) {
+ _, err := os.Stat(filepath.Join(b.directory, path))
+
+ if os.IsNotExist(err) {
+ return false, nil
+ } else if err == nil {
+ return true, nil
+ }
+
+ return false, model.NewAppError("ReadFile", "api.file.file_exists.exists_local.app_error", nil, err.Error(), http.StatusInternalServerError)
+}
+
func (b *LocalFileBackend) CopyFile(oldPath, newPath string) *model.AppError {
if err := CopyFile(filepath.Join(b.directory, oldPath), filepath.Join(b.directory, newPath)); err != nil {
return model.NewAppError("copyFile", "api.file.move_file.rename.app_error", nil, err.Error(), http.StatusInternalServerError)
diff --git a/utils/file_backend_s3.go b/utils/file_backend_s3.go
index a0c46e5d3..dedcb2797 100644
--- a/utils/file_backend_s3.go
+++ b/utils/file_backend_s3.go
@@ -111,6 +111,25 @@ func (b *S3FileBackend) ReadFile(path string) ([]byte, *model.AppError) {
}
}
+func (b *S3FileBackend) FileExists(path string) (bool, *model.AppError) {
+ s3Clnt, err := b.s3New()
+
+ if err != nil {
+ return false, model.NewAppError("FileExists", "api.file.file_exists.s3.app_error", nil, err.Error(), http.StatusInternalServerError)
+ }
+ _, err = s3Clnt.StatObject(b.bucket, path, s3.StatObjectOptions{})
+
+ if err == nil {
+ return true, nil
+ }
+
+ if err.(s3.ErrorResponse).Code == "NoSuchKey" {
+ return false, nil
+ }
+
+ return false, model.NewAppError("FileExists", "api.file.file_exists.s3.app_error", nil, err.Error(), http.StatusInternalServerError)
+}
+
func (b *S3FileBackend) CopyFile(oldPath, newPath string) *model.AppError {
s3Clnt, err := b.s3New()
if err != nil {
diff --git a/utils/file_backend_test.go b/utils/file_backend_test.go
index 7f8265d73..f7ce7ca61 100644
--- a/utils/file_backend_test.go
+++ b/utils/file_backend_test.go
@@ -124,6 +124,23 @@ func (s *FileBackendTestSuite) TestReadWriteFileImage() {
s.EqualValues(readString, "testimage")
}
+func (s *FileBackendTestSuite) TestFileExists() {
+ b := []byte("testimage")
+ path := "tests/" + model.NewId() + ".png"
+
+ _, err := s.backend.WriteFile(bytes.NewReader(b), path)
+ s.Nil(err)
+ defer s.backend.RemoveFile(path)
+
+ res, err := s.backend.FileExists(path)
+ s.Nil(err)
+ s.True(res)
+
+ res, err = s.backend.FileExists("tests/idontexist.png")
+ s.Nil(err)
+ s.False(res)
+}
+
func (s *FileBackendTestSuite) TestCopyFile() {
b := []byte("test")
path1 := "tests/" + model.NewId()