summaryrefslogtreecommitdiffstats
path: root/app/brand.go
diff options
context:
space:
mode:
authorSaturnino Abril <saturnino.abril@gmail.com>2018-06-02 06:33:59 +0800
committerGitHub <noreply@github.com>2018-06-02 06:33:59 +0800
commit312edbe5315e97dc25857fc2590266734056af70 (patch)
tree4dc477389e10aa2078651c99bd1e7597276c0e2a /app/brand.go
parentebdceb8e529810cd89599b8fbfda0157a659f3b5 (diff)
downloadchat-312edbe5315e97dc25857fc2590266734056af70.tar.gz
chat-312edbe5315e97dc25857fc2590266734056af70.tar.bz2
chat-312edbe5315e97dc25857fc2590266734056af70.zip
[MM-10718] Move custom branding to TE (#8871)
* move custom branding to TE * move brand's enterprise code to server and remove BrandInterface
Diffstat (limited to 'app/brand.go')
-rw-r--r--app/brand.go56
1 files changed, 45 insertions, 11 deletions
diff --git a/app/brand.go b/app/brand.go
index ea04a59be..4814264dd 100644
--- a/app/brand.go
+++ b/app/brand.go
@@ -4,23 +4,60 @@
package app
import (
+ "bytes"
+ "image"
+ _ "image/gif"
+ _ "image/jpeg"
+ "image/png"
"mime/multipart"
"net/http"
+ "time"
"github.com/mattermost/mattermost-server/model"
)
+const (
+ BRAND_FILE_PATH = "brand/"
+ BRAND_FILE_NAME = "image.png"
+)
+
func (a *App) SaveBrandImage(imageData *multipart.FileHeader) *model.AppError {
if len(*a.Config().FileSettings.DriverName) == 0 {
return model.NewAppError("SaveBrandImage", "api.admin.upload_brand_image.storage.app_error", nil, "", http.StatusNotImplemented)
}
- if a.Brand == nil {
- return model.NewAppError("SaveBrandImage", "api.admin.upload_brand_image.not_available.app_error", nil, "", http.StatusNotImplemented)
+ file, err := imageData.Open()
+ defer file.Close()
+ if err != nil {
+ return model.NewAppError("SaveBrandImage", "brand.save_brand_image.open.app_error", nil, err.Error(), http.StatusBadRequest)
+ }
+
+ // Decode image config first to check dimensions before loading the whole thing into memory later on
+ config, _, err := image.DecodeConfig(file)
+ if err != nil {
+ return model.NewAppError("SaveBrandImage", "brand.save_brand_image.decode_config.app_error", nil, err.Error(), http.StatusBadRequest)
+ } else if config.Width*config.Height > model.MaxImageSize {
+ return model.NewAppError("SaveBrandImage", "brand.save_brand_image.too_large.app_error", nil, err.Error(), http.StatusBadRequest)
+ }
+
+ file.Seek(0, 0)
+
+ img, _, err := image.Decode(file)
+ if err != nil {
+ return model.NewAppError("SaveBrandImage", "brand.save_brand_image.decode.app_error", nil, err.Error(), http.StatusBadRequest)
}
- if err := a.Brand.SaveBrandImage(imageData); err != nil {
- return err
+ buf := new(bytes.Buffer)
+ err = png.Encode(buf, img)
+ if err != nil {
+ return model.NewAppError("SaveBrandImage", "brand.save_brand_image.encode.app_error", nil, err.Error(), http.StatusInternalServerError)
+ }
+
+ t := time.Now()
+ a.MoveFile(BRAND_FILE_PATH+BRAND_FILE_NAME, BRAND_FILE_PATH+t.Format("2006-01-02T15:04:05")+".png")
+
+ if _, err := a.WriteFile(buf, BRAND_FILE_PATH+BRAND_FILE_NAME); err != nil {
+ return model.NewAppError("SaveBrandImage", "brand.save_brand_image.save_image.app_error", nil, "", http.StatusInternalServerError)
}
return nil
@@ -31,13 +68,10 @@ func (a *App) GetBrandImage() ([]byte, *model.AppError) {
return nil, model.NewAppError("GetBrandImage", "api.admin.get_brand_image.storage.app_error", nil, "", http.StatusNotImplemented)
}
- if a.Brand == nil {
- return nil, model.NewAppError("GetBrandImage", "api.admin.get_brand_image.not_available.app_error", nil, "", http.StatusNotImplemented)
- }
-
- if img, err := a.Brand.GetBrandImage(); err != nil {
+ img, err := a.ReadFile(BRAND_FILE_PATH + BRAND_FILE_NAME)
+ if err != nil {
return nil, err
- } else {
- return img, nil
}
+
+ return img, nil
}