diff --git a/src/Umbraco.Web/HttpRequestExtensions.cs b/src/Umbraco.Web/HttpRequestExtensions.cs index b2746c563b..4dcdcb9c08 100644 --- a/src/Umbraco.Web/HttpRequestExtensions.cs +++ b/src/Umbraco.Web/HttpRequestExtensions.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; @@ -35,5 +34,36 @@ namespace Umbraco.Web return !val.IsNullOrWhiteSpace() ? val : string.Empty; } + /// + /// Safely get the item from the query string and convert it to type 'T', otherwise will return default(T). + /// + /// + /// + /// + /// + public static T GetItemAs(this HttpRequestBase request, string key) + { + var val = HttpContext.Current.Request[key]; + var whitespaceCheck = !val.IsNullOrWhiteSpace() ? val : string.Empty; + if (whitespaceCheck.IsNullOrWhiteSpace()) + return (T) typeof (T).GetDefaultValue(); + var attempt = val.TryConvertTo(); + if (attempt.Success) + return attempt.Result; + return (T)typeof(T).GetDefaultValue(); + } + + /// + /// Safely get the item from the query string and convert it to type 'T', otherwise will return default(T). + /// + /// + /// + /// + /// + public static T GetItemAs(this HttpRequest request, string key) + { + return new HttpRequestWrapper(request).GetItemAs(key); + } + } } diff --git a/src/Umbraco.Web/UmbracoContext.cs b/src/Umbraco.Web/UmbracoContext.cs index ed6855b3e2..eecfcc7ff4 100644 --- a/src/Umbraco.Web/UmbracoContext.cs +++ b/src/Umbraco.Web/UmbracoContext.cs @@ -49,6 +49,7 @@ namespace Umbraco.Web if (applicationContext == null) throw new ArgumentNullException("applicationContext"); ObjectCreated = DateTime.Now; + UmbracoRequestId = Guid.NewGuid(); HttpContext = httpContext; Application = applicationContext; @@ -109,6 +110,11 @@ namespace Umbraco.Web /// internal DateTime ObjectCreated { get; private set; } + /// + /// This is used internally for debugging and also used to define anything required to distinguish this request from another. + /// + internal Guid UmbracoRequestId { get; private set; } + /// /// Gets the current ApplicationContext /// diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs index f9e9127325..ac154c71f6 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs @@ -16,8 +16,8 @@ using System.Text.RegularExpressions; using System.Diagnostics; using System.Net; using System.Web.UI; +using Umbraco.Core.IO; using umbraco.businesslogic.Exceptions; -using umbraco.IO; using umbraco.cms.businesslogic.web; using umbraco.cms.businesslogic.media; using umbraco.BasePages; @@ -205,15 +205,15 @@ namespace umbraco.presentation.webservices switch (fileType) { case "xslt": - return saveXslt(fileName, fileContents, ignoreDebug); + return SaveXslt(fileName, fileContents, ignoreDebug); case "python": return "true"; case "css": - return saveCss(fileName, fileContents, fileID); + return SaveCss(fileName, fileContents, fileID); case "script": - return saveScript(fileName, fileContents); + return SaveScript(fileName, fileContents); case "template": - return saveTemplate(fileName, fileAlias, fileContents, fileID, masterID); + return SaveTemplate(fileName, fileAlias, fileContents, fileID, masterID); default: throw new ArgumentException(String.Format("Invalid fileType passed: '{0}'", fileType)); } @@ -228,38 +228,34 @@ namespace umbraco.presentation.webservices } - private string saveCss(string fileName, string fileContents, int fileID) + private static string SaveCss(string fileName, string fileContents, int fileID) { - string returnValue = "false"; - cms.businesslogic.web.StyleSheet stylesheet = new cms.businesslogic.web.StyleSheet(fileID); + string returnValue; + var stylesheet = new StyleSheet(fileID) {Content = fileContents, Text = fileName}; - if (stylesheet != null) - { - stylesheet.Content = fileContents; - stylesheet.Text = fileName; - try - { - stylesheet.saveCssToFile(); - returnValue = "true"; - } - catch (Exception ee) - { - throw new Exception("Couldn't save file", ee); - } + try + { + stylesheet.saveCssToFile(); + returnValue = "true"; + } + catch (Exception ee) + { + throw new Exception("Couldn't save file", ee); + } - //this.speechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "editStylesheetSaved", base.getUser()), ""); - } - return returnValue; + //this.speechBubble(speechBubbleIcon.save, ui.Text("speechBubbles", "editStylesheetSaved", base.getUser()), ""); + return returnValue; } - private string saveXslt(string fileName, string fileContents, bool ignoreDebugging) - { - StreamWriter SW; - string tempFileName = IOHelper.MapPath(SystemDirectories.Xslt + "/" + System.DateTime.Now.Ticks + "_temp.xslt"); - SW = File.CreateText(tempFileName); - SW.Write(fileContents); - SW.Close(); - + private string SaveXslt(string fileName, string fileContents, bool ignoreDebugging) + { + var tempFileName = IOHelper.MapPath(SystemDirectories.Xslt + "/" + System.DateTime.Now.Ticks + "_temp.xslt"); + using (var sw = File.CreateText(tempFileName)) + { + sw.Write(fileContents); + sw.Close(); + } + // Test the xslt string errorMessage = ""; if (!ignoreDebugging) @@ -363,13 +359,15 @@ namespace umbraco.presentation.webservices if (errorMessage == "" && fileName.ToLower().EndsWith(".xslt")) { //Hardcoded security-check... only allow saving files in xslt directory... - string savePath = IOHelper.MapPath(SystemDirectories.Xslt + "/" + fileName); + var savePath = IOHelper.MapPath(SystemDirectories.Xslt + "/" + fileName); if (savePath.StartsWith(IOHelper.MapPath(SystemDirectories.Xslt))) { - SW = File.CreateText(savePath); - SW.Write(fileContents); - SW.Close(); + using (var sw = File.CreateText(savePath)) + { + sw.Write(fileContents); + sw.Close(); + } errorMessage = "true"; } else @@ -378,26 +376,19 @@ namespace umbraco.presentation.webservices } } - System.IO.File.Delete(tempFileName); + File.Delete(tempFileName); return errorMessage; } - - private string savePython(string filename, string contents) + + private static string SaveScript(string filename, string contents) { - - - return "true"; - } - - private string saveScript(string filename, string contents) - { - string val = contents; - string returnValue = "false"; + var val = contents; + string returnValue; try { - string savePath = IOHelper.MapPath(SystemDirectories.Scripts + "/" + filename); + var savePath = IOHelper.MapPath(SystemDirectories.Scripts + "/" + filename); //Directory check.. only allow files in script dir and below to be edited if (savePath.StartsWith(IOHelper.MapPath(SystemDirectories.Scripts + "/"))) @@ -422,34 +413,28 @@ namespace umbraco.presentation.webservices return returnValue; } - private string saveTemplate(string templateName, string templateAlias, string templateContents, int templateID, int masterTemplateID) + private static string SaveTemplate(string templateName, string templateAlias, string templateContents, int templateID, int masterTemplateID) { + var tp = new cms.businesslogic.template.Template(templateID); + var retVal = "false"; - cms.businesslogic.template.Template _template = new global::umbraco.cms.businesslogic.template.Template(templateID); - string retVal = "false"; + tp.Text = templateName; + tp.Alias = templateAlias; + tp.MasterTemplate = masterTemplateID; + tp.Design = templateContents; - if (_template != null) - { - _template.Text = templateName; - _template.Alias = templateAlias; - _template.MasterTemplate = masterTemplateID; - _template.Design = templateContents; + retVal = "true"; - retVal = "true"; - - // Clear cache in rutime - if (UmbracoSettings.UseDistributedCalls) - cache.dispatcher.Refresh( - new Guid("dd12b6a0-14b9-46e8-8800-c154f74047c8"), - _template.Id); - else - template.ClearCachedTemplate(_template.Id); - } - else - return "false"; + // Clear cache in rutime + if (UmbracoSettings.UseDistributedCalls) + cache.dispatcher.Refresh( + new Guid("dd12b6a0-14b9-46e8-8800-c154f74047c8"), + tp.Id); + else + template.ClearCachedTemplate(tp.Id); - return retVal; + return retVal; }