public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { switch (manifest.ManifestType) { case ManifestTypes.Package: break; case ManifestTypes.Module: var scriptNode = new ScriptNode(); scriptNode.ProcessScripts(r, package, manifest); break; } } catch (Exception exc) { Trace.WriteLine("There was an issue with the process scripts scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing RulesProcessScripts", MessageType = MessageTypes.SystemError, MessageId = new Guid("3a8f7655-2806-48c5-adc2-46402614c991"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "ResourceFile") { continue; } var primaryNode = componentNode.SelectSingleNode("resourceFiles"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null) { r.Add(new VerificationMessage { Message = "ALL resource file nodes should have a basePath specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("121977cf-33cc-4abc-866d-8829b8714a29"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "resourceFile"); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the resource file scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.ResourceFileNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("9378b453-6b60-45d8-a39f-fde5f9fce88a"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Widget") { continue; } var primaryNode = componentNode.SelectSingleNode("widgetFiles"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null) { r.Add(new VerificationMessage { Message = "Each " + primaryNode.Name + " node should have a basePath specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("fbbdd33c-0a1d-4ca5-ba00-9ac4857acc3a"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "widgetFile"); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the widget node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.WidgetNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("09a0c89a-383f-4343-a38e-bda71fe51edd"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); var extractedFiles = FileList(package.ExtractedPath); //first we must clone var filesDiff = new List <string>(); var extractedDiff = new List <string>(); foreach (var file in manifest.Files) { if (!extractedFiles.Contains(file)) { var newFile = (string)file.Clone(); filesDiff.Add(newFile); } } foreach (var file in extractedFiles) { if (!manifest.Files.Contains(file)) { var newFile = (string)file.Clone(); extractedDiff.Add(newFile); } } //These files are in the manifest, but not in the extracted folder. foreach (var file in filesDiff) { var shortFile = file.Replace(package.ExtractedPath.ToLower(), ""); r.Add(new VerificationMessage { Message = "A file (" + shortFile + ") specified in the manifest is missing from the extension.", MessageType = MessageTypes.Error, MessageId = new Guid("9ed37b47-82da-4aed-b24f-93c6bf32e141"), Rule = GetType().ToString() }); } //These files are in the extracted folder, but are not in the manifest. foreach (var file in extractedDiff) { var shortFile = file.Replace(package.ExtractedPath.ToLower(), ""); //we need to filter out extra manifest files as we don't need to warn about these. if (!(shortFile.EndsWith(".dnn") || shortFile.EndsWith(".dnn5") || shortFile.EndsWith(".dnn6"))) { r.Add(new VerificationMessage { Message = "A file (" + shortFile + ") was found in the extension that was not included in manifest.", MessageType = MessageTypes.Warning, MessageId = new Guid("d339cd9b-4c82-473c-9627-5e5c1507d852"), Rule = GetType().ToString() }); } } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Config") { continue; } var configNode = componentNode.SelectSingleNode("config"); if (configNode == null) { continue; } var configFileNode = configNode.SelectSingleNode("configFile"); if (configFileNode == null) { r.Add(new Models.VerificationMessage { Message = "All config nodes must have a configFile specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("a8178b28-92da-4933-b9c5-b7396ee97561"), Rule = GetType().ToString() }); } else { var configFile = configFileNode.InnerText; r.Add(new Models.VerificationMessage { Message = "Installing this extension will result in changes to the " + configFile + " file.", MessageType = Models.MessageTypes.Info, MessageId = new Guid("c47e6316-4793-4330-911c-6ad434ac1a73"), Rule = GetType().ToString() }); } var installNode = configNode.SelectSingleNode("install"); if (installNode == null) { r.Add(new Models.VerificationMessage { Message = "All 'config' nodes must have a 'install' node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("54c2e281-07f6-4fd7-9f6d-2995514d861b"), Rule = GetType().ToString() }); } else { var configurationNode = installNode.SelectSingleNode("configuration"); if (configurationNode == null) { r.Add(new Models.VerificationMessage { Message = "All 'config/install' nodes must have a 'configuration' node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("25a7da28-953a-4f1b-8c00-e7c0f4ee8b3e"), Rule = GetType().ToString() }); } else { var nodesNode = configurationNode.SelectSingleNode("nodes"); if (nodesNode == null) { r.Add(new Models.VerificationMessage { Message = "All 'config/install/configuration' nodes must have a 'nodes' node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("072f49a1-87ba-4996-bd38-629b6fe9cee8"), Rule = GetType().ToString() }); } else { var nodeNodes = nodesNode.SelectNodes("node"); if (nodeNodes != null) { foreach (XmlNode nodeNode in nodeNodes) { if (nodeNode.Attributes != null && nodeNode.Attributes.Count > 0) { var path = nodeNode.Attributes["path"]; if (path == null || string.IsNullOrEmpty(path.Value)) { r.Add(new Models.VerificationMessage { Message = "All 'config/install/configuration/nodes/node' nodes must have a 'path' attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("e796ad35-e39d-4921-b92d-c94524ea4430"), Rule = GetType().ToString() }); } var action = nodeNode.Attributes["action"]; if (action == null || string.IsNullOrEmpty(action.Value)) { r.Add(new Models.VerificationMessage { Message = "All 'config/install/configuration/nodes/node' nodes must have a 'action' attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("822d6ff2-7feb-439c-b232-b9c3b9177f24"), Rule = GetType().ToString() }); } else { if (action.Value.ToLower() != "remove") { var collision = nodeNode.Attributes["collision"]; if (collision == null || string.IsNullOrEmpty(collision.Value)) { r.Add(new Models.VerificationMessage { Message = "All 'config/install/configuration/nodes/node' nodes must have a 'collision' attribute unless the action node is set to 'remove'.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("243e15fa-1aff-4ee6-b19d-aeeb75768b9c"), Rule = GetType().ToString() }); } } } } else { r.Add(new Models.VerificationMessage { Message = "Each 'config/install/configuration/nodes/node' node must have a path, action and collision attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("5da6d43b-7079-46fe-9800-4f180740ec7e"), Rule = GetType().ToString() }); } } } } } } var uninstallNode = configNode.SelectSingleNode("uninstall"); if (uninstallNode == null) { r.Add(new Models.VerificationMessage { Message = "All 'config' nodes must have a 'uninstall' node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("b797fa28-bb51-4b40-80bc-1137a217be9f"), Rule = GetType().ToString() }); } else { var configurationNode = uninstallNode.SelectSingleNode("configuration"); if (configurationNode == null) { r.Add(new Models.VerificationMessage { Message = "All 'config/uninstall' nodes must have a 'configuration' node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("6727051d-4e36-4709-b6e6-850e2a118030"), Rule = GetType().ToString() }); } else { var nodesNode = configurationNode.SelectSingleNode("nodes"); if (nodesNode == null) { r.Add(new Models.VerificationMessage { Message = "All 'config/uninstall/configuration' nodes must have a 'nodes' node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("59a2a2af-6071-4e2d-89a4-1d41b176dba5"), Rule = GetType().ToString() }); } else { var nodeNodes = nodesNode.SelectNodes("node"); if (nodeNodes != null) { foreach (XmlNode nodeNode in nodeNodes) { if (nodeNode.Attributes != null && nodeNode.Attributes.Count > 0) { var path = nodeNode.Attributes["path"]; if (path == null || string.IsNullOrEmpty(path.Value)) { r.Add(new Models.VerificationMessage { Message = "All 'config/uninstall/configuration/nodes/node' nodes must have a 'path' attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("83da185a-66d1-41eb-80d9-357ed83e71e7"), Rule = GetType().ToString() }); } var action = nodeNode.Attributes["action"]; if (action == null || string.IsNullOrEmpty(action.Value)) { r.Add(new Models.VerificationMessage { Message = "All 'config/uninstall/configuration/nodes/node' nodes must have a 'action' attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("3a53b9b4-32f2-4e2e-8f09-ea81d7ced1c5"), Rule = GetType().ToString() }); } } else { r.Add(new Models.VerificationMessage { Message = "Each 'config/uninstall/configuration/nodes/node' node must have a path and action attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("640b6762-7451-47e2-a8e1-bd0e5d39abf8"), Rule = GetType().ToString() }); } } } } } } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the cleanup node scanner", exc.Message); r.Add(new Models.VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.CleanupNode", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("1ab5a0a2-e7c0-41d7-89f2-44395df784f9"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { var xml = manifest.ManifestDoc; if (xml != null) { var dotnetnuke = xml.SelectSingleNode("/dotnetnuke"); if (dotnetnuke == null) { //TODO: this is not true, legacy language packs could have a root node of languagepack r.Add(new VerificationMessage { Message = "Package manifest must contain a dotnetnuke node.", MessageType = MessageTypes.Error, MessageId = new Guid("B90BA8D2-25A7-4BF0-A7BD-F6ECC6C4F0FF"), Rule = GetType().ToString() }); } else { if (dotnetnuke.Attributes == null) { r.Add(new VerificationMessage { Message = "DotNetNuke node should have two attributes version and type.", MessageType = MessageTypes.Error, MessageId = new Guid("36d013e8-4d9a-4127-8f9f-3594b4ccf093"), Rule = GetType().ToString() }); } else { var versionAttr = dotnetnuke.Attributes["version"]; if (versionAttr == null || string.IsNullOrEmpty(versionAttr.Value)) { //NOTE: from the looks of it, this might not be true. r.Add(new VerificationMessage { Message = "DotNetNuke node must contain a version attribute.", MessageType = MessageTypes.Error, MessageId = new Guid("7842d95e-cfa3-4273-96b5-3d998328a90e"), Rule = GetType().ToString() }); } else { double version; double.TryParse(versionAttr.Value, out version); if (!version.Equals(manifest.ManifestVersion())) { r.Add(new VerificationMessage { Message = "The value of the version attribute doesn't match the detected manifest version.", MessageType = MessageTypes.Error, MessageId = new Guid("07377574-6fba-4141-beb4-e40d5ab8f192"), Rule = GetType().ToString() }); } } var typeAttr = dotnetnuke.Attributes["type"]; if (typeAttr == null || string.IsNullOrEmpty(typeAttr.Value)) { r.Add(new VerificationMessage { Message = "DotNetNuke node must contain a type attribute.", MessageType = MessageTypes.Error, MessageId = new Guid("3b61cb99-039c-4af1-8c1b-37c0845bc5df"), Rule = GetType().ToString() }); } else { var type = typeAttr.Value; if (manifest.ManifestVersion() >= 5.0) { //If version is >= 5.0 then the type must be package if (type.ToLower() == "package") { manifest.ManifestType = ManifestTypes.Package; } else { r.Add(new VerificationMessage { Message = "When the version is >= 5.0, the type attribute value should typically be 'Package'.", MessageType = MessageTypes.Warning, MessageId = new Guid("09b0e52a-a475-44d0-a66b-a4cd5ef182e7"), Rule = GetType().ToString() }); } } else if (manifest.ManifestVersion() < 5.0) { if (type.ToLower() == "module") { manifest.ManifestType = ManifestTypes.Module; } } } } } } } catch (Exception) { r.Add(new VerificationMessage { Message = "There was an error while attempting to determine the package type and version.", MessageType = MessageTypes.Error, MessageId = new Guid("550c93f8-1eec-4196-a41e-ec160cfa325f"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "ExtensionLanguage") { continue; } var primaryNode = componentNode.SelectSingleNode("languageFiles"); if (primaryNode == null) { continue; } var code = primaryNode.SelectSingleNode("code"); if (code == null || string.IsNullOrEmpty(code.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Extension Language must have a code specified.", MessageType = MessageTypes.Error, MessageId = new Guid("5e4b873d-ed81-4df5-b908-8cf641516e60"), Rule = GetType().ToString() }); } var packageNode = primaryNode.SelectSingleNode("package"); if (packageNode == null || string.IsNullOrEmpty(packageNode.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Extension Language must have a package specified.", MessageType = MessageTypes.Error, MessageId = new Guid("ec025080-d5c1-41af-9d0d-f2a65ccf3b5a"), Rule = GetType().ToString() }); } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null || string.IsNullOrEmpty(basePathNode.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Extension Language must have a base path specified.", MessageType = MessageTypes.Error, MessageId = new Guid("30a9f28f-ca3c-4d66-bd7e-b3e67f861355"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "languageFile"); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the extension language node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.ExtensionLanguageNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("0ebfe7b6-16c4-41c9-9863-87ea1474d143"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Skin") { continue; } var primaryNode = componentNode.SelectSingleNode("skinFiles"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null) { r.Add(new VerificationMessage { Message = "Each " + primaryNode.Name + " node should have a basePath specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("c50caf3a-96ef-447d-bdd2-d8de337723a6"), Rule = GetType().ToString() }); } var skinName = primaryNode.SelectSingleNode("skinName"); if (skinName == null || string.IsNullOrEmpty(skinName.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Skin must have a skinName specified.", MessageType = MessageTypes.Error, MessageId = new Guid("8678c69b-c2a3-48d9-801c-f18656acba7d"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "skinFile"); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the skin node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.SkinNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("0bf90a74-ab85-4be9-971b-a2584d1e1b1e"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Assembly") { continue; } var primaryNode = componentNode.SelectSingleNode("assemblies"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode != null) { //removed this check see DNN-1588 by NR on 9/18/14 //r.Add(new VerificationMessage { Message = "basePath is not a valid node in component with type 'Assembly'.", MessageType = MessageTypes.Warning, MessageId = new Guid("ae591d52-0ed1-42fb-b6dd-17c482d6df90"), Rule = GetType().ToString()}); } var xmlNodeList = primaryNode.SelectNodes("assembly"); if (xmlNodeList == null) { continue; } foreach (XmlNode innerNode in xmlNodeList) { //for assembly nodes we need to check for the "Action" attribute. If the value is "UnRegister" then this node is used to remove a DLL and there for the assembly will not need to be in the package. if (innerNode.Attributes != null && innerNode.Attributes.Count > 0) { var action = innerNode.Attributes["Action"]; if (action != null && !string.IsNullOrEmpty(action.Value)) { if (action.Value == "UnRegister") { continue; } } } ProcessNode(r, package, manifest, innerNode); } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the assembly node scanner", exc.Message); r.Add(new VerificationMessage() { Message = "An Error occurred while processing Rules.Manifest.Assemblies", MessageType = MessageTypes.SystemError, MessageId = new Guid("511d3578-ef0b-467e-9fa1-ad206909d424"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Container") { continue; } var primaryNode = componentNode.SelectSingleNode("containerFiles"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null) { r.Add(new VerificationMessage { Message = "Each " + primaryNode.Name + " node should have a basePath specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("30f3a439-8173-4f5a-ac08-ffda8f8aa3b6"), Rule = GetType().ToString() }); } var containerNameNode = primaryNode.SelectSingleNode("containerName"); if (containerNameNode == null || string.IsNullOrEmpty(containerNameNode.InnerText)) { r.Add(new VerificationMessage { Message = "Each " + primaryNode.Name + " node should have a containerName specified.", MessageType = MessageTypes.Error, MessageId = new Guid("b9b12b5e-ce02-4812-9ca4-c1ba767fbeff"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "containerFile"); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the container node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.ContainerNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("419bb7bf-e227-401d-8462-7982683ca703"), Rule = GetType().ToString() }); } return(r); }
protected string ProcessNode(List <VerificationMessage> r, Package package, Models.Manifest manifest, XmlNode node) { var path = string.Empty; var name = string.Empty; var sourceFileName = string.Empty; var pathNode = node.SelectSingleNode("path"); if (pathNode != null && !string.IsNullOrEmpty(pathNode.InnerText)) { if (pathNode.InnerText.StartsWith("\\")) { r.Add(new VerificationMessage { Message = "The value of the 'path' node should not start with a \\.", MessageType = MessageTypes.Warning, MessageId = new Guid("414ca7da-18a8-4a08-a2c9-e8eacb863966"), Rule = GetType().ToString() }); path = pathNode.InnerText.TrimStart('\\'); } else { path = pathNode.InnerText; } } var nameNode = node.SelectSingleNode("name"); if (nameNode != null && !string.IsNullOrEmpty(nameNode.InnerText)) { name = nameNode.InnerText; } else { r.Add(new VerificationMessage { Message = "Each " + node.Name + " node must have a 'name' node with in it.", MessageType = MessageTypes.Error, MessageId = new Guid("123ceb51-45d8-4932-a7a5-c4032134c454"), Rule = GetType().ToString() }); } var sourceFileNameNode = node.SelectSingleNode("sourceFileName"); if (sourceFileNameNode != null && !string.IsNullOrEmpty(sourceFileNameNode.InnerText)) { sourceFileName = sourceFileNameNode.InnerText; } var fullFilePath = FullFilePath(package, sourceFileName, path, name); manifest.Files.Add(fullFilePath.ToLower()); if (manifest.ManifestType == ManifestTypes.Module && name.ToLower().EndsWith(".sqldataprovider")) { var sqlScriptFile = new SqlScriptFile(); if (name.ToLower().Contains("uninstall")) { sqlScriptFile.ScriptType = ScriptType.UnInstall; r.Add(new VerificationMessage { Message = "Uninstall scripts were detected in the manifest", MessageType = Models.MessageTypes.Info, MessageId = new Guid("5f99f13a-c9ea-4b11-935c-a5dba0a9f8f8"), Rule = GetType().ToString() }); } sqlScriptFile.Name = name; sqlScriptFile.Path = path; sqlScriptFile.TempFilePath = fullFilePath; manifest.SQLScripts.Add(sqlScriptFile); } return(fullFilePath); }
protected void ProcessComponentNode(List <VerificationMessage> r, Package package, Models.Manifest manifest, XmlNode node, string innerNodeName) { var xmlNodeList = node.SelectNodes(innerNodeName); if (xmlNodeList != null) { foreach (XmlNode innerNode in xmlNodeList) { ProcessNode(r, package, manifest, innerNode); } } else { r.Add(new VerificationMessage { Message = "Each " + node.Name + " node must have a at least one " + innerNodeName + " node within it.", MessageType = MessageTypes.Error, MessageId = new Guid("cdd09bca-9dfb-4658-9a5e-fa792c541ffd"), Rule = GetType().ToString() }); } }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { var xml = manifest.ManifestDoc; if (xml != null) { var packages = xml.SelectSingleNode("/dotnetnuke/packages"); if (packages == null) { r.Add(new Models.VerificationMessage { Message = "Package manifest must contain a packages node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("f6bf2243-6c28-49d0-ace7-c140c359b1b9"), Rule = GetType().ToString() }); } else { if (!packages.HasChildNodes) { r.Add(new Models.VerificationMessage { Message = "Package manifest must contain a packages node with child nodes.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("a173a46d-ba69-48a6-8405-e1cabb894907"), Rule = GetType().ToString() }); } foreach (XmlNode packageNode in packages.ChildNodes) { if (packageNode.Attributes != null && packageNode.Attributes.Count > 0) { var pName = packageNode.Attributes["name"]; if (pName == null || string.IsNullOrEmpty(pName.Value)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have a name.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("402b49aa-3e5b-4e92-92da-4b899a5687fb"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = pName.Value, MessageType = Models.MessageTypes.Info, MessageId = new Guid("d40fe32f-ea79-49c3-802c-f7264fb69a2b"), Rule = GetType().ToString() }); } var pType = packageNode.Attributes["type"]; if (pType == null || string.IsNullOrEmpty(pType.Value)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have a type.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("5c6ec9ea-498c-436a-892b-a3f7209b8f51"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = pType.Value, MessageType = Models.MessageTypes.Info, MessageId = new Guid("feaf4309-3ef3-4278-b610-b1f78fe3c6a9"), Rule = GetType().ToString() }); } var pVersion = packageNode.Attributes["version"]; if (pVersion == null || string.IsNullOrEmpty(pVersion.Value)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have a version.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d67ea510-1dc0-468f-85b6-3f75212814b5"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = pVersion.Value, MessageType = Models.MessageTypes.Info, MessageId = new Guid("07e29bf3-5816-4e1c-a9e8-7a05ee02a0f0"), Rule = GetType().ToString() }); } } var friendlyNameNode = packageNode.SelectSingleNode("friendlyName"); if (friendlyNameNode == null || string.IsNullOrEmpty(friendlyNameNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have a friendly name.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d6d6dcaf-a5a2-486a-bb30-983b39528ed0"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = friendlyNameNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("671b6736-b686-485b-a269-7be54180517e"), Rule = GetType().ToString() }); } var descriptionNode = packageNode.SelectSingleNode("description"); if (descriptionNode == null || string.IsNullOrEmpty(descriptionNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have a description.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("efce2ed8-9748-493b-839d-7c6e370b88dc"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = descriptionNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("93959db4-b7b0-4917-bb76-465173b9dd2b"), Rule = GetType().ToString() }); } var ownerNode = packageNode.SelectSingleNode("owner"); if (ownerNode == null || string.IsNullOrEmpty(ownerNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have an owner.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("312001e5-166c-46f7-9f40-4641823d3c8c"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = ownerNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("9ba9bb5e-9d4c-4b7a-8bcb-166dd468ed2d"), Rule = GetType().ToString() }); } if (manifest.ManifestVersion() >= 5.0) { var licenseNode = packageNode.SelectSingleNode("license"); if (licenseNode != null) { if (licenseNode.Attributes != null && licenseNode.Attributes.Count > 0) { var licenseSrc = licenseNode.Attributes["src"]; if (licenseSrc != null && !string.IsNullOrEmpty(licenseSrc.Value)) { var path = package.ExtractedPath; var fullFilePath = Path.Combine(path, licenseSrc.Value); manifest.Files.Add(fullFilePath.ToLower()); } else { r.Add(new Models.VerificationMessage { Message = "The license node src attribute needs to have a value specified", MessageType = Models.MessageTypes.Error, MessageId = new Guid("2376cd6a-ace0-4210-b39f-0b2c20c1506a"), Rule = GetType().ToString() }); } } else { if (string.IsNullOrEmpty(licenseNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "The license node needs to have a src attribute or license should be specified in the license node inner text.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d9099897-f8ec-4af3-a922-859c56a9352e"), Rule = GetType().ToString() }); } } } else { r.Add(new Models.VerificationMessage { Message = "The package should have a license node", MessageType = Models.MessageTypes.Error, MessageId = new Guid("f9255105-a561-4e43-ac4b-af177fb7da10"), Rule = GetType().ToString() }); } var releaseNotesNode = packageNode.SelectSingleNode("releaseNotes"); if (releaseNotesNode != null) { if (releaseNotesNode.Attributes != null && releaseNotesNode.Attributes.Count > 0) { var releaseNotesSrc = releaseNotesNode.Attributes["src"]; if (releaseNotesSrc != null && !string.IsNullOrEmpty(releaseNotesSrc.Value)) { var path = package.ExtractedPath; var fullFilePath = Path.Combine(path, releaseNotesSrc.Value); manifest.Files.Add(fullFilePath.ToLower()); } else { r.Add(new Models.VerificationMessage { Message = "The releaseNotes node src attribute needs to have a value specified", MessageType = Models.MessageTypes.Error, MessageId = new Guid("e9ac7c38-808e-4300-b749-3c2ba453eb0a"), Rule = GetType().ToString() }); } } else { if (string.IsNullOrEmpty(releaseNotesNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "The releaseNotes node needs to have a src attribute or license should be specified in the license node inner text.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("c50278f4-6461-4fe8-873c-b8ec2587135d"), Rule = GetType().ToString() }); } } } else { r.Add(new Models.VerificationMessage { Message = "The package should have a releaseNotes node", MessageType = Models.MessageTypes.Error, MessageId = new Guid("f0f247a7-ae02-4187-a4a4-e598421e6fd6"), Rule = GetType().ToString() }); } var azureCompatibleNode = packageNode.SelectSingleNode("azureCompatible"); if (azureCompatibleNode != null) { manifest.HasAzureCompatibleTag = true; if (!string.IsNullOrEmpty(azureCompatibleNode.InnerText) && azureCompatibleNode.InnerText.ToLower() == "true") { manifest.TaggedAzureCompatible = true; } } var dependenciesNode = packageNode.SelectSingleNode("dependencies"); var dependencyNodeList = dependenciesNode?.SelectNodes("dependency"); if (dependencyNodeList != null) { foreach (XmlNode dependencyNode in dependencyNodeList) { var dependencyNodeType = dependencyNode.Attributes["type"]; if (dependencyNodeType != null && !string.IsNullOrEmpty(dependencyNodeType.Value)) { if (dependencyNodeType.Value.ToLower() == "coreversion") { package.CoreVersionDependency = dependencyNode.InnerText; } } } } } var componentsNode = packageNode.SelectSingleNode("components"); if (componentsNode == null || !componentsNode.HasChildNodes) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have a list of components.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("996a7832-9ca6-4123-85e7-75efc1d1d57a"), Rule = GetType().ToString() }); } } } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the SQL Azure scanner", exc.Message); r.Add(new Models.VerificationMessage { Message = "Package manifest must be properly formatted XML.", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("5a1585c5-1c08-49b3-885b-6a02f4c59bfa"), Rule = GetType().ToString() }); } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { var xml = manifest.ManifestDoc; if (xml != null) { var packages = xml.SelectSingleNode("/dotnetnuke/packages"); if (packages != null) { foreach (XmlNode packageNode in packages.ChildNodes) { var ownerNode = packageNode.SelectSingleNode("owner"); if (ownerNode == null) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest must have an owner.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("13c5a640-56ed-484e-956c-ebad86ce8399"), Rule = GetType().ToString() }); } else { var name = ownerNode.SelectSingleNode("name"); if (name == null || string.IsNullOrEmpty(name.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest should have an owner name.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("22caecf4-419f-4f7a-92bb-69e644762941"), Rule = GetType().ToString() }); } var organization = ownerNode.SelectSingleNode("organization"); if (organization == null || string.IsNullOrEmpty(organization.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest should have an owner organization.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("cbd22b56-778c-43d5-bebc-89e44b99684b"), Rule = GetType().ToString() }); } var url = ownerNode.SelectSingleNode("url"); if (url == null || string.IsNullOrEmpty(url.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest should have an owner URL.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("aa1d517b-3655-4f92-9332-9544a9f54eed"), Rule = GetType().ToString() }); } var email = ownerNode.SelectSingleNode("email"); if (email == null || string.IsNullOrEmpty(email.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL packages in the manifest should have an owner Email.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("34db8679-d5b2-4722-a17d-d555eaf597ae"), Rule = GetType().ToString() }); } } } } } } catch (Exception) { r.Add(new Models.VerificationMessage { Message = "There was a problem parsing the package owner from the xml manifest.", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("f35eea0a-2841-4c8e-978c-bfcb7fa0ba42"), Rule = GetType().ToString() }); } return(r); }
public void ProcessScripts(List <VerificationMessage> r, Package package, Models.Manifest manifest) { try { var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); Directory.CreateDirectory(tempPath); var messageList = new List <Azure>(); var azureScanner = new ScriptScanner(); foreach (var sqlScriptFile in manifest.InstallScripts) { if (!File.Exists(sqlScriptFile.TempFilePath) || sqlScriptFile.IsUnInstall) { continue; } //we have script files, now let's see if they will work in Azure. string fileName; if (sqlScriptFile.TempFilePath.Contains("\\")) { var fileParts = sqlScriptFile.TempFilePath.Split('\\'); fileName = fileParts[fileParts.Length - 1]; } else { fileName = sqlScriptFile.Name; } messageList.AddRange(azureScanner.ProcessAzure(sqlScriptFile.TempFilePath, tempPath + "\\" + fileName)); } //var outputFilePaths = Directory.GetFiles(tempPath, "*.SqlDataProvider"); var outputFilePaths = Directory.GetFiles(tempPath, "*.sql"); package.SQLOutputPath = tempPath; foreach (var filePath in outputFilePaths) { messageList.AddRange(azureScanner.LogAzure(filePath)); } foreach (var azure in messageList) { var messageType = azure.MessageType.ToString(); if (messageType == Models.MessageTypes.Error.ToString()) { r.Add(new VerificationMessage { Message = azure.ToString(), MessageType = Models.MessageTypes.Error, MessageId = new Guid("6f6ed7be-c182-4baf-a369-809b7d99549a"), Rule = GetType().ToString() }); } else if (messageType == Models.MessageTypes.Info.ToString()) { //r.Add(new Models.VerificationMessage { Message = azure.ToString(), MessageType = Models.MessageTypes.Info, MessageId = new Guid("1d4eba86-a23f-4bd0-afdf-430ed4c4a2a8"), Rule = GetType().ToString() }); } else if (messageType == Models.MessageTypes.SystemError.ToString()) { r.Add(new VerificationMessage { Message = azure.ToString(), MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("a2cb34dd-c882-4302-ade0-d38c75e98fa2"), Rule = GetType().ToString() }); } else if (messageType == Models.MessageTypes.Warning.ToString()) { r.Add(new VerificationMessage { Message = azure.ToString(), MessageType = Models.MessageTypes.Warning, MessageId = new Guid("3a9452d3-dce5-4f78-93af-12645ae224ac"), Rule = GetType().ToString() }); } else { r.Add(new VerificationMessage { Message = "Could not parse the SQL Azure error message type.", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("4fef4b2c-4b8d-4ff9-b345-072a53a84a35"), Rule = GetType().ToString() }); } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the SQL Azure scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.Scripts: " + exc.Message, MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("6addcb0f-41c7-4b8f-b521-ca5f92d26285"), Rule = GetType().ToString() }); } }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); //Trace.WriteLine("SQL Scanner - started", "Information"); try { if (manifest.HasSqlScripts) { Stopwatch sw = Stopwatch.StartNew(); DotNetNukeVersionInfo highestAzureCompatableVersion = null; var majorVersion = DotNetNukeMajorVersions.DotNetNukeVersionList(); foreach (var dotNetNukeVersionInfo in majorVersion) { if (DotNetNukeVersions.ConvertNameToRank(package.MinDotNetNukeVersion) <= DotNetNukeVersions.ConvertNameToRank(dotNetNukeVersionInfo.Name)) { var databaseName = Convert.ToBase64String(Guid.NewGuid().ToByteArray()) .Substring(0, 22) .Replace("/", "_") .Replace("+", "-"); try { //create database //Trace.WriteLine("SQL Scanner - creating database: " + databaseName, "Information"); Database.CreateDatabase(databaseName); //create user for the database //Trace.WriteLine("SQL Scanner - creating database user.", "Information"); User.CreateDatabaseAdmin(databaseName); //install the base version script //Trace.WriteLine("SQL Scanner - install base DNN db objects.", "Information"); DNNBase.InstallBaseDNNScripts(databaseName, dotNetNukeVersionInfo); //list and record all DB objects //Trace.WriteLine("SQL Scanner - build list of base db objects.", "Information"); var objectListPre = Objects.GetDatabaseObjects(databaseName); //install extension scripts //Trace.WriteLine("SQL Scanner - install extension.", "Information"); foreach (var sqlScriptFile in manifest.InstallScripts) { if (!File.Exists(sqlScriptFile.TempFilePath) || sqlScriptFile.IsUnInstall) { continue; } try { Script.Execute(databaseName, File.ReadAllText(sqlScriptFile.TempFilePath)); } catch (Exception ex) { Trace.TraceError("SQL Scanner - There was a problem installing: " + sqlScriptFile.Name); var error = ex.InnerException.Message; r.Add(new VerificationMessage { Message = "While testing against " + dotNetNukeVersionInfo.Name + " " + sqlScriptFile.Name + " returned an error: " + Common.CleanError(error), MessageType = MessageTypes.Error, MessageId = new Guid("b25d95e3-06d0-4241-9729-96f85cfddcbf"), Rule = GetType().ToString() }); } } //scan and record all objects created or updated after we installed the extension. //Trace.WriteLine("SQL Scanner - Get new list of db objects post install.", "Information"); var objectListPost = Objects.GetDatabaseObjects(databaseName); //check to see if any core objects were modified. //Trace.WriteLine("SQL Scanner - finding objects that might have been updated.", "Information"); foreach (var o1 in objectListPre) { foreach (var o2 in objectListPost) { if (o1.ObjectId == o2.ObjectId && o1.ModifyDate != o2.ModifyDate) { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " it was detected that a DotNetNuke core SQL object (" + o1.Name + ") was modified by this extension.", MessageType = MessageTypes.Warning, MessageId = new Guid("50072188-f3c3-4ae0-aaed-4f3d22162e9b"), Rule = GetType().ToString() }); } } } var newObjectList = new List <DatabaseObject>(); foreach (var o1 in objectListPost) { var foundMatch = false; foreach (var o2 in objectListPre) { if (o1.ObjectId == o2.ObjectId) { foundMatch = true; } } if (!foundMatch) { newObjectList.Add(o1); } } //check for objects not correctly using {databaseOwner} & {objectQualifier} //Trace.WriteLine("SQL Scanner - Scanning for objects that might not correctly be using dbo & object qualifier tokens.", "Information"); foreach (var databaseObject in newObjectList) { if (databaseObject.SchemaId != 5 && databaseObject.Type.Trim() != "IT") { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a database object using the incorrect schema: " + databaseObject.Name, MessageType = MessageTypes.Error, MessageId = new Guid("bd4ca33b-aa33-4d5f-9468-8d8f7491bb9a"), Rule = GetType().ToString() }); } switch (databaseObject.Type.Trim()) { case "UQ": if (!databaseObject.Name.StartsWith("IX_TestQualifier_") && !databaseObject.Name.StartsWith("IX__TestQual")) { if (databaseObject.Name.Contains("TestQual")) { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a unique constraint using an non-traditional naming convention it should be IX_{objectQualifier}ObjectName: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("fc6b8fa6-2863-4bdf-a55c-a84e8165a57a"), Rule = GetType().ToString() }); } else { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a unique constraint which is missing an {objectQualifier} token: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("91b12382-7556-42d0-8772-fb91873232a5"), Rule = GetType().ToString() }); } } break; case "PK": if (!databaseObject.Name.StartsWith("PK_TestQualifier_") && !databaseObject.Name.StartsWith("PK__TestQual")) { if (databaseObject.Name.Contains("TestQual")) { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a primary key using an non-traditional naming convention it should be PK_{objectQualifier}ObjectName: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("e0bda944-44ab-4338-abb3-8a7bc37c42ee"), Rule = GetType().ToString() }); } else { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a primary key which is missing an {objectQualifier} token: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("e25340cb-0e36-4217-a79a-b6ea7faac273"), Rule = GetType().ToString() }); } } break; case "F": if (!databaseObject.Name.StartsWith("FK_TestQualifier_") && !databaseObject.Name.StartsWith("FK__TestQual")) { if (databaseObject.Name.Contains("TestQual")) { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a foreign key using an non-traditional naming convention it should be FK_{objectQualifier}ObjectName: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("15c557e1-8a94-4aba-aba3-a952de46f9ba"), Rule = GetType().ToString() }); } else { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a foreign key which is missing an {objectQualifier} token: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("a5620d04-16cd-467b-8d86-2f400cd04376"), Rule = GetType().ToString() }); } } break; case "D": if (!databaseObject.Name.StartsWith("DF_TestQualifier_") && !databaseObject.Name.StartsWith("DF__TestQual")) { if (databaseObject.Name.Contains("TestQual")) { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a default constraint using an non-traditional naming convention it should be DF_{objectQualifier}ObjectName: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("15c557e1-8a94-4aba-aba3-a952de46f9ba"), Rule = GetType().ToString() }); } else { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a default constraint which is missing an {objectQualifier} token: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("a44d52d4-0e7f-438c-9ae1-539f7251f756"), Rule = GetType().ToString() }); } } break; case "IT": break; default: if (!databaseObject.Name.StartsWith("TestQualifier_")) { if (databaseObject.Name.Contains("TestQual")) { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a database object using an non-traditional naming convention it should be {objectQualifier}ObjectName: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("15c557e1-8a94-4aba-aba3-a952de46f9ba"), Rule = GetType().ToString() }); } else { r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a database object which is missing an {objectQualifier} token: " + databaseObject.Name, MessageType = MessageTypes.Warning, MessageId = new Guid("ba2855ee-73a5-4787-911b-426b7c0f24ef"), Rule = GetType().ToString() }); } } break; } } //run sp_refreshsqlmodule on all newly created stored procedures to check for errors. //Trace.WriteLine("SQL Scanner - Running sp_refreshsqlmodule on newly created objects.", "Information"); var hasInvalidObjects = false; foreach (var databaseObject in newObjectList) { if (databaseObject.TypeDesc == "SQL_STORED_PROCEDURE" || databaseObject.TypeDesc == "SQL_TRIGGER" || databaseObject.TypeDesc == "SQL_SCALAR_FUNCTION" || databaseObject.TypeDesc == "SQL_TABLE_VALUED_FUNCTION" || //databaseObject.TypeDesc == "SQL_INLINE_TABLE_VALUED_FUNCTION" || databaseObject.TypeDesc == "VIEW") { var result = Objects.CheckDatabaseObject(databaseName, databaseObject); foreach (var error in result) { hasInvalidObjects = true; r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has created a database object: " + databaseObject.Name + " with the following error: " + Common.CleanError(error), MessageType = MessageTypes.Error, MessageId = new Guid("297ccdd3-884f-4cbb-85f0-24c343a9ff2a"), Rule = GetType().ToString() }); } } } //if DNN version > 6.0 and sq_refreshsqlmodule didn't return any errors, run SQL migration wizard //Trace.WriteLine("SQL Scanner - about to run the SQL migration wizard.", "Information"); if (!hasInvalidObjects && DotNetNukeVersions.ConvertNameToRank(dotNetNukeVersionInfo.Name) >= 60000 && newObjectList.Count > 0) { //Trace.WriteLine("SQL Scanner - This extension is new enough and as passed all scans up till now so it's time to run the migration wizard.", "Information"); var hasAzureError = false; var databaseScanner = new DatabaseScanner(); var output = databaseScanner.GenerateScriptFromSourceServer( Common.BuildServerConnection(databaseName), newObjectList); foreach (var error in output) { hasAzureError = true; r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " It appears the extension has an Azure SQL compatibility issue: " + Common.CleanError(error), MessageType = MessageTypes.Error, MessageId = new Guid("98e44676-fde3-419b-bbf8-bcf785cbbf77"), Rule = GetType().ToString() }); } if (!hasAzureError) { highestAzureCompatableVersion = dotNetNukeVersionInfo; } } } catch (Exception ex) { //Trace.WriteLine("SQL Scanner - There was a problem with the migration wizard.", "Information"); var error = ex.Message; r.Add(new VerificationMessage() { Message = "While testing against " + dotNetNukeVersionInfo.Name + " the following error was returned: " + Common.CleanError(error), MessageType = MessageTypes.SystemError, MessageId = new Guid("2b0143ec-1bb6-43b1-9bae-1b114ec24e41"), Rule = GetType().ToString() }); } finally { //drop database Database.DropDatabase(databaseName); User.DropDatabaseAdmin(databaseName); } } } //Trace.WriteLine("SQL Scanner - should we run the Azure install/backup/restore process?", "Information"); if (highestAzureCompatableVersion != null) { //Trace.WriteLine("SQL Scanner - Yes, we should!", "Information"); Stopwatch sw1 = Stopwatch.StartNew(); //if SQL migration wizard passes, do the following: // clear the azure install database try { //Trace.WriteLine("SQL Scanner - clear the Azure database.", "Information"); Azure.ClearInstallAndRestoreDatabases(); } catch (Exception ex) { var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing against SQL Azure database version " + highestAzureCompatableVersion.Name + " the cleanup failed and returned an error: " + Common.CleanError(error), MessageType = MessageTypes.SystemError, MessageId = new Guid("fdde5e65-8a39-41c5-8a9e-9d208a8df609"), Rule = GetType().ToString() }); } sw1.Stop(); r.Add(new VerificationMessage() { Message = "Processed Azure initial clean up in " + (sw1.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("1634b15a-a18b-422c-97f4-12f058c5e03b"), Rule = GetType().ToString() }); Stopwatch sw2 = Stopwatch.StartNew(); //install the base version scripts try { //Trace.WriteLine("SQL Scanner - set up the base DNN tables in Azure.", "Information"); Azure.SetupBaseDNNDatabase(highestAzureCompatableVersion); } catch (Exception ex) { var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing against SQL Azure database version " + highestAzureCompatableVersion.Name + " the base DNN table setup failed and returned an error: " + Common.CleanError(error), MessageType = MessageTypes.SystemError, MessageId = new Guid("898526c6-c8df-4d64-bb35-a04e5bc01044"), Rule = GetType().ToString() }); } sw2.Stop(); r.Add(new VerificationMessage() { Message = "Processed Azure initial setup in " + (sw2.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("f7eeb9b8-6a09-453f-814f-a6a5c126c431"), Rule = GetType().ToString() }); Stopwatch sw3 = Stopwatch.StartNew(); //install extension scripts foreach (var sqlScriptFile in manifest.InstallScripts) { if (!File.Exists(sqlScriptFile.TempFilePath) || sqlScriptFile.IsUnInstall) { continue; } try { //Trace.WriteLine("SQL Scanner - Install the extensions script files in Azure.", "Information"); Azure.InstallScripts(File.ReadAllText(sqlScriptFile.TempFilePath)); } catch (Exception ex) { var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing against SQL Azure database version " + highestAzureCompatableVersion.Name + " " + sqlScriptFile.Name + " returned an error: " + Common.CleanError(error), MessageType = MessageTypes.Error, MessageId = new Guid("84d55196-a64e-4dbe-b848-2c06ba016869"), Rule = GetType().ToString() }); } } sw3.Stop(); r.Add(new VerificationMessage() { Message = "Processed Azure module setup in " + (sw3.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("845b161f-b3c4-4382-8cf5-c105918a891b"), Rule = GetType().ToString() }); Stopwatch sw4 = Stopwatch.StartNew(); //back up database try { //Trace.WriteLine("SQL Scanner - Create a backup of the Azure database.", "Information"); Azure.CreateDatabaseBackup(); } catch (Exception ex) { Trace.TraceError("Error while backing up the azure database."); Trace.TraceError(ex.Message); if (ex.InnerException != null) { Trace.TraceError(ex.InnerException.Message); } var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing against SQL Azure database version " + highestAzureCompatableVersion.Name + " an attempt to backup the database resulted in the following error: " + Common.CleanError(error), MessageType = MessageTypes.Error, MessageId = new Guid("03d76ba9-e2cc-4531-a322-3147d7cd1358"), Rule = GetType().ToString() }); } sw4.Stop(); r.Add(new VerificationMessage() { Message = "Processed Azure back up in " + (sw4.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("382d9b43-a8d0-4a69-8afe-f5f48a82d7dd"), Rule = GetType().ToString() }); Stopwatch sw5 = Stopwatch.StartNew(); //restore database try { //Trace.WriteLine("SQL Scanner - Restore the Azure database.", "Information"); Azure.RestoreDatabaseBackup(); } catch (Exception ex) { var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing against SQL Azure database version " + highestAzureCompatableVersion.Name + " an attempt to restore the database resulted in the following error: " + Common.CleanError(error), MessageType = MessageTypes.Error, MessageId = new Guid("50274d0e-bc59-4b50-8e28-d35183a29428"), Rule = GetType().ToString() }); } sw5.Stop(); r.Add(new VerificationMessage() { Message = "Processed Azure restore in " + (sw5.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("6bbbe53d-4537-4c09-b1b5-c4b4b6fdbdf8"), Rule = GetType().ToString() }); Stopwatch sw6 = Stopwatch.StartNew(); //Clean Up try { //Trace.WriteLine("SQL Scanner - perform the final clean up of the Azure databases and backups.", "Information"); Azure.ClearInstallAndRestoreDatabases(); } catch (Exception ex) { var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing against SQL Azure database version " + highestAzureCompatableVersion.Name + " the cleanup failed and returned an error: " + Common.CleanError(error), MessageType = MessageTypes.SystemError, MessageId = new Guid("fdde5e65-8a39-41c5-8a9e-9d208a8df609"), Rule = GetType().ToString() }); } sw6.Stop(); r.Add(new VerificationMessage() { Message = "Processed Azure final clean up in " + (sw6.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("e7da9c33-3ef4-430e-b8be-44188f09d5c7"), Rule = GetType().ToString() }); } sw.Stop(); r.Add(new VerificationMessage() { Message = "Processed SQL in " + (sw.ElapsedMilliseconds / 1000) + " seconds", MessageType = MessageTypes.Info, MessageId = new Guid("ad338269-f31c-4fe2-b564-4e5b44ac1b6b"), Rule = GetType().ToString() }); } } catch (Exception ex) { if (ex.InnerException != null) { var error = ex.InnerException.Message; r.Add(new VerificationMessage() { Message = "While testing the SQL scripts, the following error was returned: " + Common.CleanError(error), MessageType = MessageTypes.SystemError, MessageId = new Guid("97b6a0e6-1508-438e-a988-319e531c411c"), Rule = GetType().ToString() }); } else { var error = ex.Message; r.Add(new VerificationMessage() { Message = "While testing the SQL scripts, the following error was returned: " + Common.CleanError(error), MessageType = MessageTypes.SystemError, MessageId = new Guid("5b2ee4ba-ebc0-4230-8504-aa3365acfb0c"), Rule = GetType().ToString() }); } } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Script") { continue; } var primaryNode = componentNode.SelectSingleNode("scripts"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null) { r.Add(new VerificationMessage { Message = "ALL scripts nodes should have a basePath specified.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("c45d2a61-ffdd-4f92-8710-5cb3dd25deff"), Rule = GetType().ToString() }); } var xmlNodeList = primaryNode.SelectNodes("script"); if (xmlNodeList == null) { continue; } foreach (XmlNode innerNode in xmlNodeList) { var sqlScriptFile = new SqlScriptFile(); if (innerNode.Attributes != null && innerNode.Attributes.Count > 0) { var scriptType = innerNode.Attributes["type"]; if (scriptType != null && !string.IsNullOrEmpty(scriptType.Value)) { if (scriptType.Value == "UnInstall") { sqlScriptFile.ScriptType = ScriptType.UnInstall; r.Add(new VerificationMessage { Message = "Uninstall scripts were detected in the manifest", MessageType = Models.MessageTypes.Info, MessageId = new Guid("5f99f13a-c9ea-4b11-935c-a5dba0a9f8f8"), Rule = GetType().ToString() }); } } } var nameNode = innerNode.SelectSingleNode("name"); if (nameNode != null && !string.IsNullOrEmpty(nameNode.InnerText)) { sqlScriptFile.Name = nameNode.InnerText; } else { r.Add(new VerificationMessage { Message = "Each script node must have a 'name' node with in it.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("dc50cb9e-906a-4215-b839-a8d6d92270ab"), Rule = GetType().ToString() }); } var pathNode = innerNode.SelectSingleNode("path"); if (pathNode != null && !string.IsNullOrEmpty(pathNode.InnerText)) { if (pathNode.InnerText.StartsWith("\\")) { r.Add(new VerificationMessage { Message = "The value of the 'path' node should not start with a \\.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("414ca7da-18a8-4a08-a2c9-e8eacb863966"), Rule = GetType().ToString() }); sqlScriptFile.Path = pathNode.InnerText.TrimStart('\\'); } else { sqlScriptFile.Path = pathNode.InnerText; } } var versionNode = innerNode.SelectSingleNode("version"); if (versionNode != null && !string.IsNullOrEmpty(versionNode.InnerText)) { sqlScriptFile.Version = versionNode.InnerText; } var sourceFileName = string.Empty; var sourceFileNameNode = innerNode.SelectSingleNode("sourceFileName"); if (sourceFileNameNode != null && !string.IsNullOrEmpty(sourceFileNameNode.InnerText)) { sourceFileName = sourceFileNameNode.InnerText; } sqlScriptFile.TempFilePath = FullFilePath(package, sourceFileName, sqlScriptFile.Path, sqlScriptFile.Name); manifest.Files.Add(sqlScriptFile.TempFilePath.ToLower()); manifest.SQLScripts.Add(sqlScriptFile); } ProcessScripts(r, package, manifest); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the SQL Azure scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.Scripts: " + exc.Message, MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("d93c52c9-5b54-48f0-b7ea-2315329fd512"), Rule = GetType().ToString() }); } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { var xml = manifest.ManifestDoc; if (xml != null) { var folders = xml.SelectSingleNode("/dotnetnuke/folders"); if (folders == null) { r.Add(new Models.VerificationMessage { Message = "Extension manifest must contain a folders node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("274d7fc6-559e-49fc-8cd7-84dbf409745b"), Rule = GetType().ToString() }); } else { if (!folders.HasChildNodes) { r.Add(new Models.VerificationMessage { Message = "Extension manifest must contain a folders node with child nodes.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("af254a4c-ad18-4f40-9469-6fd131dc7c8b"), Rule = GetType().ToString() }); } foreach (XmlNode folderNode in folders.ChildNodes) { var nameNode = folderNode.SelectSingleNode("name"); if (nameNode == null || string.IsNullOrEmpty(nameNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL folder nodes in the manifest must have a name node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("7fd48677-8409-46a7-b790-20ebc90108b0"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = nameNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("d40fe32f-ea79-49c3-802c-f7264fb69a2b"), Rule = GetType().ToString() }); } var friendlyNameNode = folderNode.SelectSingleNode("friendlyname"); if (friendlyNameNode == null || string.IsNullOrEmpty(friendlyNameNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL folder nodes in the manifest must have a friendly name node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d6d6dcaf-a5a2-486a-bb30-983b39528ed0"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = friendlyNameNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("671b6736-b686-485b-a269-7be54180517e"), Rule = GetType().ToString() }); } var folderNameNode = folderNode.SelectSingleNode("foldername"); if (folderNameNode == null || string.IsNullOrEmpty(folderNameNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL folder nodes in the manifest must have a folder name node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("30c30ca0-0cf2-4455-8b1c-88f7d167beb1"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = folderNameNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("fe5b2f25-6572-41f8-86c2-0967efa7d712"), Rule = GetType().ToString() }); } var moduleNameNode = folderNode.SelectSingleNode("modulename"); if (moduleNameNode == null || string.IsNullOrEmpty(moduleNameNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL folder nodes in the manifest must have a module name node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("3a5ad293-4e08-4a5d-9ba2-b4d4b1d27e39"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = moduleNameNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("52c3d044-89f0-4397-a583-54d66fe738a7"), Rule = GetType().ToString() }); } var descriptionNode = folderNode.SelectSingleNode("description"); if (descriptionNode == null || string.IsNullOrEmpty(descriptionNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL folder nodes in the manifest must have a description.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("efce2ed8-9748-493b-839d-7c6e370b88dc"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = descriptionNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("93959db4-b7b0-4917-bb76-465173b9dd2b"), Rule = GetType().ToString() }); } var versionNode = folderNode.SelectSingleNode("version"); if (versionNode == null || string.IsNullOrEmpty(versionNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL folder nodes in the manifest must have a description.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("cd8e3ec7-603e-474f-a85b-6fd8586ad8a5"), Rule = GetType().ToString() }); } else { r.Add(new Models.VerificationMessage { Message = versionNode.InnerText, MessageType = Models.MessageTypes.Info, MessageId = new Guid("aa26db5b-f3a6-4af4-bb88-a9505d247732"), Rule = GetType().ToString() }); } r.Add(new Models.VerificationMessage { Message = "Module", MessageType = Models.MessageTypes.Info, MessageId = new Guid("feaf4309-3ef3-4278-b610-b1f78fe3c6a9"), Rule = GetType().ToString() }); } } } } catch //(Exception exc) { r.Add(new Models.VerificationMessage { Message = "Extension manifest must be properly formatted XML.", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("5a1585c5-1c08-49b3-885b-6a02f4c59bfa"), Rule = GetType().ToString() }); } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Cleanup") { continue; } var path = package.ExtractedPath; var version = componentNode.Attributes["version"]; if (version == null || string.IsNullOrEmpty(version.Value)) { r.Add(new Models.VerificationMessage { Message = "Each component node with the type of 'Cleanup' must have a version attribute.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("cd88ea76-d98f-4d42-9c5a-4deb6dcf6030"), Rule = GetType().ToString() }); } var strFileName = ""; var fileName = componentNode.Attributes["fileName"]; if (fileName != null && !string.IsNullOrEmpty(fileName.Value)) { strFileName = fileName.Value; if (strFileName != "") { var fullFilePath = System.IO.Path.Combine(path, strFileName); manifest.Files.Add(fullFilePath.ToLower()); } } else { var cleanupFilesNode = componentNode.SelectSingleNode("files"); if (cleanupFilesNode != null) { var clanupFilesBasePath = cleanupFilesNode.SelectSingleNode("basePath"); if (clanupFilesBasePath == null || string.IsNullOrEmpty(clanupFilesBasePath.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL files nodes should have a basePath specified.", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("0621ac6e-fbc2-4459-b7c5-b849401b36b2"), Rule = GetType().ToString() }); } var cleanupFileNodes = componentNode.SelectNodes("file"); if (cleanupFileNodes != null) { foreach (XmlNode cleanupFileNode in cleanupFileNodes) { var nameNode = cleanupFileNode.SelectSingleNode("name"); if (nameNode == null || string.IsNullOrEmpty(nameNode.Value)) { r.Add(new Models.VerificationMessage { Message = "Each file node must have a 'name' node with in it.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("2feeaa18-6332-4092-bbff-24a792b52294"), Rule = GetType().ToString() }); } } } else { r.Add(new Models.VerificationMessage { Message = "Each files node must have a at least one file node within it.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("3ce59978-ca73-4f77-97d7-aef5bd65f09e"), Rule = GetType().ToString() }); } } else { r.Add(new Models.VerificationMessage { Message = "Each component node with the type of 'Cleanup' must have a fileName attribute or a 'files' child node.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("b79b60f5-1fce-4cdc-b1a1-c6abc3ef82e9"), Rule = GetType().ToString() }); } } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the cleanup node scanner", exc.Message); r.Add(new Models.VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.CleanupNode", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("1ab5a0a2-e7c0-41d7-89f2-44395df784f9"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "CoreLanguage") { continue; } var primaryNode = componentNode.SelectSingleNode("languageFiles"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode != null) { r.Add(new VerificationMessage { Message = "basePath is not a valid node in component with type 'CoreLanguage'.", MessageType = MessageTypes.Warning, MessageId = new Guid("60412b59-530f-4376-84aa-1788affccc75"), Rule = GetType().ToString() }); } var code = primaryNode.SelectSingleNode("code"); if (code == null || string.IsNullOrEmpty(code.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Core Language must have a code specified.", MessageType = MessageTypes.Error, MessageId = new Guid("3c7929d8-51ec-4320-aa42-1dac92a83d3d"), Rule = GetType().ToString() }); } var displayName = primaryNode.SelectSingleNode("displayName"); if (displayName == null || string.IsNullOrEmpty(displayName.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Core Language must have a displayName specified.", MessageType = MessageTypes.Error, MessageId = new Guid("f241a413-b92f-47ce-b652-5005cb7b912b"), Rule = GetType().ToString() }); } var fallback = primaryNode.SelectSingleNode("fallback"); if (fallback == null || string.IsNullOrEmpty(fallback.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Core Language must have a fallback specified.", MessageType = MessageTypes.Error, MessageId = new Guid("41321a88-2aaa-4cd4-825d-a9a2c40428bf"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "languageFile"); } } catch (Exception exc) { Trace.WriteLine("There was an issue with the core language node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.CoreLanguageNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("3024cea7-5cf7-44f6-8d11-b973d51eb869"), Rule = GetType().ToString() }); } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "DashboardControl") { continue; } var dashboardControlNodes = componentNode.SelectNodes("dashboardControl"); if (dashboardControlNodes == null || dashboardControlNodes.Count <= 0) { r.Add(new Models.VerificationMessage { Message = "ALL Dashboard ControlDefinitions must have at least one dashboardControl node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("a56f4b2d-09b0-406e-a1dc-a67e2b646cd4"), Rule = GetType().ToString() }); } else { foreach (XmlNode ctl in dashboardControlNodes) { var keyNode = ctl.SelectSingleNode("key"); if (keyNode == null || string.IsNullOrEmpty(keyNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL dashboard control nodes must have a type node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("6a6ba22f-3b20-44e9-9717-c63a52131e37"), Rule = GetType().ToString() }); } var src = ctl.SelectSingleNode("src"); if (src == null || string.IsNullOrEmpty(src.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL dashboard control nodes must have a src node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("f9b83213-46bd-4ed7-a569-493faab3ccef"), Rule = GetType().ToString() }); } var localResources = ctl.SelectSingleNode("localResources"); if (localResources == null || string.IsNullOrEmpty(localResources.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL dashboard control nodes must have a local resources node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d156bebb-0073-4384-97a3-6d47e2a9519e"), Rule = GetType().ToString() }); } var controllerClass = ctl.SelectSingleNode("controllerClass"); if (controllerClass == null || string.IsNullOrEmpty(controllerClass.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL dashboard control nodes must have a controller class node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("10253a22-66c6-4259-9179-83fa34b760ae"), Rule = GetType().ToString() }); } var isEnabled = ctl.SelectSingleNode("isEnabled"); if (isEnabled == null || string.IsNullOrEmpty(isEnabled.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL dashboard control nodes must have a isEnabled node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("fb5055df-c353-4bef-953d-87e13c2852b8"), Rule = GetType().ToString() }); } var viewOrder = ctl.SelectSingleNode("viewOrder"); if (viewOrder == null || string.IsNullOrEmpty(viewOrder.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL dashboard control nodes must have a viewOrder node specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("ee95a3a9-16ca-40c5-a0a3-b0980a3803eb"), Rule = GetType().ToString() }); } } } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the Dashboard Control node scanner", exc.Message); r.Add(new Models.VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.DashboardControlNode", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("38d83abe-546a-432f-8253-9e0b382690f9"), Rule = GetType().ToString() }); } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "AuthenticationSystem") { continue; } var authenticationServiceNodes = componentNode.SelectNodes("authenticationService"); if (authenticationServiceNodes == null || authenticationServiceNodes.Count <= 0) { r.Add(new Models.VerificationMessage { Message = "ALL Authentication System Definitions must have at least one authenticationService specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d9bc01ff-0cc1-4b08-9750-1f9ad2d6c27e"), Rule = GetType().ToString() }); } else { foreach (XmlNode ctl in authenticationServiceNodes) { var typeNode = ctl.SelectSingleNode("type"); if (typeNode == null || string.IsNullOrEmpty(typeNode.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL authentication service nodes must have a type specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("297f1026-1d9a-4d06-896b-0deb0e0c17be"), Rule = GetType().ToString() }); } var settingsControlSrc = ctl.SelectSingleNode("settingsControlSrc"); if (settingsControlSrc == null || string.IsNullOrEmpty(settingsControlSrc.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL authentication service nodes must have a settings control source specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("00814677-1649-4984-a815-f3920e895a7a"), Rule = GetType().ToString() }); } var loginControlSrc = ctl.SelectSingleNode("loginControlSrc"); if (loginControlSrc == null || string.IsNullOrEmpty(loginControlSrc.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL authentication service nodes must have a login control source specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("82942d23-6cae-4976-bd74-fae3fca9287f"), Rule = GetType().ToString() }); } var logoffControlSrc = ctl.SelectSingleNode("logoffControlSrc"); if (logoffControlSrc == null || string.IsNullOrEmpty(logoffControlSrc.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL authentication service nodes must have a logoff control source specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("3f4ec2b6-3e61-4c29-b90f-44cb9ee153e9"), Rule = GetType().ToString() }); } } } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the Authentication System node scanner", exc.Message); r.Add(new Models.VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.AuthenticationSystemNode", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("c8458f8e-91b2-4c81-ae02-e1b3a18aec8d"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { switch (manifest.ManifestType) { case ManifestTypes.Package: if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "File") { continue; } var primaryNode = componentNode.SelectSingleNode("files"); if (primaryNode == null) { continue; } var basePathNode = primaryNode.SelectSingleNode("basePath"); if (basePathNode == null) { r.Add(new VerificationMessage { Message = "Each " + primaryNode.Name + " node should have a basePath specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("2ddfd5a6-85c6-45df-ad6a-91d21290d34a"), Rule = GetType().ToString() }); } ProcessComponentNode(r, package, manifest, primaryNode, "file"); } break; case ManifestTypes.Module: var folderNodes = manifest.ManifestDoc.SelectNodes("dotnetnuke/folders/folder"); if (folderNodes == null || folderNodes.Count <= 0) { r.Add(new VerificationMessage { Message = "ALL components of type Module must have at least one folder node specified.", MessageType = MessageTypes.Error, MessageId = new Guid("6c7cb47b-2c63-43ed-8d15-ac8f7567d74b"), Rule = GetType().ToString() }); } else { foreach (XmlNode folderNode in folderNodes) { var primaryNode = folderNode.SelectSingleNode("files"); if (primaryNode == null) { continue; } ProcessComponentNode(r, package, manifest, primaryNode, "file"); } } break; } } catch (Exception exc) { Trace.WriteLine("There was an issue with the file node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.FileNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("551646a4-3a12-470f-a51d-98d2343b8de7"), Rule = GetType().ToString() }); } return(r); }
public List <VerificationMessage> ApplyRule(Package package, Models.Manifest manifest) { var r = new List <VerificationMessage>(); try { switch (manifest.ManifestType) { case ManifestTypes.Package: if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "Module") { continue; } var desktopModuleNodes = componentNode.SelectNodes("desktopModule"); if (desktopModuleNodes == null) { continue; } foreach (XmlNode desktopModuleNode in desktopModuleNodes) { var moduleName = desktopModuleNode.SelectSingleNode("moduleName"); if (moduleName == null || string.IsNullOrEmpty(moduleName.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Module must have a moduleName specified.", MessageType = MessageTypes.Error, MessageId = new Guid("2ac58e69-1ca8-4ea8-b86b-a3a0c3edbf5c"), Rule = GetType().ToString() }); } var foldername = desktopModuleNode.SelectSingleNode("foldername"); if (foldername == null || string.IsNullOrEmpty(foldername.InnerText)) { r.Add(new VerificationMessage { Message = "ALL components of type Module must have a foldername specified.", MessageType = MessageTypes.Error, MessageId = new Guid("0c0ab7a5-8119-4421-9f93-4f87eed3ca1c"), Rule = GetType().ToString() }); } var moduleDefinitions = desktopModuleNode.SelectNodes("moduleDefinitions/moduleDefinition"); if (moduleDefinitions == null || moduleDefinitions.Count <= 0) { r.Add(new VerificationMessage { Message = "ALL components of type Module must have at least one Module Definition specified.", MessageType = MessageTypes.Error, MessageId = new Guid("d1373d8a-fc8f-459b-9f56-d8fd979eadac"), Rule = GetType().ToString() }); } else { foreach (XmlNode md in moduleDefinitions) { var friendlyName = md.SelectSingleNode("friendlyName"); if (friendlyName == null || string.IsNullOrEmpty(friendlyName.InnerText)) { r.Add(new VerificationMessage { Message = "ALL Module Definitions must have a friendly name specified.", MessageType = MessageTypes.Error, MessageId = new Guid("58a29289-31db-4b76-b716-1292949bf773"), Rule = GetType().ToString() }); } var moduleControls = md.SelectNodes("moduleControls/moduleControl"); if (moduleControls == null || moduleControls.Count <= 0) { r.Add(new VerificationMessage { Message = "ALL Module Definitions must have at least one module control specified.", MessageType = MessageTypes.Error, MessageId = new Guid("bc0f97b4-d0a5-409d-93b2-62543a878614"), Rule = GetType().ToString() }); } else { foreach (XmlNode ctl in moduleControls) { var controlSrc = ctl.SelectSingleNode("controlSrc"); if (controlSrc == null || string.IsNullOrEmpty(controlSrc.InnerText)) { r.Add(new VerificationMessage { Message = "ALL Module controls must have a control source specified.", MessageType = MessageTypes.Error, MessageId = new Guid("67326c8d-26c8-48db-9092-4dd405a80d05"), Rule = GetType().ToString() }); } else { var supportsPartialRendering = ctl.SelectSingleNode("supportsPartialRendering"); if (supportsPartialRendering == null || string.IsNullOrEmpty(supportsPartialRendering.InnerText)) // || supportsPartialRendering.InnerText.ToLowerInvariant() == "false") { r.Add(new VerificationMessage { Message = "A module control which does not specify supportsPartialRendering has been detected (" + controlSrc.InnerText + ").", MessageType = MessageTypes.Warning, MessageId = new Guid("fd9762a0-2f70-41bf-8b27-96ef38e5880a"), Rule = GetType().ToString() }); } var controlType = ctl.SelectSingleNode("controlType"); if (controlType == null || string.IsNullOrEmpty(controlType.InnerText)) { r.Add(new VerificationMessage { Message = "A module control which does not specify controlType has been detected (" + controlSrc.InnerText + ").", MessageType = MessageTypes.Warning, MessageId = new Guid("9a22a25c-b8b2-4ee1-9cac-0a755b494838"), Rule = GetType().ToString() }); } } } } } } } } break; case ManifestTypes.Module: var folderNodes = manifest.ManifestDoc.SelectNodes("dotnetnuke/folders/folder"); if (folderNodes == null || folderNodes.Count <= 0) { r.Add(new VerificationMessage { Message = "ALL components of type Module must have at least one folder node specified.", MessageType = MessageTypes.Error, MessageId = new Guid("6c7cb47b-2c63-43ed-8d15-ac8f7567d74b"), Rule = GetType().ToString() }); } else { foreach (XmlNode folderNode in folderNodes) { var moduleNodes = folderNode.SelectNodes("modules/module"); if (moduleNodes == null || moduleNodes.Count <= 0) { r.Add(new VerificationMessage { Message = "ALL components of type Module must have at least one module node specified.", MessageType = MessageTypes.Error, MessageId = new Guid("973f01e3-bcaf-49ee-a0e2-a143ec4ea369"), Rule = GetType().ToString() }); } else { foreach (XmlNode mn in moduleNodes) { var friendlyName = mn.SelectSingleNode("friendlyname"); if (friendlyName == null || string.IsNullOrEmpty(friendlyName.InnerText)) { r.Add(new VerificationMessage { Message = "All module definitions must have a friendly name specified.", MessageType = MessageTypes.Error, MessageId = new Guid("58a29289-31db-4b76-b716-1292949bf773"), Rule = GetType().ToString() }); } var cacheTime = mn.SelectSingleNode("cachetime"); if (cacheTime == null || string.IsNullOrEmpty(cacheTime.InnerText)) { r.Add(new VerificationMessage { Message = "Module definitions should have a cache time specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("b2f5c33e-f38e-49e9-9472-24279f27d0e6"), Rule = GetType().ToString() }); } var moduleControls = mn.SelectNodes("controls/control"); if (moduleControls == null || moduleControls.Count <= 0) { r.Add(new VerificationMessage { Message = "All module definitions must have at least one module control specified.", MessageType = MessageTypes.Error, MessageId = new Guid("bc0f97b4-d0a5-409d-93b2-62543a878614"), Rule = GetType().ToString() }); } else { foreach (XmlNode ctl in moduleControls) { var title = mn.SelectSingleNode("title"); if (title == null || string.IsNullOrEmpty(title.InnerText)) { r.Add(new VerificationMessage { Message = "All module control definitions should have a title specified.", MessageType = MessageTypes.Warning, MessageId = new Guid("84f217b5-2b6b-4154-a194-04ba9115341a"), Rule = GetType().ToString() }); } var src = ctl.SelectSingleNode("src"); if (src == null || string.IsNullOrEmpty(src.InnerText)) { r.Add(new VerificationMessage { Message = "ALL Module controls must have a source specified.", MessageType = MessageTypes.Error, MessageId = new Guid("67326c8d-26c8-48db-9092-4dd405a80d05"), Rule = GetType().ToString() }); } else { var supportsPartialRendering = ctl.SelectSingleNode("supportspartialrendering"); if (supportsPartialRendering == null || string.IsNullOrEmpty(supportsPartialRendering.InnerText)) // || supportsPartialRendering.InnerText.ToLowerInvariant() == "false") { r.Add(new VerificationMessage { Message = "A module control which does not specify supportsPartialRendering has been detected (" + src.InnerText + ").", MessageType = MessageTypes.Warning, MessageId = new Guid("fd9762a0-2f70-41bf-8b27-96ef38e5880a"), Rule = GetType().ToString() }); } var controlType = ctl.SelectSingleNode("type"); if (controlType == null || string.IsNullOrEmpty(controlType.InnerText)) { r.Add(new VerificationMessage { Message = "A module control which does not specify controlType has been detected (" + src.InnerText + ").", MessageType = MessageTypes.Warning, MessageId = new Guid("9a22a25c-b8b2-4ee1-9cac-0a755b494838"), Rule = GetType().ToString() }); } } } } } } } } break; } } catch (Exception exc) { Trace.WriteLine("There was an issue with the module node scanner", exc.Message); r.Add(new VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.ModuleNode", MessageType = MessageTypes.SystemError, MessageId = new Guid("551646a4-3a12-470f-a51d-98d2343b8de7"), Rule = GetType().ToString() }); } return(r); }
public List <Models.VerificationMessage> ApplyRule(Models.Package package, Models.Manifest manifest) { var r = new List <Models.VerificationMessage>(); try { if (manifest.ComponentNodes == null) { return(r); } foreach (XmlNode componentNode in manifest.ComponentNodes) { if (componentNode.Attributes == null) { continue; } var type = componentNode.Attributes["type"]; if (type == null || string.IsNullOrEmpty(type.Value)) { continue; } if (type.Value != "SkinObject") { continue; } var moduleControls = componentNode.SelectNodes("moduleControl"); if (moduleControls == null || moduleControls.Count <= 0) { r.Add(new Models.VerificationMessage { Message = "ALL Skin Object Definitions must have at least one module control specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("070cad12-9ee1-4453-9174-5523e81c5e73"), Rule = GetType().ToString() }); } else { foreach (XmlNode ctl in moduleControls) { var controlKey = ctl.SelectSingleNode("controlKey"); if (controlKey == null || string.IsNullOrEmpty(controlKey.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL Module controls must have a control key specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("d05bc48a-412b-4bae-905b-87c4742bed84"), Rule = GetType().ToString() }); } else { var controlSrc = ctl.SelectSingleNode("controlSrc"); if (controlSrc == null || string.IsNullOrEmpty(controlSrc.InnerText)) { r.Add(new Models.VerificationMessage { Message = "ALL Module controls must have a control source specified.", MessageType = Models.MessageTypes.Error, MessageId = new Guid("210ce338-4c0b-40f3-aefc-2688b648ef22"), Rule = GetType().ToString() }); } else { var supportsPartialRendering = ctl.SelectSingleNode("supportsPartialRendering"); if (supportsPartialRendering == null || string.IsNullOrEmpty(supportsPartialRendering.InnerText)) // || supportsPartialRendering.InnerText.ToLowerInvariant() == "false") { r.Add(new Models.VerificationMessage { Message = "A module control which does not specify supportsPartialRendering has been detected (" + controlSrc.InnerText + ").", MessageType = Models.MessageTypes.Warning, MessageId = new Guid("9e9bfd26-ac1d-46c4-bdad-7b293d1cf57d"), Rule = GetType().ToString() }); } } } } } } } catch (Exception exc) { Trace.WriteLine("There was an issue with the Skin Object node scanner", exc.Message); r.Add(new Models.VerificationMessage { Message = "An Error occurred while processing Rules.Manifest.Components.SkinObjectNode", MessageType = Models.MessageTypes.SystemError, MessageId = new Guid("bd9af978-f01e-432a-ab12-12322564182c"), Rule = GetType().ToString() }); } return(r); }