summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2016-06-30 14:53:36 -0400
committerCorey Hulen <corey@hulen.com>2016-06-30 10:53:36 -0800
commit74f86da822da219db894ac7d99e1420791d3886a (patch)
tree866a35fd8f7b7a24bf71b3e4a57e2c66f45ca602
parentdab4bb43217fcb34e70192b97ec88a6a507e556c (diff)
downloadchat-74f86da822da219db894ac7d99e1420791d3886a.tar.gz
chat-74f86da822da219db894ac7d99e1420791d3886a.tar.bz2
chat-74f86da822da219db894ac7d99e1420791d3886a.zip
Revert "Moved file attachments to be stored in data/channels instead of data/teams/ID/channels (#3416)" (#3461)
This reverts commit ed75dfc6c090bd247ab9fe2965aed82c552bbc08.
-rw-r--r--api/file.go37
-rw-r--r--api/file_test.go44
2 files changed, 41 insertions, 40 deletions
diff --git a/api/file.go b/api/file.go
index 048a48882..92bceaa80 100644
--- a/api/file.go
+++ b/api/file.go
@@ -149,7 +149,7 @@ func uploadFile(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
- path := "channels/" + channelId + "/users/" + c.Session.UserId + "/" + uid + "/" + filename
+ path := "teams/" + c.TeamId + "/channels/" + channelId + "/users/" + c.Session.UserId + "/" + uid + "/" + filename
if err := WriteFile(buf.Bytes(), path); err != nil {
c.Err = err
@@ -172,7 +172,7 @@ func uploadFile(c *Context, w http.ResponseWriter, r *http.Request) {
}
func handleImages(filenames []string, fileData [][]byte, teamId, channelId, userId string) {
- dest := "channels/" + channelId + "/users/" + userId + "/"
+ dest := "teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/"
for i, filename := range filenames {
name := filename[:strings.LastIndex(filename, ".")]
@@ -318,21 +318,18 @@ func getFileInfo(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- cchan := Srv.Store.Channel().CheckPermissionsToNoTeam(channelId, c.Session.UserId)
+ cchan := Srv.Store.Channel().CheckPermissionsTo(c.TeamId, channelId, c.Session.UserId)
- path := "channels/" + channelId + "/users/" + userId + "/" + filename
+ path := "teams/" + c.TeamId + "/channels/" + channelId + "/users/" + userId + "/" + filename
var info *model.FileInfo
if cached, ok := fileInfoCache.Get(path); ok {
info = cached.(*model.FileInfo)
} else {
- err, bytes := getFileData(c.TeamId, channelId, userId, filename)
- if err != nil {
- c.Err = err
- return
- }
+ fileData := make(chan []byte)
+ go readFile(path, fileData)
- newInfo, err := model.GetInfoForBytes(filename, bytes)
+ newInfo, err := model.GetInfoForBytes(filename, <-fileData)
if err != nil {
c.Err = err
return
@@ -359,7 +356,7 @@ func getFile(c *Context, w http.ResponseWriter, r *http.Request) {
userId := params["user_id"]
filename := params["filename"]
- if !c.HasPermissionsToChannel(Srv.Store.Channel().CheckPermissionsToNoTeam(channelId, userId), "getFile") {
+ if !c.HasPermissionsToChannel(Srv.Store.Channel().CheckPermissionsTo(teamId, channelId, userId), "getFile") {
return
}
@@ -417,6 +414,10 @@ func getFileData(teamId string, channelId string, userId string, filename string
return err, nil
}
+ if len(teamId) != 26 {
+ return NewInvalidParamError("getFileData", "team_id"), nil
+ }
+
if len(channelId) != 26 {
return NewInvalidParamError("getFileData", "channel_id"), nil
}
@@ -429,19 +430,17 @@ func getFileData(teamId string, channelId string, userId string, filename string
return NewInvalidParamError("getFileData", "filename"), nil
}
- path := "channels/" + channelId + "/users/" + userId + "/" + filename
+ path := "teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + filename
- // try using the new path and then fall back to the old one if that doesn't work
- if bytes, readErr := ReadFile(path); readErr == nil {
- return nil, bytes
- } else if bytes, readErr := ReadFile("teams/" + teamId + "/" + path); readErr == nil {
- return nil, bytes
- } else {
- l4g.Error(readErr)
+ fileChan := make(chan []byte)
+ go readFile(path, fileChan)
+ if bytes := <-fileChan; bytes == nil {
err := model.NewLocAppError("writeFileResponse", "api.file.get_file.not_found.app_error", nil, "path="+path)
err.StatusCode = http.StatusNotFound
return err, nil
+ } else {
+ return nil, bytes
}
}
diff --git a/api/file_test.go b/api/file_test.go
index 5dbb5b9af..fe7355122 100644
--- a/api/file_test.go
+++ b/api/file_test.go
@@ -23,6 +23,7 @@ import (
func TestUploadFile(t *testing.T) {
th := Setup().InitBasic()
Client := th.BasicClient
+ team := th.BasicTeam
user := th.BasicUser
channel := th.BasicChannel
@@ -83,17 +84,17 @@ func TestUploadFile(t *testing.T) {
// wait a bit for files to ready
time.Sleep(5 * time.Second)
- err = bucket.Del("channels/" + channel.Id + "/users/" + user.Id + "/" + filename)
+ err = bucket.Del("teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + filename)
if err != nil {
t.Fatal(err)
}
- err = bucket.Del("channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg")
+ err = bucket.Del("teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg")
if err != nil {
t.Fatal(err)
}
- err = bucket.Del("channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg")
+ err = bucket.Del("teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg")
if err != nil {
t.Fatal(err)
}
@@ -108,17 +109,17 @@ func TestUploadFile(t *testing.T) {
// wait a bit for files to ready
time.Sleep(5 * time.Second)
- path := utils.Cfg.FileSettings.Directory + "channels/" + channel.Id + "/users/" + user.Id + "/" + filename
+ path := utils.Cfg.FileSettings.Directory + "teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + filename
if err := os.Remove(path); err != nil {
t.Fatal("Couldn't remove file at " + path)
}
- path = utils.Cfg.FileSettings.Directory + "channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg"
+ path = utils.Cfg.FileSettings.Directory + "teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg"
if err := os.Remove(path); err != nil {
t.Fatal("Couldn't remove file at " + path)
}
- path = utils.Cfg.FileSettings.Directory + "channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg"
+ path = utils.Cfg.FileSettings.Directory + "teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg"
if err := os.Remove(path); err != nil {
t.Fatal("Couldn't remove file at " + path)
}
@@ -132,6 +133,7 @@ func TestUploadFile(t *testing.T) {
func TestGetFile(t *testing.T) {
th := Setup().InitBasic()
Client := th.BasicClient
+ team := th.BasicTeam
user := th.BasicUser
channel := th.BasicChannel
@@ -205,17 +207,17 @@ func TestGetFile(t *testing.T) {
filename := filenames[len(filenames)-2] + "/" + filenames[len(filenames)-1]
fileId := strings.Split(filename, ".")[0]
- err = bucket.Del("channels/" + channel.Id + "/users/" + user.Id + "/" + filename)
+ err = bucket.Del("teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + filename)
if err != nil {
t.Fatal(err)
}
- err = bucket.Del("channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg")
+ err = bucket.Del("teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg")
if err != nil {
t.Fatal(err)
}
- err = bucket.Del("channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg")
+ err = bucket.Del("teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg")
if err != nil {
t.Fatal(err)
}
@@ -224,17 +226,17 @@ func TestGetFile(t *testing.T) {
filename := filenames[len(filenames)-2] + "/" + filenames[len(filenames)-1]
fileId := strings.Split(filename, ".")[0]
- path := utils.Cfg.FileSettings.Directory + "channels/" + channel.Id + "/users/" + user.Id + "/" + filename
+ path := utils.Cfg.FileSettings.Directory + "teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + filename
if err := os.Remove(path); err != nil {
t.Fatal("Couldn't remove file at " + path)
}
- path = utils.Cfg.FileSettings.Directory + "channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg"
+ path = utils.Cfg.FileSettings.Directory + "teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_thumb.jpg"
if err := os.Remove(path); err != nil {
t.Fatal("Couldn't remove file at " + path)
}
- path = utils.Cfg.FileSettings.Directory + "channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg"
+ path = utils.Cfg.FileSettings.Directory + "teams/" + team.Id + "/channels/" + channel.Id + "/users/" + user.Id + "/" + fileId + "_preview.jpg"
if err := os.Remove(path); err != nil {
t.Fatal("Couldn't remove file at " + path)
}
@@ -345,7 +347,7 @@ func TestGetPublicFile(t *testing.T) {
t.Fatal("should've failed to get image with public link while not logged in after salt changed")
}
- if err := cleanupTestFile(filenames[0], channel.Id, th.BasicUser.Id); err != nil {
+ if err := cleanupTestFile(filenames[0], th.BasicTeam.Id, channel.Id, th.BasicUser.Id); err != nil {
t.Fatal("failed to cleanup test file", err)
}
}
@@ -401,7 +403,7 @@ func TestGetPublicLink(t *testing.T) {
th.LoginBasic()
- if err := cleanupTestFile(filenames[0], channel.Id, th.BasicUser.Id); err != nil {
+ if err := cleanupTestFile(filenames[0], th.BasicTeam.Id, channel.Id, th.BasicUser.Id); err != nil {
t.Fatal("failed to cleanup test file", err)
}
}
@@ -441,7 +443,7 @@ func uploadTestFile(Client *model.Client, channelId string) ([]string, error) {
}
}
-func cleanupTestFile(fullFilename, channelId, userId string) error {
+func cleanupTestFile(fullFilename, teamId, channelId, userId string) error {
filenames := strings.Split(fullFilename, "/")
filename := filenames[len(filenames)-2] + "/" + filenames[len(filenames)-1]
fileId := strings.Split(filename, ".")[0]
@@ -455,29 +457,29 @@ func cleanupTestFile(fullFilename, channelId, userId string) error {
s := s3.New(auth, aws.Regions[utils.Cfg.FileSettings.AmazonS3Region])
bucket := s.Bucket(utils.Cfg.FileSettings.AmazonS3Bucket)
- if err := bucket.Del("channels/" + channelId + "/users/" + userId + "/" + filename); err != nil {
+ if err := bucket.Del("teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + filename); err != nil {
return err
}
- if err := bucket.Del("channels/" + channelId + "/users/" + userId + "/" + fileId + "_thumb.jpg"); err != nil {
+ if err := bucket.Del("teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + fileId + "_thumb.jpg"); err != nil {
return err
}
- if err := bucket.Del("channels/" + channelId + "/users/" + userId + "/" + fileId + "_preview.jpg"); err != nil {
+ if err := bucket.Del("teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + fileId + "_preview.jpg"); err != nil {
return err
}
} else {
- path := utils.Cfg.FileSettings.Directory + "channels/" + channelId + "/users/" + userId + "/" + filename
+ path := utils.Cfg.FileSettings.Directory + "teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + filename
if err := os.Remove(path); err != nil {
return fmt.Errorf("Couldn't remove file at " + path)
}
- path = utils.Cfg.FileSettings.Directory + "channels/" + channelId + "/users/" + userId + "/" + fileId + "_thumb.jpg"
+ path = utils.Cfg.FileSettings.Directory + "teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + fileId + "_thumb.jpg"
if err := os.Remove(path); err != nil {
return fmt.Errorf("Couldn't remove file at " + path)
}
- path = utils.Cfg.FileSettings.Directory + "channels/" + channelId + "/users/" + userId + "/" + fileId + "_preview.jpg"
+ path = utils.Cfg.FileSettings.Directory + "teams/" + teamId + "/channels/" + channelId + "/users/" + userId + "/" + fileId + "_preview.jpg"
if err := os.Remove(path); err != nil {
return fmt.Errorf("Couldn't remove file at " + path)
}