From 312edbe5315e97dc25857fc2590266734056af70 Mon Sep 17 00:00:00 2001 From: Saturnino Abril Date: Sat, 2 Jun 2018 06:33:59 +0800 Subject: [MM-10718] Move custom branding to TE (#8871) * move custom branding to TE * move brand's enterprise code to server and remove BrandInterface --- app/brand.go | 56 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 11 deletions(-) (limited to 'app/brand.go') 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 } -- cgit v1.2.3-1-g7c22