func getFileInfo(c *Context, w http.ResponseWriter, r *http.Request) { if len(utils.Cfg.FileSettings.DriverName) == 0 { c.Err = model.NewLocAppError("uploadFile", "api.file.upload_file.storage.app_error", nil, "") c.Err.StatusCode = http.StatusNotImplemented return } params := mux.Vars(r) channelId := params["channel_id"] if len(channelId) != 26 { c.SetInvalidParam("getFileInfo", "channel_id") return } userId := params["user_id"] if len(userId) != 26 { c.SetInvalidParam("getFileInfo", "user_id") return } filename := params["filename"] if len(filename) == 0 { c.SetInvalidParam("getFileInfo", "filename") return } cchan := Srv.Store.Channel().CheckPermissionsToNoTeam(channelId, c.Session.UserId) path := "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 } newInfo, err := model.GetInfoForBytes(filename, bytes) if err != nil { c.Err = err return } else { fileInfoCache.Add(path, newInfo) info = newInfo } } if !c.HasPermissionsToChannel(cchan, "getFileInfo") { return } w.Header().Set("Cache-Control", "max-age=2592000, public") w.Write([]byte(info.ToJson())) }
func getFileInfo(c *Context, w http.ResponseWriter, r *http.Request) { if len(utils.Cfg.FileSettings.DriverName) == 0 { c.Err = model.NewLocAppError("uploadFile", "api.file.upload_file.storage.app_error", nil, "") c.Err.StatusCode = http.StatusNotImplemented return } params := mux.Vars(r) channelId := params["channel_id"] if len(channelId) != 26 { c.SetInvalidParam("getFileInfo", "channel_id") return } userId := params["user_id"] if len(userId) != 26 { c.SetInvalidParam("getFileInfo", "user_id") return } filename := params["filename"] if len(filename) == 0 { c.SetInvalidParam("getFileInfo", "filename") return } if !HasPermissionToChannelContext(c, channelId, model.PERMISSION_READ_CHANNEL) { return } 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 { fileData := make(chan []byte) go readFile(path, fileData) newInfo, err := model.GetInfoForBytes(filename, <-fileData) if err != nil { c.Err = err return } else { fileInfoCache.Add(path, newInfo) info = newInfo } } w.Header().Set("Cache-Control", "max-age=2592000, public") w.Write([]byte(info.ToJson())) }