using System; using System.Linq; using System.Runtime.Serialization; using Umbraco.Core.Configuration; using Umbraco.Core.IO; namespace Umbraco.Core.Models { /// /// Represents a Script file /// [Serializable] [DataContract(IsReference = true)] public class Script : File { public Script(string path) : base(path) { base.Path = path; } /// /// Boolean indicating whether the file could be validated /// /// /// The validation logic was previsouly placed in the codebehind of editScript.aspx, /// but has been moved to the script file so the validation is central. /// /// True if file is valid, otherwise false public override bool IsValid() { //NOTE Since a script file can be both JS, Razor Views, Razor Macros and Xslt //it might be an idea to create validations for all 3 and divide the validation //into 4 private methods. //See codeEditorSave.asmx.cs for reference. var exts = LegacyUmbracoSettings.ScriptFileTypes.Split(',').ToList(); /*if (UmbracoSettings.DefaultRenderingEngine == RenderingEngine.Mvc) { exts.Add("cshtml"); exts.Add("vbhtml"); }*/ var dirs = SystemDirectories.Scripts; /*if (UmbracoSettings.DefaultRenderingEngine == RenderingEngine.Mvc) dirs += "," + SystemDirectories.MvcViews;*/ //Validate file var validFile = IOHelper.VerifyEditPath(Path, dirs.Split(',')); //Validate extension var validExtension = IOHelper.VerifyFileExtension(Path, exts); return validFile && validExtension; } /// /// Indicates whether the current entity has an identity, which in this case is a path/name. /// /// /// Overrides the default Entity identity check. /// public override bool HasIdentity { get { return string.IsNullOrEmpty(Path) == false; } } } }