public WebVirtualDirectory[] GetVirtualDirectories(string siteId)
        {
            if (!SiteExists(siteId))
            {
                return new WebVirtualDirectory[] { }
            }
            ;

            using (var srvman = GetServerManager())
            {
                var vdirs = new List <WebVirtualDirectory>();

                var iisObject = srvman.Sites[siteId];
                //
                foreach (var item in iisObject.Applications)
                {
                    // Skip root application which is web site itself
                    if (item.Path == "/")
                    {
                        continue;
                    }
                    //
                    vdirs.Add(new WebVirtualDirectory
                    {
                        Name        = ConfigurationUtility.GetNonQualifiedVirtualPath(item.Path),
                        ContentPath = item.VirtualDirectories[0].PhysicalPath
                    });
                }
                //
                return(vdirs.ToArray());
            }
        }
        public WebAppVirtualDirectory[] GetZooApplications(ServerManager srvman, string siteId)
        {
            if (!SiteExists(srvman, siteId))
            {
                return new WebAppVirtualDirectory[] { }
            }
            ;

            var vdirs     = new List <WebAppVirtualDirectory>();
            var iisObject = srvman.Sites[siteId];

            //
            foreach (var item in iisObject.Applications)
            {
                Configuration cfg = item.GetWebConfiguration();

                string location = siteId + ConfigurationUtility.GetQualifiedVirtualPath(item.Path);
                ConfigurationSection section;
                try
                {
                    section = cfg.GetSection("system.webServer/heliconZoo", location);
                }
                catch (Exception)
                {
                    // looks like Helicon Zoo is not installed, return empty array
                    return(vdirs.ToArray());
                }

                if (section.GetCollection().Count > 0)
                {
                    WebAppVirtualDirectory vdir = new WebAppVirtualDirectory
                    {
                        Name        = ConfigurationUtility.GetNonQualifiedVirtualPath(item.Path),
                        ContentPath = item.VirtualDirectories[0].PhysicalPath
                    };

                    ConfigurationElement           zooAppElement = section.GetCollection()[0];
                    ConfigurationElementCollection envColl       = zooAppElement.GetChildElement("environmentVariables").GetCollection();

                    foreach (ConfigurationElement env in  envColl)
                    {
                        if ((string)env.GetAttributeValue("name") == "CONSOLE_URL")
                        {
                            vdir.ConsoleUrl = ConfigurationUtility.GetQualifiedVirtualPath(item.Path);
                            if (!vdir.ConsoleUrl.EndsWith("/"))
                            {
                                vdir.ConsoleUrl += "/";
                            }
                            vdir.ConsoleUrl += (string)env.GetAttributeValue("value");
                        }
                    }

                    vdirs.Add(vdir);
                }
            }

            return(vdirs.ToArray());
        }
        public void SetZooEnvironmentVariable(ServerManager srvman, string siteId, string appName, string envName, string envValue)
        {
            if (!SiteExists(srvman, siteId))
            {
                return;
            }


            var iisObject = srvman.Sites[siteId];

            //
            foreach (var item in iisObject.Applications)
            {
                if (appName == ConfigurationUtility.GetNonQualifiedVirtualPath(item.Path))
                {
                    Configuration                  cfg           = item.GetWebConfiguration();
                    ConfigurationSection           section       = cfg.GetSection("system.webServer/heliconZoo");
                    ConfigurationElement           zooAppElement = section.GetCollection()[0];
                    ConfigurationElementCollection envColl       = zooAppElement.GetChildElement("environmentVariables").GetCollection();

                    //remove all CONSOLE_URLs
                    for (int i = 0; i < envColl.Count;)
                    {
                        if (String.Compare(envColl[i].GetAttributeValue("name").ToString(), envName, StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            envColl.RemoveAt(i);
                        }
                        else
                        {
                            ++i;
                        }
                    }

                    // do not set empty value
                    if (!string.IsNullOrEmpty(envValue))
                    {
                        ConfigurationElement el = envColl.CreateElement();
                        el.SetAttributeValue("name", envName);
                        el.SetAttributeValue("value", envValue);
                        envColl.Add(el);
                    }


                    srvman.CommitChanges();
                }
            }
        }
        public WebVirtualDirectory[] GetVirtualDirectories(ServerManager srvman, string siteId)
        {
            if (!SiteExists(srvman, siteId))
            {
                // if site does not exist return for add new directory
                return new WebVirtualDirectory[] { }
            }
            ;
            // Create site variable to work with
            Site iisSite = srvman.Sites[siteId];
            // create variable for directory list
            var vdirs = new List <WebVirtualDirectory>();

            // Make sure site ID exists
            if (iisSite != null)
            {
                // Grab site root Application not sub applications
                Application application = iisSite.Applications["/"];

                if (application != null)
                {
                    // Make sure we grab only virtual directories, Not apps
                    foreach (VirtualDirectory directory in application.VirtualDirectories)
                    {
                        // Do not show Website it self as Virtual Directory
                        if (directory.Path == "/")
                        {
                            continue;
                        }
                        // Grab directory Information
                        vdirs.Add(new WebVirtualDirectory
                        {
                            Name        = ConfigurationUtility.GetNonQualifiedVirtualPath(directory.Path),
                            ContentPath = directory.PhysicalPath,
                        });
                    }
                }
            }
            // Virtual directories collection ready for view
            return(vdirs.ToArray());
        }