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/app.go | 10 ---------- app/brand.go | 56 +++++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 21 deletions(-) (limited to 'app') diff --git a/app/app.go b/app/app.go index bda56ca1a..d97c6c385 100644 --- a/app/app.go +++ b/app/app.go @@ -53,7 +53,6 @@ type App struct { Jobs *jobs.JobServer AccountMigration einterfaces.AccountMigrationInterface - Brand einterfaces.BrandInterface Cluster einterfaces.ClusterInterface Compliance einterfaces.ComplianceInterface DataRetention einterfaces.DataRetentionInterface @@ -258,12 +257,6 @@ func RegisterAccountMigrationInterface(f func(*App) einterfaces.AccountMigration accountMigrationInterface = f } -var brandInterface func(*App) einterfaces.BrandInterface - -func RegisterBrandInterface(f func(*App) einterfaces.BrandInterface) { - brandInterface = f -} - var clusterInterface func(*App) einterfaces.ClusterInterface func RegisterClusterInterface(f func(*App) einterfaces.ClusterInterface) { @@ -358,9 +351,6 @@ func (a *App) initEnterprise() { if accountMigrationInterface != nil { a.AccountMigration = accountMigrationInterface(a) } - if brandInterface != nil { - a.Brand = brandInterface(a) - } if clusterInterface != nil { a.Cluster = clusterInterface(a) } 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