From 9f4697c5b3fe0131e7de3dae1d2f06b5c7311e13 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Wed, 11 Sep 2019 10:54:47 +0100 Subject: [PATCH 1/6] Update src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs Co-Authored-By: Bjarke Berg --- src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs index f9267315e4..0e57b2bd35 100644 --- a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs @@ -116,7 +116,7 @@ namespace Umbraco.Web.PropertyEditors var userId = Current.UmbracoContext.Security.CurrentUser.Id; // TODO: In future task(get the parent folder from this config) to save the media into - parsed = TemplateUtilities.FindAndPersistPastedTempImages(parsed, -1, userId, _mediaService, _contentTypeBaseServiceProvider); + parsed = TemplateUtilities.FindAndPersistPastedTempImages(parsed, Constants.System.Root, userId, _mediaService, _contentTypeBaseServiceProvider); return parsed; } } From a47811f210672c051a6060aca5ef3394a79325d5 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Wed, 11 Sep 2019 10:55:12 +0100 Subject: [PATCH 2/6] Update src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs Co-Authored-By: Bjarke Berg --- src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs index 98c65175af..710c68eeb3 100644 --- a/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/GridPropertyEditor.cs @@ -85,7 +85,7 @@ namespace Umbraco.Web.PropertyEditors var userId = Current.UmbracoContext.Security.CurrentUser.Id; // TODO: In future task(get the parent folder from this config) to save the media into - var parsedHtml = TemplateUtilities.FindAndPersistPastedTempImages(html, -1, userId, _mediaService, _contentTypeBaseServiceProvider); + var parsedHtml = TemplateUtilities.FindAndPersistPastedTempImages(html, Constants.System.Root, userId, _mediaService, _contentTypeBaseServiceProvider); rte.Value = parsedHtml; } From 104d414887001cc2537ad7102569ebaa67082f6c Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Wed, 11 Sep 2019 11:00:23 +0100 Subject: [PATCH 3/6] Fix some trailing typo stuff --- src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs index 0e57b2bd35..8cab94a4be 100644 --- a/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/RichTextPropertyEditor.cs @@ -85,9 +85,9 @@ namespace Umbraco.Web.PropertyEditors /// Format the data for the editor /// /// - /// Rte + /// /// - /// te + /// public override object ToEditor(Property property, IDataTypeService dataTypeService, string culture = null, string segment = null) { var val = property.GetValue(culture, segment); From 9bbc66d10d8d3384bae032f0d85c1b389cb4e301 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Wed, 11 Sep 2019 11:06:38 +0100 Subject: [PATCH 4/6] Some rename of variables for readability --- .../Templates/TemplateUtilities.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Web/Templates/TemplateUtilities.cs b/src/Umbraco.Web/Templates/TemplateUtilities.cs index 5969951072..58aa76bc02 100644 --- a/src/Umbraco.Web/Templates/TemplateUtilities.cs +++ b/src/Umbraco.Web/Templates/TemplateUtilities.cs @@ -206,29 +206,29 @@ namespace Umbraco.Web.Templates if (string.IsNullOrEmpty(tmpImgPath)) continue; - var absTmpImgPath = IOHelper.MapPath(tmpImgPath); - var fileName = Path.GetFileName(absTmpImgPath); + var absoluteTempImagePath = IOHelper.MapPath(tmpImgPath); + var fileName = Path.GetFileName(absoluteTempImagePath); var safeFileName = fileName.ToSafeFileName(); var mediaItemName = safeFileName.ToFriendlyName(); - var f = mediaService.CreateMedia(mediaItemName, mediaParentFolder, Constants.Conventions.MediaTypes.Image, userId); - var fileInfo = new FileInfo(absTmpImgPath); + var mediaFile = mediaService.CreateMedia(mediaItemName, mediaParentFolder, Constants.Conventions.MediaTypes.Image, userId); + var fileInfo = new FileInfo(absoluteTempImagePath); - var fs = fileInfo.OpenReadWithRetry(); - if (fs == null) throw new InvalidOperationException("Could not acquire file stream"); - using (fs) + var fileStream = fileInfo.OpenReadWithRetry(); + if (fileStream == null) throw new InvalidOperationException("Could not acquire file stream"); + using (fileStream) { - f.SetValue(contentTypeBaseServiceProvider, Constants.Conventions.Media.File, safeFileName, fs); + mediaFile.SetValue(contentTypeBaseServiceProvider, Constants.Conventions.Media.File, safeFileName, fileStream); } - mediaService.Save(f, userId); + mediaService.Save(mediaFile, userId); // Add the UDI to the img element as new data attribute - var udi = f.GetUdi(); + var udi = mediaFile.GetUdi(); img.SetAttributeValue("data-udi", udi.ToString()); //Get the new persisted image url - var mediaTyped = Current.UmbracoHelper.Media(f.Id); + var mediaTyped = Current.UmbracoHelper.Media(mediaFile.Id); var location = mediaTyped.Url; img.SetAttributeValue("src", location); From f07be7df1cb399dcd2a39b8238b4fd207999970c Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Wed, 11 Sep 2019 11:13:46 +0100 Subject: [PATCH 5/6] Usa a CONST for the data attribute --- src/Umbraco.Web/Templates/TemplateUtilities.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web/Templates/TemplateUtilities.cs b/src/Umbraco.Web/Templates/TemplateUtilities.cs index 58aa76bc02..96ea2659b1 100644 --- a/src/Umbraco.Web/Templates/TemplateUtilities.cs +++ b/src/Umbraco.Web/Templates/TemplateUtilities.cs @@ -20,6 +20,8 @@ namespace Umbraco.Web.Templates /// public static class TemplateUtilities { + const string TemporaryImageDataAttribute = "data-tmpimg"; + internal static string ParseInternalLinks(string text, bool preview, UmbracoContext umbracoContext) { using (umbracoContext.ForcedPreview(preview)) // force for url provider @@ -194,14 +196,14 @@ namespace Umbraco.Web.Templates var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); - var tmpImages = htmlDoc.DocumentNode.SelectNodes("//img[@data-tmpimg]"); + var tmpImages = htmlDoc.DocumentNode.SelectNodes($"//img[@{TemporaryImageDataAttribute}]"); if (tmpImages == null || tmpImages.Count == 0) return html; foreach (var img in tmpImages) { // The data attribute contains the path to the tmp img to persist as a media item - var tmpImgPath = img.GetAttributeValue("data-tmpimg", string.Empty); + var tmpImgPath = img.GetAttributeValue(TemporaryImageDataAttribute, string.Empty); if (string.IsNullOrEmpty(tmpImgPath)) continue; @@ -233,7 +235,7 @@ namespace Umbraco.Web.Templates img.SetAttributeValue("src", location); // Remove the data attribute (so we do not re-process this) - img.Attributes.Remove("data-tmpimg"); + img.Attributes.Remove(TemporaryImageDataAttribute); } return htmlDoc.DocumentNode.OuterHtml; From 39050d06f94adc79e3f4c1734561e55f5fa5557f Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Wed, 11 Sep 2019 11:16:47 +0100 Subject: [PATCH 6/6] Use a guid instead of user id & unix time offset for unique folder path --- src/Umbraco.Web/Editors/TinyMceController.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web/Editors/TinyMceController.cs b/src/Umbraco.Web/Editors/TinyMceController.cs index f3e97d9f9f..7ed71f0268 100644 --- a/src/Umbraco.Web/Editors/TinyMceController.cs +++ b/src/Umbraco.Web/Editors/TinyMceController.cs @@ -36,10 +36,8 @@ namespace Umbraco.Web.Editors throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } - // Backoffice user ID (needed for unique folder path) to help with concurrent users - // to avoid filename clash along with UTC current time - var userId = Security.CurrentUser.Id; - var imageTempPath = IOHelper.MapPath(SystemDirectories.TempImageUploads + "/" + userId + "_" + DateTimeOffset.UtcNow.ToUnixTimeSeconds()); + // Create an unique folder path to help with concurrent users to avoid filename clash + var imageTempPath = IOHelper.MapPath(SystemDirectories.TempImageUploads + "/" + Guid.NewGuid().ToString()); // Temp folderpath (Files come in as bodypart & will need to move/saved into imgTempPath var folderPath = IOHelper.MapPath(SystemDirectories.TempFileUploads);