From 60ee6a9d49f7fc934019c26fe79ce5b12a319d6f Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Wed, 23 Nov 2022 12:59:47 +0300 Subject: [PATCH] WhiteLabel: fixed support img types --- .../ASC.People/Server/Api/PhotoController.cs | 2 +- web/ASC.Web.Core/LogoUploader.cs | 8 +++--- web/ASC.Web.Core/StorageHelper.cs | 2 +- web/ASC.Web.Core/Users/UserPhotoManager.cs | 10 ++++--- .../WhiteLabel/TenantWhiteLabelSettings.cs | 26 +++++++++++++++---- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/products/ASC.People/Server/Api/PhotoController.cs b/products/ASC.People/Server/Api/PhotoController.cs index f4e7084335..94fe6bac38 100644 --- a/products/ASC.People/Server/Api/PhotoController.cs +++ b/products/ASC.People/Server/Api/PhotoController.cs @@ -76,7 +76,7 @@ public class PhotoController : PeopleControllerBase if (!string.IsNullOrEmpty(inDto.TmpFile)) { var fileName = Path.GetFileName(inDto.TmpFile); - var data = _userPhotoManager.GetTempPhotoData(fileName); + var data = await _userPhotoManager.GetTempPhotoData(fileName); var settings = new UserPhotoThumbnailSettings(inDto.X, inDto.Y, inDto.Width, inDto.Height); diff --git a/web/ASC.Web.Core/LogoUploader.cs b/web/ASC.Web.Core/LogoUploader.cs index e2d0bfc9a9..8cdc255ded 100644 --- a/web/ASC.Web.Core/LogoUploader.cs +++ b/web/ASC.Web.Core/LogoUploader.cs @@ -33,7 +33,8 @@ public class LogoUploader } - public async Task Invoke(HttpContext context, + public async Task Invoke + (HttpContext context, PermissionContext permissionContext, SetupInfo setupInfo, UserPhotoManager userPhotoManager) @@ -56,14 +57,15 @@ public class LogoUploader { throw new Exception(Resource.ErrorFileNotImage); } - + var data = new byte[logo.Length]; var reader = new BinaryReader(logo.OpenReadStream()); reader.Read(data, 0, (int)logo.Length); reader.Close(); - if (logo.ContentType.Contains("svg")) { + if (logo.ContentType.Contains("svg")) + { result.Success = true; result.Message = userPhotoManager.SaveTempSvg(data, setupInfo.MaxImageUploadSize); } diff --git a/web/ASC.Web.Core/StorageHelper.cs b/web/ASC.Web.Core/StorageHelper.cs index 24682db350..d2cc89cc9f 100644 --- a/web/ASC.Web.Core/StorageHelper.cs +++ b/web/ASC.Web.Core/StorageHelper.cs @@ -64,7 +64,7 @@ public class StorageHelper var fileName = Path.GetFileName(tmpLogoPath); - data = _userPhotoManager.GetTempPhotoData(fileName); + data = await _userPhotoManager.GetTempPhotoData(fileName); await _userPhotoManager.RemoveTempPhoto(fileName); diff --git a/web/ASC.Web.Core/Users/UserPhotoManager.cs b/web/ASC.Web.Core/Users/UserPhotoManager.cs index cbfd0e41fe..5349ebe239 100644 --- a/web/ASC.Web.Core/Users/UserPhotoManager.cs +++ b/web/ASC.Web.Core/Users/UserPhotoManager.cs @@ -782,21 +782,23 @@ public class UserPhotoManager return store.SaveAsync(_tempDomainName, fileName, stream).Result.ToString(); } - public byte[] GetTempPhotoData(string fileName) + public async Task GetTempPhotoData(string fileName) { - using var s = GetDataStore().GetReadStreamAsync(_tempDomainName, fileName).Result; + using var s = await GetDataStore().GetReadStreamAsync(_tempDomainName, fileName); var data = new MemoryStream(); var buffer = new byte[1024 * 10]; + while (true) { - var count = s.Read(buffer, 0, buffer.Length); + var count = await s.ReadAsync(buffer, 0, buffer.Length); if (count == 0) { break; } - data.Write(buffer, 0, count); + await data.WriteAsync(buffer, 0, count); } + return data.ToArray(); } diff --git a/web/ASC.Web.Core/WhiteLabel/TenantWhiteLabelSettings.cs b/web/ASC.Web.Core/WhiteLabel/TenantWhiteLabelSettings.cs index fee4528221..80c40247c0 100644 --- a/web/ASC.Web.Core/WhiteLabel/TenantWhiteLabelSettings.cs +++ b/web/ASC.Web.Core/WhiteLabel/TenantWhiteLabelSettings.cs @@ -462,17 +462,33 @@ public class TenantWhiteLabelSettingsHelper private async Task<(byte[], string)> GetLogoData(string logo) { - var xStart = @"data:image/png;base64,"; + var supportedFormats = new[] + { + new { + mime = "image/jpeg", + ext = "jpg" + }, + new { + mime = "image/png", + ext = "png" + }, + new { + mime = "image/svg+xml", + ext = "svg" + } + }; + string ext = null; if (!string.IsNullOrEmpty(logo)) { byte[] data; - if (!logo.StartsWith(xStart)) + var format = supportedFormats.FirstOrDefault(r => logo.StartsWith($"data:{r.mime};base64,")); + if (format == null) { var fileName = Path.GetFileName(logo); ext = fileName.Split('.').Last(); - data = _userPhotoManager.GetTempPhotoData(fileName); + data = await _userPhotoManager.GetTempPhotoData(fileName); try { await _userPhotoManager.RemoveTempPhoto(fileName); @@ -484,8 +500,8 @@ public class TenantWhiteLabelSettingsHelper } else { - ext = "png"; - var xB64 = logo.Substring(xStart.Length); // Get the Base64 string + ext = format.ext; + var xB64 = logo.Substring($"data:{format.mime};base64,".Length); // Get the Base64 string data = Convert.FromBase64String(xB64); // Convert the Base64 string to binary data }