diff --git a/app/diagnostics.go b/app/diagnostics.go index a80b747ef4..14e207997f 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -245,12 +245,6 @@ func trackConfig() { "driver_name": utils.Cfg.FileSettings.DriverName, "amazon_s3_ssl": *utils.Cfg.FileSettings.AmazonS3SSL, "amazon_s3_signv2": *utils.Cfg.FileSettings.AmazonS3SignV2, - "thumbnail_width": utils.Cfg.FileSettings.ThumbnailWidth, - "thumbnail_height": utils.Cfg.FileSettings.ThumbnailHeight, - "preview_width": utils.Cfg.FileSettings.PreviewWidth, - "preview_height": utils.Cfg.FileSettings.PreviewHeight, - "profile_width": utils.Cfg.FileSettings.ProfileWidth, - "profile_height": utils.Cfg.FileSettings.ProfileHeight, "max_file_size": *utils.Cfg.FileSettings.MaxFileSize, }) diff --git a/app/file.go b/app/file.go index f46dd50ec0..9786ba961d 100644 --- a/app/file.go +++ b/app/file.go @@ -53,7 +53,10 @@ const ( RotatedCCWMirrored = 7 RotatedCW = 8 - MaxImageSize = 6048 * 4032 // 24 megapixels, roughly 36MB as a raw image + MaxImageSize = 6048 * 4032 // 24 megapixels, roughly 36MB as a raw image + IMAGE_THUMBNAIL_PIXEL_WIDTH = 120 + IMAGE_THUMBNAIL_PIXEL_HEIGTH = 100 + IMAGE_PREVIEW_PIXEL_WIDTH = 1024 ) // Similar to s3.New() but allows initialization of signature v2 or signature v4 client. @@ -553,18 +556,13 @@ func getImageOrientation(input io.Reader) (int, error) { } func generateThumbnailImage(img image.Image, thumbnailPath string, width int, height int) { - thumbWidth := float64(utils.Cfg.FileSettings.ThumbnailWidth) - thumbHeight := float64(utils.Cfg.FileSettings.ThumbnailHeight) - imgWidth := float64(width) - imgHeight := float64(height) - var thumbnail image.Image - if imgHeight < thumbHeight && imgWidth < thumbWidth { + if height < IMAGE_THUMBNAIL_PIXEL_HEIGTH && width < IMAGE_THUMBNAIL_PIXEL_WIDTH { thumbnail = img - } else if imgHeight/imgWidth < thumbHeight/thumbWidth { - thumbnail = imaging.Resize(img, 0, utils.Cfg.FileSettings.ThumbnailHeight, imaging.Lanczos) + } else if height/width < IMAGE_THUMBNAIL_PIXEL_HEIGTH/IMAGE_THUMBNAIL_PIXEL_WIDTH { + thumbnail = imaging.Resize(img, 0, IMAGE_THUMBNAIL_PIXEL_HEIGTH, imaging.Lanczos) } else { - thumbnail = imaging.Resize(img, utils.Cfg.FileSettings.ThumbnailWidth, 0, imaging.Lanczos) + thumbnail = imaging.Resize(img, IMAGE_THUMBNAIL_PIXEL_WIDTH, 0, imaging.Lanczos) } buf := new(bytes.Buffer) @@ -581,8 +579,9 @@ func generateThumbnailImage(img image.Image, thumbnailPath string, width int, he func generatePreviewImage(img image.Image, previewPath string, width int) { var preview image.Image - if width > int(utils.Cfg.FileSettings.PreviewWidth) { - preview = imaging.Resize(img, utils.Cfg.FileSettings.PreviewWidth, utils.Cfg.FileSettings.PreviewHeight, imaging.Lanczos) + + if width > IMAGE_PREVIEW_PIXEL_WIDTH { + preview = imaging.Resize(img, IMAGE_PREVIEW_PIXEL_WIDTH, 0, imaging.Lanczos) } else { preview = img } diff --git a/app/user.go b/app/user.go index de5881d001..eaeed53a5a 100644 --- a/app/user.go +++ b/app/user.go @@ -31,10 +31,11 @@ import ( ) const ( - TOKEN_TYPE_PASSWORD_RECOVERY = "password_recovery" - TOKEN_TYPE_VERIFY_EMAIL = "verify_email" - PASSWORD_RECOVER_EXPIRY_TIME = 1000 * 60 * 60 // 1 hour - VERIFY_EMAIL_EXPIRY_TIME = 1000 * 60 * 60 // 1 hour + TOKEN_TYPE_PASSWORD_RECOVERY = "password_recovery" + TOKEN_TYPE_VERIFY_EMAIL = "verify_email" + PASSWORD_RECOVER_EXPIRY_TIME = 1000 * 60 * 60 // 1 hour + VERIFY_EMAIL_EXPIRY_TIME = 1000 * 60 * 60 // 1 hour + IMAGE_PROFILE_PIXEL_DIMENSION = 128 ) func CreateUserWithHash(user *model.User, hash string, data string) (*model.User, *model.AppError) { @@ -717,13 +718,11 @@ func CreateProfileImage(username string, userId string) ([]byte, *model.AppError return nil, model.NewLocAppError("CreateProfileImage", "api.user.create_profile_image.default_font.app_error", nil, err.Error()) } - width := int(utils.Cfg.FileSettings.ProfileWidth) - height := int(utils.Cfg.FileSettings.ProfileHeight) color := colors[int64(seed)%int64(len(colors))] - dstImg := image.NewRGBA(image.Rect(0, 0, width, height)) + dstImg := image.NewRGBA(image.Rect(0, 0, IMAGE_PROFILE_PIXEL_DIMENSION, IMAGE_PROFILE_PIXEL_DIMENSION)) srcImg := image.White draw.Draw(dstImg, dstImg.Bounds(), &image.Uniform{color}, image.ZP, draw.Src) - size := float64((width + height) / 4) + size := float64(IMAGE_PROFILE_PIXEL_DIMENSION / 2) c := freetype.NewContext() c.SetFont(font) @@ -732,7 +731,7 @@ func CreateProfileImage(username string, userId string) ([]byte, *model.AppError c.SetDst(dstImg) c.SetSrc(srcImg) - pt := freetype.Pt(width/6, height*2/3) + pt := freetype.Pt(IMAGE_PROFILE_PIXEL_DIMENSION/6, IMAGE_PROFILE_PIXEL_DIMENSION*2/3) _, err = c.DrawString(initial, pt) if err != nil { return nil, model.NewLocAppError("CreateProfileImage", "api.user.create_profile_image.initial.app_error", nil, err.Error()) @@ -809,7 +808,8 @@ func SetProfileImage(userId string, imageData *multipart.FileHeader) *model.AppE img = makeImageUpright(img, orientation) // Scale profile image - img = imaging.Fill(img, utils.Cfg.FileSettings.ProfileWidth, utils.Cfg.FileSettings.ProfileHeight, imaging.Center, imaging.Lanczos) + profileWidthAndHeight := 128 + img = imaging.Fill(img, profileWidthAndHeight, profileWidthAndHeight, imaging.Center, imaging.Lanczos) buf := new(bytes.Buffer) err = png.Encode(buf, img) diff --git a/config/config.json b/config/config.json index 85e07bdce3..928468ed08 100644 --- a/config/config.json +++ b/config/config.json @@ -113,12 +113,6 @@ "Directory": "./data/", "EnablePublicLink": false, "PublicLinkSalt": "", - "ThumbnailWidth": 120, - "ThumbnailHeight": 100, - "PreviewWidth": 1024, - "PreviewHeight": 0, - "ProfileWidth": 128, - "ProfileHeight": 128, "InitialFont": "luximbi.ttf", "AmazonS3AccessKeyId": "", "AmazonS3SecretAccessKey": "", diff --git a/model/config.go b/model/config.go index f2b17bcedd..90b3bd6c8b 100644 --- a/model/config.go +++ b/model/config.go @@ -231,12 +231,6 @@ type FileSettings struct { Directory string EnablePublicLink bool PublicLinkSalt *string - ThumbnailWidth int - ThumbnailHeight int - PreviewWidth int - PreviewHeight int - ProfileWidth int - ProfileHeight int InitialFont string AmazonS3AccessKeyId string AmazonS3SecretAccessKey string @@ -1426,30 +1420,6 @@ func (o *Config) IsValid() *AppError { return NewLocAppError("Config.IsValid", "model.config.is_valid.file_driver.app_error", nil, "") } - if o.FileSettings.PreviewHeight < 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_preview_height.app_error", nil, "") - } - - if o.FileSettings.PreviewWidth <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_preview_width.app_error", nil, "") - } - - if o.FileSettings.ProfileHeight <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_profile_height.app_error", nil, "") - } - - if o.FileSettings.ProfileWidth <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_profile_width.app_error", nil, "") - } - - if o.FileSettings.ThumbnailHeight <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_thumb_height.app_error", nil, "") - } - - if o.FileSettings.ThumbnailWidth <= 0 { - return NewLocAppError("Config.IsValid", "model.config.is_valid.file_thumb_width.app_error", nil, "") - } - if len(*o.FileSettings.PublicLinkSalt) < 32 { return NewLocAppError("Config.IsValid", "model.config.is_valid.file_salt.app_error", nil, "") } diff --git a/utils/config.go b/utils/config.go index b3506ec336..8b096b6ea0 100644 --- a/utils/config.go +++ b/utils/config.go @@ -452,8 +452,6 @@ func getClientConfig(c *model.Config) map[string]string { props["EnableFileAttachments"] = strconv.FormatBool(*c.FileSettings.EnableFileAttachments) props["EnablePublicLink"] = strconv.FormatBool(c.FileSettings.EnablePublicLink) - props["ProfileHeight"] = fmt.Sprintf("%v", c.FileSettings.ProfileHeight) - props["ProfileWidth"] = fmt.Sprintf("%v", c.FileSettings.ProfileWidth) props["WebsocketPort"] = fmt.Sprintf("%v", *c.ServiceSettings.WebsocketPort) props["WebsocketSecurePort"] = fmt.Sprintf("%v", *c.ServiceSettings.WebsocketSecurePort) diff --git a/webapp/components/admin_console/admin_sidebar.jsx b/webapp/components/admin_console/admin_sidebar.jsx index 05924d02f6..d64d5edeef 100644 --- a/webapp/components/admin_console/admin_sidebar.jsx +++ b/webapp/components/admin_console/admin_sidebar.jsx @@ -529,6 +529,7 @@ export default class AdminSidebar extends React.Component { } > } /> - - } - /> 0) { + if (this.props.children) { clonedChildren = (