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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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()
                });
            }
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
        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);
        }
Beispiel #23
0
        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);
        }
Beispiel #24
0
        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);
        }
Beispiel #25
0
        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);
        }