diff options
author | JoramWilander <jwawilander@gmail.com> | 2016-03-08 12:27:27 -0500 |
---|---|---|
committer | JoramWilander <jwawilander@gmail.com> | 2016-03-08 12:27:27 -0500 |
commit | 5c29d4f64935d0516e9d72d1d8cc734bcf295a87 (patch) | |
tree | 72006c3fde510a8c6a6a7b02503ced2e6510ab51 /api | |
parent | 22470c2069eb21539540d19e80fd85394782c9a7 (diff) | |
download | chat-5c29d4f64935d0516e9d72d1d8cc734bcf295a87.tar.gz chat-5c29d4f64935d0516e9d72d1d8cc734bcf295a87.tar.bz2 chat-5c29d4f64935d0516e9d72d1d8cc734bcf295a87.zip |
Deleting posts with files now renames the file so that public links to those files no longer work
Diffstat (limited to 'api')
-rw-r--r-- | api/file.go | 35 | ||||
-rw-r--r-- | api/post.go | 18 |
2 files changed, 53 insertions, 0 deletions
diff --git a/api/file.go b/api/file.go index 0011afd5b..9150e4bfe 100644 --- a/api/file.go +++ b/api/file.go @@ -547,6 +547,41 @@ func writeFile(f []byte, path string) *model.AppError { return nil } +func moveFile(oldPath, newPath string) *model.AppError { + if utils.Cfg.FileSettings.DriverName == model.IMAGE_DRIVER_S3 { + fileData := make(chan []byte) + getFileAndForget(oldPath, fileData) + fileBytes := <-fileData + + if fileBytes == nil { + return model.NewLocAppError("moveFile", "api.file.move_file.get_from_s3.app_error", nil, "") + } + + var auth aws.Auth + auth.AccessKey = utils.Cfg.FileSettings.AmazonS3AccessKeyId + auth.SecretKey = utils.Cfg.FileSettings.AmazonS3SecretAccessKey + + s := s3.New(auth, awsRegion()) + bucket := s.Bucket(utils.Cfg.FileSettings.AmazonS3Bucket) + + if err := bucket.Del(oldPath); err != nil { + return model.NewLocAppError("moveFile", "api.file.move_file.delete_from_s3.app_error", nil, err.Error()) + } + + if err := writeFile(fileBytes, newPath); err != nil { + return err + } + } else if utils.Cfg.FileSettings.DriverName == model.IMAGE_DRIVER_LOCAL { + if err := os.Rename(utils.Cfg.FileSettings.Directory+oldPath, utils.Cfg.FileSettings.Directory+newPath); err != nil { + return model.NewLocAppError("moveFile", "api.file.move_file.rename.app_error", nil, err.Error()) + } + } else { + return model.NewLocAppError("moveFile", "api.file.move_file.configured.app_error", nil, "") + } + + return nil +} + func writeFileLocally(f []byte, path string) *model.AppError { if err := os.MkdirAll(filepath.Dir(path), 0774); err != nil { return model.NewLocAppError("writeFile", "api.file.write_file_locally.create_dir.app_error", nil, err.Error()) diff --git a/api/post.go b/api/post.go index e6560a8e8..cd78b16f0 100644 --- a/api/post.go +++ b/api/post.go @@ -1094,6 +1094,7 @@ func deletePost(c *Context, w http.ResponseWriter, r *http.Request) { message.Add("post", post.ToJson()) PublishAndForget(message) + DeletePostFilesAndForget(c.Session.TeamId, post) result := make(map[string]string) result["id"] = postId @@ -1101,6 +1102,23 @@ func deletePost(c *Context, w http.ResponseWriter, r *http.Request) { } } +func DeletePostFilesAndForget(teamId string, post *model.Post) { + go func() { + if len(post.Filenames) == 0 { + return + } + + prefix := "teams/" + teamId + "/channels/" + post.ChannelId + "/users/" + post.UserId + "/" + for _, filename := range post.Filenames { + splitUrl := strings.Split(filename, "/") + oldPath := prefix + splitUrl[len(splitUrl)-2] + "/" + splitUrl[len(splitUrl)-1] + newPath := prefix + splitUrl[len(splitUrl)-2] + "/deleted_" + splitUrl[len(splitUrl)-1] + moveFile(oldPath, newPath) + } + + }() +} + func getPostsBefore(c *Context, w http.ResponseWriter, r *http.Request) { getPostsBeforeOrAfter(c, w, r, true) } |