public void GetCustomErrors(ServerManager srvman, WebVirtualDirectory virtualDir)
		{
			var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
			//
			var httpErrorsSection = config.GetSection(Constants.HttpErrorsSection);

		    virtualDir.ErrorMode = (HttpErrorsMode)httpErrorsSection.GetAttributeValue("errorMode");
            virtualDir.ExistingResponse = (HttpErrorsExistingResponse)httpErrorsSection.GetAttributeValue("existingResponse");
			//
			var errorsCollection = httpErrorsSection.GetCollection();
			//
			var errors = new List<HttpError>();
			//
			foreach (var item in errorsCollection)
			{
				var item2Get = GetHttpError(item, virtualDir);
				//
				if (item2Get == null)
					continue;
				//
				errors.Add(item2Get);
			}
			//
			virtualDir.HttpErrors = errors.ToArray();
		}
        public void SaveWebItem(WebVirtualDirectory item)
        {
            item.ContentPath            = fileLookup.SelectedFile;
            item.RedirectExactUrl       = chkRedirectExactUrl.Checked;
            item.RedirectDirectoryBelow = chkRedirectDirectoryBelow.Checked;
            item.RedirectPermanent      = chkRedirectPermanent.Checked;

            item.EnableDirectoryBrowsing  = chkDirectoryBrowsing.Checked;
            item.EnableParentPaths        = chkParentPaths.Checked;
            item.EnableWritePermissions   = chkWrite.Checked;
            item.DedicatedApplicationPool = chkDedicatedPool.Checked;

            item.EnableAnonymousAccess       = chkAuthAnonymous.Checked;
            item.EnableWindowsAuthentication = chkAuthWindows.Checked;
            item.EnableBasicAuthentication   = chkAuthBasic.Checked;

            // default documents
            item.DefaultDocs = String.Join(",", Utils.ParseDelimitedString(txtDefaultDocs.Text, '\n', '\r', ';', ','));

            // redirection
            item.HttpRedirect = rbLocationRedirect.Checked ? txtRedirectUrl.Text : "";

            // set app pool
            item.ApplicationPool = (string)ViewState["ApplicationPool"];
        }
 public void GetCustomErrors(WebVirtualDirectory virtualDir)
 {
     //
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
         //
         var httpErrorsSection = config.GetSection(Constants.HttpErrorsSection);
         //
         var errorsCollection = httpErrorsSection.GetCollection();
         //
         var errors = new List <HttpError>();
         //
         foreach (var item in errorsCollection)
         {
             var item2Get = GetHttpError(item, virtualDir);
             //
             if (item2Get == null)
             {
                 continue;
             }
             //
             errors.Add(item2Get);
         }
         //
         virtualDir.HttpErrors = errors.ToArray();
     }
 }
        public string GetPhysicalPath(WebVirtualDirectory virtualDir)
        {
            using (var srvman = GetServerManager())
            {
                string siteId = (virtualDir.ParentSiteName == null)
                                        ? virtualDir.Name : virtualDir.ParentSiteName;
                //
                var iisObject = srvman.Sites[siteId];

                if (iisObject == null)
                {
                    return(null);
                }

                //
                var iisAppObject = iisObject.Applications[virtualDir.VirtualPath];

                if (iisAppObject == null)
                {
                    return(null);
                }

                //
                var iisDirObject = iisAppObject.VirtualDirectories["/"];

                if (iisDirObject == null)
                {
                    return(null);
                }

                //
                return(iisDirObject.PhysicalPath);
            }
        }
		public void GetCustomHttpHeaders(WebVirtualDirectory virtualDir)
		{
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var httpProtocolSection = config.GetSection(Constants.HttpProtocolSection, virtualDir.FullQualifiedPath);
				//
				if (httpProtocolSection == null)
					return;
				//
				var headersCollection = httpProtocolSection.GetCollection("customHeaders");
				//
				var headers = new List<HttpHeader>();
				//
				foreach (var item in headersCollection)
				{
					var item2Get = GetCustomHttpHeader(item);
					//
					if (item2Get == null)
						continue;
					//
					headers.Add(item2Get);
				}
				//
				virtualDir.HttpHeaders = headers.ToArray();
			}
		}
        private HttpError GetHttpError(ConfigurationElement element, WebVirtualDirectory virtualDir)
        {
            if (element == null || virtualDir == null)
            {
                return(null);
            }
            // skip inherited http errors
            if (!element.IsLocallyStored)
            {
                return(null);
            }
            //
            var error = new HttpError
            {
                ErrorCode    = Convert.ToString(element.GetAttributeValue(StatusCodeAttribute)),
                ErrorSubcode = Convert.ToString(element.GetAttributeValue(SubStatusCodeAttribute)),
                ErrorContent = Convert.ToString(element.GetAttributeValue(PathAttribute)),
                HandlerType  = Enum.GetName(typeof(HttpErrorResponseMode), element.GetAttributeValue(ResponseModeAttribute))
            };

            // Make error path relative to the virtual directory's root folder
            if (error.HandlerType.Equals("File") &&          // 0 is supposed to be File
                error.ErrorContent.Length > virtualDir.ContentPath.Length)
            {
                error.ErrorContent = error.ErrorContent.Substring(virtualDir.ContentPath.Length);
            }
            //
            return(error);
        }
Exemplo n.º 7
0
        private void ToggleWmSvcConnectionHint(WebVirtualDirectory item)
        {
            bool wmcSvcSiteEnabled = item.GetValue <bool>(WebSite.WmSvcSiteEnabled);

            //
            if (wmcSvcSiteEnabled)
            {
                //
                string wmSvcServicePort = item.GetValue <String>(WebSite.WmSvcServicePort);
                string wmSvcServiceUrl  = item.GetValue <String>(WebSite.WmSvcServiceUrl);
                //
                if (!String.IsNullOrEmpty(wmSvcServiceUrl))
                {
                    if (!String.IsNullOrEmpty(wmSvcServicePort) &&
                        !String.Equals(wmSvcServicePort, WebSite.WmSvcDefaultPort))
                    {
                        lclWmSvcConnectionHint.Text = String.Format(
                            lclWmSvcConnectionHint.Text, String.Format("{0}:{1}", wmSvcServiceUrl, wmSvcServicePort), item.Name);
                    }
                    else
                    {
                        lclWmSvcConnectionHint.Text = String.Format(
                            lclWmSvcConnectionHint.Text, wmSvcServiceUrl, item.Name);
                    }
                }
                else
                {
                    lclWmSvcConnectionHint.Visible = false;
                }
            }
        }
 /// <summary>
 /// Loads available mime maps into supplied virtual iisDirObject description.
 /// </summary>
 /// <param name="vdir">Virtual iisDirObject description.</param>
 public void GetMimeMaps(WebVirtualDirectory virtualDir)
 {
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
         //
         var section = config.GetSection(Constants.StaticContentSection);
         //
         var mappings = new List <MimeMap>();
         //
         foreach (var item in section.GetCollection())
         {
             var item2Get = GetMimeMap(item);
             //
             if (item2Get == null)
             {
                 continue;
             }
             //
             mappings.Add(item2Get);
         }
         //
         virtualDir.MimeMaps = mappings.ToArray();
     }
 }
 public void UpdateVirtualDirectory(WebVirtualDirectory virtualDir)
 {
     // ensure physical site content path
     if (String.IsNullOrEmpty(virtualDir.ContentPath))
     {
         throw new Exception("VirtualDirContentPathEmpty");
     }
     //
     using (var srvman = GetServerManager())
     {
         // Obtain parent web site
         var webSite = srvman.Sites[virtualDir.ParentSiteName];
         // Ensure web site has been found
         if (webSite == null)
         {
             throw new ApplicationException("WebSiteNotFound");
         }
         //
         var v_dir = webSite.Applications[virtualDir.VirtualPath];
         v_dir.ApplicationPoolName = virtualDir.ApplicationPool;
         v_dir.VirtualDirectories[0].PhysicalPath = virtualDir.ContentPath;
         //
         srvman.CommitChanges();
     }
 }
 public void GetCustomHttpHeaders(WebVirtualDirectory virtualDir)
 {
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetApplicationHostConfiguration();
         //
         var httpProtocolSection = config.GetSection(Constants.HttpProtocolSection, virtualDir.FullQualifiedPath);
         //
         if (httpProtocolSection == null)
         {
             return;
         }
         //
         var headersCollection = httpProtocolSection.GetCollection("customHeaders");
         //
         var headers = new List <HttpHeader>();
         //
         foreach (var item in headersCollection)
         {
             var item2Get = GetCustomHttpHeader(item);
             //
             if (item2Get == null)
             {
                 continue;
             }
             //
             headers.Add(item2Get);
         }
         //
         virtualDir.HttpHeaders = headers.ToArray();
     }
 }
		public void GetCustomErrors(WebVirtualDirectory virtualDir)
		{
			//
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var httpErrorsSection = config.GetSection(Constants.HttpErrorsSection);
				//
				var errorsCollection = httpErrorsSection.GetCollection();
				//
				var errors = new List<HttpError>();
				//
				foreach (var item in errorsCollection)
				{
					var item2Get = GetHttpError(item, virtualDir);
					//
					if (item2Get == null)
						continue;
					//
					errors.Add(item2Get);
				}
				//
				virtualDir.HttpErrors = errors.ToArray();
			}
		}
Exemplo n.º 12
0
        private void SaveVirtualDir()
        {
            if (!Page.IsValid)
            {
                return;
            }

            // load original web site item
            WebVirtualDirectory vdir = ES.Services.WebServers.GetVirtualDirectory(PanelRequest.ItemID, PanelRequest.VirtDir);

            // other controls
            //webSitesExtensionsControl.SaveWebItem(vdir);
            VirtualDirectoryHomeFolderControl.SaveWebItem(vdir);
            //webSitesMimeTypesControl.SaveWebItem(vdir);
            //webSitesCustomHeadersControl.SaveWebItem(vdir);
            //webSitesCustomErrorsControl.SaveWebItem(vdir);

            // update web site
            try
            {
                int result = ES.Services.WebServers.UpdateVirtualDirectory(PanelRequest.ItemID, vdir);
                if (result < 0)
                {
                    ShowResultMessage(result);
                    return;
                }
            }
            catch (Exception ex)
            {
                ShowErrorMessage("WEB_UPDATE_VDIR", ex);
                return;
            }

            ReturnBack();
        }
 public WebVirtualDirectory GetVirtualDirectory(string siteId, string directoryName)
 {
     //
     if (String.IsNullOrEmpty(siteId))
     {
         throw new ArgumentNullException("siteId");
     }
     //
     if (String.IsNullOrEmpty(directoryName))
     {
         throw new ArgumentNullException("directoryName");
     }
     //
     if (!SiteExists(siteId))
     {
         return(null);
     }
     //
     using (var srvman = GetServerManager())
     {
         var site = srvman.Sites[siteId];
         //
         var vdir = new WebVirtualDirectory
         {
             Name           = directoryName,
             ParentSiteName = siteId
         };
         // We assume that we create only applications.
         vdir.ApplicationPool = site.Applications[vdir.VirtualPath].ApplicationPoolName;
         //
         return(vdir);
     }
 }
Exemplo n.º 14
0
        public WebVirtualDirectory GetVirtualDirectory(string siteId, string directoryName)
        {
            //
            if (String.IsNullOrEmpty(siteId))
            {
                throw new ArgumentNullException("siteId");
            }
            //
            if (String.IsNullOrEmpty(directoryName))
            {
                throw new ArgumentNullException("directoryName");
            }
            //
            using (var iisManager = GetServerManager())
            {
                Application iisSiteObject = iisManager.Sites[siteId].Applications["/"];
                if (!SiteExists(iisManager, siteId))
                {
                    return(null);
                }

                var vdir = new WebVirtualDirectory
                {
                    Name           = directoryName,
                    ParentSiteName = siteId
                };

                return(vdir);
            }
        }
Exemplo n.º 15
0
        public void ConfigureConnectAsFeature(WebVirtualDirectory virtualDir)
        {
            // read website
            using (var srvman = GetServerManager())
            {
                var webSite = String.IsNullOrEmpty(virtualDir.ParentSiteName) ? srvman.Sites[virtualDir.Name] : srvman.Sites[virtualDir.ParentSiteName];
                //
                if (webSite != null)
                {
                    // get root iisAppObject
                    var webApp = webSite.Applications[virtualDir.VirtualPath];
                    //
                    if (webApp != null)
                    {
                        var vdir = webApp.VirtualDirectories["/"];
                        //
                        if (vdir != null)
                        {
                            vdir.LogonMethod = AuthenticationLogonMethod.ClearText;
                            //

                            vdir.UserName = virtualDir.AnonymousUsername;
                            vdir.Password = virtualDir.AnonymousUserPassword;

                            //
                            srvman.CommitChanges();
                        }
                    }
                }
            }
        }
Exemplo n.º 16
0
        public void DeleteVirtualDirectory(WebVirtualDirectory virtualDir)
        {
            using (var iisManager = GetServerManager())
            {
                if (!SiteExists(iisManager, virtualDir.ParentSiteName))
                {
                    return;
                }

                Site iisSiteRoot = iisManager.Sites[virtualDir.ParentSiteName];
                if (iisSiteRoot != null)
                {
                    Application application = iisSiteRoot.Applications["/"];
                    if (application != null)
                    {
                        VirtualDirectory directory = application.VirtualDirectories[virtualDir.VirtualPath];
                        if (directory != null)
                        {
                            //
                            application.VirtualDirectories.Remove(directory);
                        }
                    }
                }
                //
                iisManager.CommitChanges();
            }
        }
Exemplo n.º 17
0
        public void GetCustomErrors(ServerManager srvman, WebVirtualDirectory virtualDir)
        {
            var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
            //
            var httpErrorsSection = config.GetSection(Constants.HttpErrorsSection);

            virtualDir.ErrorMode        = (HttpErrorsMode)httpErrorsSection.GetAttributeValue("errorMode");
            virtualDir.ExistingResponse = (HttpErrorsExistingResponse)httpErrorsSection.GetAttributeValue("existingResponse");
            //
            var errorsCollection = httpErrorsSection.GetCollection();
            //
            var errors = new List <HttpError>();

            //
            foreach (var item in errorsCollection)
            {
                var item2Get = GetHttpError(item, virtualDir);
                //
                if (item2Get == null)
                {
                    continue;
                }
                //
                errors.Add(item2Get);
            }
            //
            virtualDir.HttpErrors = errors.ToArray();
        }
 internal void RemoveScriptMaps(WebVirtualDirectory virtualDir, IEnumerable <string> extensions, string processor)
 {
     if (String.IsNullOrEmpty(processor))
     {
         return;
     }
     //
     if (virtualDir == null)
     {
         return;
     }
     //
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetApplicationHostConfiguration();
         //
         var handlersSection    = config.GetSection(Constants.HandlersSection, virtualDir.FullQualifiedPath);
         var handlersCollection = handlersSection.GetCollection();
         //
         foreach (string extension in extensions)
         {
             var extParts        = extension.Split(',');
             var path            = extParts[0];
             var existentHandler = FindHandlerAction(handlersCollection, path, processor);
             // remove handler if exists
             if (existentHandler != null)
             {
                 handlersCollection.Remove(existentHandler);
             }
         }
         //
         srvman.CommitChanges();
     }
 }
        public void SetCustomErrors(WebVirtualDirectory virtualDir)
        {
            #region Revert to parent settings (inherited)
            using (var srvman = GetServerManager())
            {
                var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
                //
                var section = config.GetSection(Constants.HttpErrorsSection);
                //
                section.RevertToParent();
                //
                srvman.CommitChanges();
            }
            #endregion

            // Http errors list is either empty or not set so defaults to the parent
            if (virtualDir.HttpErrors == null || virtualDir.HttpErrors.Length == 0)
            {
                return;
            }

            #region Put the change in effect
            using (var srvman = GetServerManager())
            {
                var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
                //
                var section = config.GetSection(Constants.HttpErrorsSection);
                //
                var errorsCollection = section.GetCollection();
                //
                errorsCollection.Clear();
                //
                foreach (var item in virtualDir.HttpErrors)
                {
                    int indexOf = FindHttpError(errorsCollection, item);
                    // Just update the element attributes - IIS 7 API will do the rest
                    if (indexOf > -1)
                    {
                        var item2Renew = errorsCollection[indexOf];
                        //
                        FillConfigurationElementWithData(item2Renew, item, virtualDir);
                        //
                        continue;
                    }
                    //
                    var item2Add = CreateHttpError(errorsCollection, item, virtualDir);
                    //
                    if (item2Add == null)
                    {
                        continue;
                    }
                    //
                    errorsCollection.Add(item2Add);
                }
                //
                srvman.CommitChanges();
            }
            #endregion
        }
        public void BindWebItem(WebVirtualDirectory item)
        {
            IIs7 = item.IIs7;

            // bind data
            gvErrorPages.DataSource = item.HttpErrors;
            gvErrorPages.DataBind();
        }
        public void SaveWebItem(WebVirtualDirectory item)
        {
            item.ContentPath = fileLookup.SelectedFile;

            item.EnableAnonymousAccess       = chkAuthAnonymous.Checked;
            item.EnableWindowsAuthentication = chkAuthWindows.Checked;
            item.EnableBasicAuthentication   = chkAuthBasic.Checked;
        }
        public void GetAuthenticationSettings(ServerManager srvman, WebVirtualDirectory virtualDir)
        {
			var config = srvman.GetApplicationHostConfiguration();
			//
			var section = config.GetSection(Constants.BasicAuthenticationSection, virtualDir.FullQualifiedPath);
			//
			virtualDir.EnableBasicAuthentication = Convert.ToBoolean(section.GetAttributeValue(EnabledAttribute));
        }
Exemplo n.º 23
0
        public WebVirtualDirectory[] GetZooApplications(ServerManager srvman, string siteId)
        {
            if (!SiteExists(srvman, siteId))
            {
                return new WebVirtualDirectory[] { }
            }
            ;

            var vdirs     = new List <WebVirtualDirectory>();
            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)
                {
                    WebVirtualDirectory vdir = new WebVirtualDirectory
                    {
                        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 SaveWebItem(WebVirtualDirectory item)
 {
     item.AspInstalled    = chkAsp.Checked;
     item.AspNetInstalled = ddlAspNet.SelectedValue;
     item.PhpInstalled    = ddlPhp.SelectedValue;
     item.PerlInstalled   = chkPerl.Checked;
     item.PythonInstalled = chkPython.Checked;
     item.CgiBinInstalled = chkCgiBin.Checked;
 }
		public void SetCustomHttpHeaders(WebVirtualDirectory virtualDir)
		{
			#region Revert to parent settings (inherited)
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var section = config.GetSection(Constants.HttpProtocolSection, virtualDir.FullQualifiedPath);
				//
				section.RevertToParent();
				//
				srvman.CommitChanges();
			} 
			#endregion

			// Ensure virtual directory has Custom HTTP Headers set
			if (virtualDir.HttpHeaders == null || virtualDir.HttpHeaders.Length == 0)
				return;

			#region Put the change in effect
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var section = config.GetSection(Constants.HttpProtocolSection, virtualDir.FullQualifiedPath);
				//
				var headersCollection = section.GetCollection("customHeaders");
				// Clean the collection to avoid duplicates collision on the root and nested levels
				headersCollection.Clear();
				// Iterate over custom http headers are being set
				foreach (var item in virtualDir.HttpHeaders)
				{
					// Trying to find out whether the header is being updated
					int indexOf = FindCustomHttpHeader(headersCollection, item);
					//
					if (indexOf > -1)
					{
						// Obtain the custom http header to update
						var item2Renew = headersCollection[indexOf];
						// Apply changes to the element
						FillConfigurationElementWithData(item2Renew, item);
						// Loop the next item
						continue;
					}
					// Creating a new custom http header
					var item2Add = CreateCustomHttpHeader(headersCollection, item);
					// Checking results of the create operation
					if (item2Add == null)
						continue;
					// Adding the newly created custom http header
					headersCollection.Add(item2Add);
				}
				// Commit changes
				srvman.CommitChanges();
			} 
			#endregion
		}
Exemplo n.º 26
0
        public void GetAuthenticationSettings(ServerManager srvman, WebVirtualDirectory virtualDir)
        {
            var config = srvman.GetApplicationHostConfiguration();
            //
            var section = config.GetSection(Constants.BasicAuthenticationSection, virtualDir.FullQualifiedPath);

            //
            virtualDir.EnableBasicAuthentication = Convert.ToBoolean(section.GetAttributeValue(EnabledAttribute));
        }
        /// <summary>
        /// Saves mime types from virtual iisDirObject description into configuration file.
        /// </summary>
        /// <param name="vdir">Virtual iisDirObject description.</param>
        public void SetMimeMaps(WebVirtualDirectory virtualDir)
        {
            #region Revert to parent settings (inherited)
            using (var srvman = GetServerManager())
            {
                var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
                //
                var section = config.GetSection(Constants.StaticContentSection);
                //
                section.RevertToParent();
                //
                srvman.CommitChanges();
            }
            #endregion

            // Ensure mime maps are set
            if (virtualDir.MimeMaps == null || virtualDir.MimeMaps.Length == 0)
            {
                return;
            }

            #region Put the change in effect
            using (var srvman = GetServerManager())
            {
                var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
                //
                var section = config.GetSection(Constants.StaticContentSection);
                //
                var typesCollection = section.GetCollection();
                //
                foreach (var item in virtualDir.MimeMaps)
                {
                    // Make sure mime-type mapping file extension is formatted exactly as it should be
                    if (!item.Extension.StartsWith("."))
                    {
                        item.Extension = "." + item.Extension;
                    }
                    //
                    int indexOf = FindMimeMap(typesCollection, item);
                    //
                    if (indexOf > -1)
                    {
                        var item2Renew = typesCollection[indexOf];
                        //
                        FillConfigurationElementWithData(item2Renew, item);
                        //
                        continue;
                    }
                    //
                    typesCollection.Add(CreateMimeMap(typesCollection, item));
                }
                //
                srvman.CommitChanges();
            }
            #endregion
        }
Exemplo n.º 28
0
        private void BindWebPublishingProfileFtpAccounts(WebVirtualDirectory item)
        {
            var ftpAccounts = ES.Services.FtpServers.GetFtpAccounts(PanelSecurity.PackageId, false);

            //
            MyFtpAccountList.DataSource = Array.FindAll(ftpAccounts, x => x.Folder.Equals(item.ContentPath));
            MyFtpAccountList.DataBind();
            //
            MyFtpAccountList.Items.Insert(0, new ListItem(GetLocalizedString("WebPublishing.ChooseFtpAccountPrompt"), String.Empty));
        }
		public void SetCustomErrors(WebVirtualDirectory virtualDir)
		{
			#region Revert to parent settings (inherited)
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.HttpErrorsSection);
				//
				section.RevertToParent();
				//
				srvman.CommitChanges();
			} 
			#endregion

			// Http errors list is either empty or not set so defaults to the parent
			if (virtualDir.HttpErrors == null || virtualDir.HttpErrors.Length == 0)
				return;

			#region Put the change in effect
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.HttpErrorsSection);
				//
				var errorsCollection = section.GetCollection();
				//
				errorsCollection.Clear();
				//
				foreach (var item in virtualDir.HttpErrors)
				{
					int indexOf = FindHttpError(errorsCollection, item);
					// Just update the element attributes - IIS 7 API will do the rest
					if (indexOf > -1)
					{
						var item2Renew = errorsCollection[indexOf];
						//
						FillConfigurationElementWithData(item2Renew, item, virtualDir);
						//
						continue;
					}
					//
					var item2Add = CreateHttpError(errorsCollection, item, virtualDir);
					//
					if (item2Add == null)
						continue;
					//
					errorsCollection.Add(item2Add);
				}
				//
				srvman.CommitChanges();
			} 
			#endregion
		}
        public void BindWebItem(int packageId, WebVirtualDirectory item)
        {
            fileLookup.PackageId    = item.PackageId;
            fileLookup.SelectedFile = item.ContentPath;

            string resSuffix = item.IIs7 ? "IIS7" : "";

            chkRedirectExactUrl.Text       = GetLocalizedString("chkRedirectExactUrl.Text" + resSuffix);
            chkRedirectDirectoryBelow.Text = GetLocalizedString("chkRedirectDirectoryBelow.Text" + resSuffix);
            chkRedirectPermanent.Text      = GetLocalizedString("chkRedirectPermanent.Text" + resSuffix);

            chkRedirectExactUrl.Checked       = item.RedirectExactUrl;
            chkRedirectDirectoryBelow.Checked = item.RedirectDirectoryBelow;
            chkRedirectPermanent.Checked      = item.RedirectPermanent;

            chkDirectoryBrowsing.Checked = item.EnableDirectoryBrowsing;
            chkParentPaths.Checked       = item.EnableParentPaths;
            chkWrite.Checked             = item.EnableWritePermissions;

            chkDedicatedPool.Checked = item.DedicatedApplicationPool;
            chkDedicatedPool.Enabled = !item.SharePointInstalled;

            chkAuthAnonymous.Checked = item.EnableAnonymousAccess;
            chkAuthWindows.Checked   = item.EnableWindowsAuthentication;
            chkAuthBasic.Checked     = item.EnableBasicAuthentication;

            // default documents
            txtDefaultDocs.Text = String.Join("\n", item.DefaultDocs.Split(',', ';'));

            // redirection
            txtRedirectUrl.Text = item.HttpRedirect;
            bool redirectionEnabled = !String.IsNullOrEmpty(item.HttpRedirect);

            rbLocationFolder.Checked   = !redirectionEnabled;
            rbLocationRedirect.Checked = redirectionEnabled;
            valRedirection.Enabled     = redirectionEnabled;

            // store app pool value
            ViewState["ApplicationPool"] = item.ApplicationPool;

            ToggleLocationControls();

            // toggle controls by quotas
            fileLookup.Enabled         = PackagesHelper.CheckGroupQuotaEnabled(packageId, ResourceGroups.Web, Quotas.WEB_HOMEFOLDERS);
            rbLocationRedirect.Visible = PackagesHelper.CheckGroupQuotaEnabled(packageId, ResourceGroups.Web, Quotas.WEB_REDIRECTIONS);
            bool customSecurity = PackagesHelper.CheckGroupQuotaEnabled(packageId, ResourceGroups.Web, Quotas.WEB_SECURITY);

            chkWrite.Visible = customSecurity;
            // hide authentication options if not allowed
            pnlCustomAuth.Visible = customSecurity;
            //
            chkDedicatedPool.Visible    = PackagesHelper.CheckGroupQuotaEnabled(packageId, ResourceGroups.Web, Quotas.WEB_APPPOOLS);
            pnlDefaultDocuments.Visible = PackagesHelper.CheckGroupQuotaEnabled(packageId, ResourceGroups.Web, Quotas.WEB_DEFAULTDOCS);
        }
Exemplo n.º 31
0
        public string GetPhysicalPathNonApp(ServerManager iisManager, WebVirtualDirectory virtualDir)
        {
            string siteId = (virtualDir.ParentSiteName == null)
                ? virtualDir.Name : virtualDir.ParentSiteName;
            //
            var iisSite = iisManager.Sites[siteId];

            var applicationRoot = iisSite.Applications["/"];
            var virtualRoot     = applicationRoot.VirtualDirectories[virtualDir.VirtualPath];

            return(virtualRoot.PhysicalPath);
        }
 internal ConfigurationElementCollection GetHandlers(WebVirtualDirectory virtualDir)
 {
     //
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
         //
         var section = config.GetSection(Constants.HandlersSection);
         //
         return(section.GetCollection());
     }
 }
		/// <summary>
		/// Saves mime types from virtual iisDirObject description into configuration file.
		/// </summary>
		/// <param name="vdir">Virtual iisDirObject description.</param>
		public void SetMimeMaps(WebVirtualDirectory virtualDir)
		{
			#region Revert to parent settings (inherited)
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.StaticContentSection);
				//
				section.RevertToParent();
				//
				srvman.CommitChanges();
			} 
			#endregion

			// Ensure mime maps are set
			if (virtualDir.MimeMaps == null || virtualDir.MimeMaps.Length == 0)
				return;

			#region Put the change in effect
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.StaticContentSection);
				//
				var typesCollection = section.GetCollection();
				//
				foreach (var item in virtualDir.MimeMaps)
				{
					// Make sure mime-type mapping file extension is formatted exactly as it should be
					if (!item.Extension.StartsWith("."))
						item.Extension = "." + item.Extension;
					//
					int indexOf = FindMimeMap(typesCollection, item);
					//
					if (indexOf > -1)
					{
						var item2Renew = typesCollection[indexOf];
						//
						FillConfigurationElementWithData(item2Renew, item);
						//
						continue;
					}
					//
					typesCollection.Add(CreateMimeMap(typesCollection, item));
				}
				//
				srvman.CommitChanges();
			}
			#endregion
		}
 public void SetAuthenticationSettings(WebVirtualDirectory virtualDir)
 {
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetApplicationHostConfiguration();
         //
         var section = config.GetSection(Constants.BasicAuthenticationSection, virtualDir.FullQualifiedPath);
         //
         section.SetAttributeValue(EnabledAttribute, virtualDir.EnableBasicAuthentication);
         //
         srvman.CommitChanges();
     }
 }
Exemplo n.º 35
0
 public void SetClassicAspSettings(WebVirtualDirectory virtualDir)
 {
     using (var srvman = GetServerManager())
     {
         var config = srvman.GetApplicationHostConfiguration();
         //
         var aspSection = config.GetSection(SectionName, virtualDir.FullQualifiedPath);
         //
         aspSection.SetAttributeValue(EnableParentPathsAttribute, virtualDir.EnableParentPaths);
         //
         srvman.CommitChanges();
     }
 }
        public void SetAuthenticationSettings(WebVirtualDirectory virtualDir)
        {
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var section = config.GetSection(Constants.BasicAuthenticationSection, virtualDir.FullQualifiedPath);
				//
				section.SetAttributeValue(EnabledAttribute, virtualDir.EnableBasicAuthentication);
				//
				srvman.CommitChanges();
			}
        }
        public void SetClassicAspSettings(WebVirtualDirectory virtualDir)
        {
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var aspSection = config.GetSection(SectionName, virtualDir.FullQualifiedPath);
				//
				aspSection.SetAttributeValue(EnableParentPathsAttribute, virtualDir.EnableParentPaths);
				//
				srvman.CommitChanges();
			}
        }
Exemplo n.º 38
0
        private void ToggleWmSvcControls(WebVirtualDirectory item)
        {
            if (!item.GetValue <bool>(WebVirtualDirectory.WmSvcAvailable))
            {
                pnlWmcSvcManagement.Visible = false;
                pnlNotInstalled.Visible     = true;
                //
                return;
            }
            //
            pnlWmcSvcManagement.Visible = true;
            pnlNotInstalled.Visible     = false;

            //
            string wmSvcAccountName  = item.GetValue <string>(WebVirtualDirectory.WmSvcAccountName);
            bool   wmcSvcSiteEnabled = item.GetValue <bool>(WebVirtualDirectory.WmSvcSiteEnabled);

            btnWmSvcSiteEnable.Visible  = true;
            txtWmSvcAccountName.Visible = true;

            //
            txtWmSvcAccountPassword.Text = txtWmSvcAccountPassword.Attributes["value"] = String.Empty;
            //
            txtWmSvcAccountPasswordC.Text = txtWmSvcAccountPasswordC.Attributes["value"] = String.Empty;

            // Disable edit mode if WmSvc account name is set
            if (wmcSvcSiteEnabled)
            {
                btnWmSvcSiteEnable.Visible  = false;
                txtWmSvcAccountName.Visible = false;

                //
                txtWmSvcAccountPassword.Text = PasswordControl.EMPTY_PASSWORD;
                txtWmSvcAccountPassword.Attributes["value"] = PasswordControl.EMPTY_PASSWORD;

                //
                txtWmSvcAccountPasswordC.Text = PasswordControl.EMPTY_PASSWORD;
                txtWmSvcAccountPasswordC.Attributes["value"] = PasswordControl.EMPTY_PASSWORD;
            }

            //
            litWmSvcAccountName.Visible  = wmcSvcSiteEnabled;
            btnWmSvcSiteDisable.Visible  = wmcSvcSiteEnabled;
            btnWmSvcChangePassw.Visible  = wmcSvcSiteEnabled;
            pnlWmSvcSiteDisabled.Visible = !wmcSvcSiteEnabled;
            pnlWmSvcSiteEnabled.Visible  = wmcSvcSiteEnabled;

            //
            txtWmSvcAccountName.Text = wmSvcAccountName;
            litWmSvcAccountName.Text = wmSvcAccountName;
        }
Exemplo n.º 39
0
 public void UpdateVirtualDirectory(string siteId, WebVirtualDirectory directory)
 {
     try
     {
         Log.WriteStart("'{0}' UpdateVirtualDirectory", ProviderSettings.ProviderName);
         WebProvider.UpdateVirtualDirectory(siteId, directory);
         Log.WriteEnd("'{0}' UpdateVirtualDirectory", ProviderSettings.ProviderName);
     }
     catch (Exception ex)
     {
         Log.WriteError(String.Format("'{0}' UpdateVirtualDirectory", ProviderSettings.ProviderName), ex);
         throw;
     }
 }
		public void LoadHttpRedirectSettings(WebVirtualDirectory virtualDir)
		{
			using (var srvman = GetServerManager())
			{
				// Load web site configuration
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				// Load corresponding section
				var section = config.GetSection(Constants.HttpRedirectSection);
				//
				if (!Convert.ToBoolean(section.GetAttributeValue(EnabledAttribute)))
					return;
				//
				virtualDir.RedirectExactUrl = Convert.ToBoolean(section.GetAttributeValue(ExactDestinationAttribute));
				virtualDir.RedirectDirectoryBelow = Convert.ToBoolean(section.GetAttributeValue(ChildOnlyAttribute));
				virtualDir.HttpRedirect = Convert.ToString(section.GetAttributeValue(DestinationAttribute));
				virtualDir.RedirectPermanent = String.Equals("301", Convert.ToString(section.GetAttributeValue(HttpResponseStatusAttribute)));
			}			
		}
		public void SetHttpRedirectSettings(WebVirtualDirectory virtualDir)
		{
			#region Revert to parent settings (inherited)
			using (var srvman = GetServerManager())
			{
				// Load web site configuration
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				// Load corresponding section
				var section = config.GetSection(Constants.HttpRedirectSection);
				//
				section.RevertToParent();
				//
				srvman.CommitChanges();
			} 
			#endregion

			// HttpRedirect property is not specified so defaults to the parent
			if (String.IsNullOrEmpty(virtualDir.HttpRedirect))
				return;

			#region Put changes in effect
			using (var srvman = GetServerManager())
			{
				// Load web site configuration
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				// Load corresponding section
				var section = config.GetSection(Constants.HttpRedirectSection);
				// Enable http redirect feature
				section.SetAttributeValue(EnabledAttribute, true);
				section.SetAttributeValue(ExactDestinationAttribute, virtualDir.RedirectExactUrl);
				section.SetAttributeValue(DestinationAttribute, virtualDir.HttpRedirect);
				section.SetAttributeValue(ChildOnlyAttribute, virtualDir.RedirectDirectoryBelow);
				// Configure HTTP Response Status
				if (virtualDir.RedirectPermanent)
					section.SetAttributeValue(HttpResponseStatusAttribute, "Permanent");
				else
					section.SetAttributeValue(HttpResponseStatusAttribute, "Found");
				//
				srvman.CommitChanges();
			} 
			#endregion
		}
		/// <summary>
		/// Loads available mime maps into supplied virtual iisDirObject description.
		/// </summary>
		/// <param name="vdir">Virtual iisDirObject description.</param>
		public void GetMimeMaps(ServerManager srvman, WebVirtualDirectory virtualDir)
		{
			var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
			//
			var section = config.GetSection(Constants.StaticContentSection);
			//
			var mappings = new List<MimeMap>();
			//
			foreach (var item in section.GetCollection())
			{
				var item2Get = GetMimeMap(item);
				//
				if (item2Get == null)
					continue;
				//
				mappings.Add(item2Get);
			}
			//
			virtualDir.MimeMaps = mappings.ToArray();
		}
Exemplo n.º 43
0
		internal ConfigurationElementCollection GetHandlers(WebVirtualDirectory virtualDir)
		{
            //
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.HandlersSection);
				//
				return section.GetCollection();
			}
		}
		public WebVirtualDirectory GetVirtualDirectory(string siteId, string directoryName)
		{
			//
			if (String.IsNullOrEmpty(siteId))
				throw new ArgumentNullException("siteId");
			//
			if (String.IsNullOrEmpty(directoryName))
				throw new ArgumentNullException("directoryName");
			//
			if (!SiteExists(siteId))
				return null;
			//
			using (var srvman = GetServerManager())
			{
				var site = srvman.Sites[siteId];
				//
				var vdir = new WebVirtualDirectory
				{
					Name = directoryName,
					ParentSiteName = siteId
				};
				// We assume that we create only applications.
				vdir.ApplicationPool = site.Applications[vdir.VirtualPath].ApplicationPoolName;
				//
				return vdir;
			}
		}
		private bool FillConfigurationElementWithData(ConfigurationElement item2Fill, HttpError error, WebVirtualDirectory virtualDir)
		{
			// code
			Int64 statusCode = 0;
			if (!Int64.TryParse(error.ErrorCode, out statusCode)
				|| statusCode < 400 || statusCode > 999)
				return false;

			// sub-code
			Int32 subStatusCode = -1;
			if (!Int32.TryParse(error.ErrorSubcode, out subStatusCode))
				return false;
			//
			if (subStatusCode == 0)
				subStatusCode = -1;

            // correct error content
            string errorContent = error.ErrorContent;
            if (error.HandlerType.Equals("File"))
            {
                if(error.ErrorContent.Length > virtualDir.ContentPath.Length)
                    errorContent = errorContent.Substring(virtualDir.ContentPath.Length);

                errorContent = FileUtils.CorrectRelativePath(errorContent);
            }

			item2Fill.SetAttributeValue(StatusCodeAttribute, statusCode);
			item2Fill.SetAttributeValue(SubStatusCodeAttribute, subStatusCode);
            item2Fill.SetAttributeValue(PathAttribute, errorContent);

			//
			item2Fill.SetAttributeValue(ResponseModeAttribute, error.HandlerType);
			// We are succeeded
			return true;
		}
        public WebVirtualDirectory[] GetZooApplications(ServerManager srvman, string siteId)
        {
            if (!SiteExists(srvman, siteId))
                return new WebVirtualDirectory[] { };

            var vdirs = new List<WebVirtualDirectory>();
            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)
                {
                    WebVirtualDirectory vdir = new WebVirtualDirectory
                        {
                            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();
        }
		private HttpError GetHttpError(ConfigurationElement element, WebVirtualDirectory virtualDir)
		{
			if (element == null || virtualDir == null)
				return null;
			// skip inherited http errors
			if (!element.IsLocallyStored)
				return null;
			//
			var error = new HttpError
			{
				ErrorCode		= Convert.ToString(element.GetAttributeValue(StatusCodeAttribute)),
				ErrorSubcode	= Convert.ToString(element.GetAttributeValue(SubStatusCodeAttribute)),
				ErrorContent	= Convert.ToString(element.GetAttributeValue(PathAttribute)),
				HandlerType		= Enum.GetName(typeof(HttpErrorResponseMode), element.GetAttributeValue(ResponseModeAttribute))
			};

			// Make error path relative to the virtual directory's root folder
			if (error.HandlerType.Equals("File") // 0 is supposed to be File
				&& error.ErrorContent.Length > virtualDir.ContentPath.Length)
			{
				error.ErrorContent = error.ErrorContent.Substring(virtualDir.ContentPath.Length);
			}
			//
			return error;
		}
		private ConfigurationElement CreateHttpError(ConfigurationElementCollection collection, HttpError error, WebVirtualDirectory virtualDir)
		{
			// Skip elements either empty or with empty data
			if (error == null || String.IsNullOrEmpty(error.ErrorContent))
				return null;
			
			// Create new custom error
			ConfigurationElement error2Add = collection.CreateElement("error");
			
			if (!FillConfigurationElementWithData(error2Add, error, virtualDir))
				return null;
			//
			return error2Add;
		}
    	public bool VirtualDirectoryExists(string siteId, string directoryName)
		{
			if (!SiteExists(siteId))
				return false;

			using (var srvman = GetServerManager())
			{
				var vdir = new WebVirtualDirectory
				{
					Name = directoryName,
					ParentSiteName = siteId
				};
				//
				return (srvman.Sites[siteId].Applications[vdir.VirtualPath] != null);
			}
		}
    	public void DeleteVirtualDirectory(WebVirtualDirectory virtualDir)
		{
			if (!SiteExists(virtualDir.ParentSiteName))
				return;
			//
			using (var srvman = GetServerManager())
			{
				var iisSiteObject = srvman.Sites[virtualDir.ParentSiteName];
				var iisAppObject = iisSiteObject.Applications[virtualDir.VirtualPath];
				//
				if (iisAppObject != null)
					iisSiteObject.Applications.Remove(iisAppObject);
				//
				srvman.CommitChanges();
			}
        }
    	public string GetPhysicalPath(WebVirtualDirectory virtualDir)
        {
			using (var srvman = GetServerManager())
			{
				string siteId = (virtualDir.ParentSiteName == null) 
					? virtualDir.Name : virtualDir.ParentSiteName;
				//
				var iisObject = srvman.Sites[siteId];
				
				if (iisObject == null)
					return null;

				//
				var iisAppObject = iisObject.Applications[virtualDir.VirtualPath];

				if (iisAppObject == null)
					return null;

				//
				var iisDirObject = iisAppObject.VirtualDirectories["/"];

				if (iisDirObject == null)
					return null;

				//
				return iisDirObject.PhysicalPath;
			}
        }
		public void SetCustomErrors(WebVirtualDirectory virtualDir)
		{
			#region Revert to parent settings (inherited)
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.HttpErrorsSection);
				//
				section.RevertToParent();
				//
				srvman.CommitChanges();
			} 
			#endregion

			#region Put the change in effect
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
				//
				var section = config.GetSection(Constants.HttpErrorsSection);

                // set error mode
                section.SetAttributeValue("errorMode", virtualDir.ErrorMode);
                if (virtualDir.ErrorMode == HttpErrorsMode.Detailed)
                {
                    section.SetAttributeValue("existingResponse", HttpErrorsExistingResponse.PassThrough);
                }
                else
                {
                    section.SetAttributeValue("existingResponse", HttpErrorsExistingResponse.Auto);
                }

                // save custom errors
                if (virtualDir.HttpErrors != null && virtualDir.HttpErrors.Length > 0)
                {
                    var errorsCollection = section.GetCollection();
                    //
                    foreach (var item in virtualDir.HttpErrors)
                    {
                        int indexOf = FindHttpError(errorsCollection, item);
                        // Just update the element attributes - IIS 7 API will do the rest
                        if (indexOf > -1)
                        {
                            var item2Renew = errorsCollection[indexOf];
                            //
                            FillConfigurationElementWithData(item2Renew, item, virtualDir);
                            //
                            continue;
                        }
                        //
                        var item2Add = CreateHttpError(errorsCollection, item, virtualDir);
                        //
                        if (item2Add == null)
                            continue;
                        //
                        errorsCollection.Add(item2Add);
                    }
                }
			    
                //
				srvman.CommitChanges();
			} 
			#endregion
		}
        public void UpdateVirtualDirectory(WebVirtualDirectory virtualDir)
        {
            // ensure physical site content path
            if (String.IsNullOrEmpty(virtualDir.ContentPath))
                throw new Exception("VirtualDirContentPathEmpty");
            //
			using (var srvman = GetServerManager())
			{
				// Obtain parent web site
				var webSite = srvman.Sites[virtualDir.ParentSiteName];
				// Ensure web site has been found
				if (webSite == null)
					throw new ApplicationException("WebSiteNotFound");
				//
				var v_dir = webSite.Applications[virtualDir.VirtualPath];
				v_dir.ApplicationPoolName = virtualDir.ApplicationPool;
				v_dir.VirtualDirectories[0].PhysicalPath = virtualDir.ContentPath;
				//
				srvman.CommitChanges();
			}
        }
        public ApplicationPool GetApplicationPool(WebVirtualDirectory virtualDir)
        {
            if (virtualDir == null)
                throw new ArgumentNullException("vdir");
            // read app pool
			using (var srvman = GetServerManager())
			{
				var appPool = srvman.ApplicationPools[virtualDir.ApplicationPool];
				//
				if (appPool == null)
					throw new ApplicationException("ApplicationPoolNotFound");
				//
				return appPool;
			}
        }
		public void ConfigureConnectAsFeature(WebVirtualDirectory virtualDir)
		{
			// read website
			using (var srvman = GetServerManager())
			{
				var webSite = String.IsNullOrEmpty(virtualDir.ParentSiteName) ? srvman.Sites[virtualDir.Name] : srvman.Sites[virtualDir.ParentSiteName];
				//
				if (webSite != null)
				{
					// get root iisAppObject
					var webApp = webSite.Applications[virtualDir.VirtualPath];
					//
					if (webApp != null)
					{
						var vdir = webApp.VirtualDirectories["/"];
						//
						if (vdir != null)
						{
							vdir.LogonMethod = AuthenticationLogonMethod.ClearText;
							//
							if (virtualDir.DedicatedApplicationPool)
							{
								var appPool = GetApplicationPool(virtualDir);
								vdir.UserName = appPool.ProcessModel.UserName;
								vdir.Password = appPool.ProcessModel.Password;
							}
							else
							{
								vdir.UserName = virtualDir.AnonymousUsername;
								vdir.Password = virtualDir.AnonymousUserPassword;
							}
							//
							srvman.CommitChanges();
						}
					}
				}
			}
		}
		/// <summary>
		/// Adds non existent script maps.
		/// </summary>
		/// <param name="installedHandlers">Already installed scrip maps.</param>
		/// <param name="extensions">Extensions to check.</param>
		/// <param name="processor">Extensions processor.</param>
		internal void AddScriptMaps(WebVirtualDirectory virtualDir,
			IEnumerable<string> extensions, string processor, string scName, string scModule)
		{
			// Empty processor is out of interest...
			if (String.IsNullOrEmpty(processor))
				return;
			// This section helps to overcome "legacy" issues
            //using (var srvman = GetServerManager())
            //{
            //    var config = srvman.GetWebConfiguration(virtualDir.FullQualifiedPath);
            //    //
            //    var handlersSection = config.GetSection(Constants.HandlersSection);
            //    // Do a complete section cleanup
            //    handlersSection.RevertToParent();
            //    //
            //    srvman.CommitChanges();
            //}
			//
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var handlersSection = config.GetSection(Constants.HandlersSection, virtualDir.FullQualifiedPath);

				var handlersCollection = handlersSection.GetCollection();
				// Iterate over extensions in order to setup non-existent handlers
				foreach (string extension in extensions)
				{
					var extParts = extension.Split(',');
					var path = extParts[0];
					var existentHandler = FindHandlerAction(handlersCollection, path, processor);
					// No need to add an existing handler 
					if (existentHandler != null)
						continue;
					// Create a new handler
					var handler = handlersCollection.CreateElement();
					// build script mapping name
					var scriptMappingName = String.Format(scName, path);
					//
					handler["name"] = scriptMappingName;
					handler["path"] = "*" + path;
					handler["verb"] = "GET,HEAD,POST,DEBUG";
					handler["scriptProcessor"] = processor;
					handler["resourceType"] = ResourceType.File;
					handler["modules"] = scModule;
					// add handler
					handlersCollection.AddAt(0, handler);
				}
				//
				srvman.CommitChanges();
			}
			// Allow a script module...
			switch (scModule)
			{
				case Constants.CgiModule: // Allow either ISAPI or CGI module
				case Constants.IsapiModule:
					AddIsapiAndCgiRestriction(processor, true);
					break;
				case Constants.FastCgiModule: // Allow FastCGI module
					AddFastCgiApplication(processor, String.Empty);
					break;
				default:
					Log.WriteWarning("Unknown Script Module has been requested to allow: {0};", scModule);
					break;
			}
		}
		internal void RemoveScriptMaps(WebVirtualDirectory virtualDir, IEnumerable<string> extensions, string processor)
		{
			if (String.IsNullOrEmpty(processor))
				return;
			//
			if (virtualDir == null)
				return;
			//
			using (var srvman = GetServerManager())
			{
				var config = srvman.GetApplicationHostConfiguration();
				//
				var handlersSection = config.GetSection(Constants.HandlersSection, virtualDir.FullQualifiedPath);
				var handlersCollection = handlersSection.GetCollection();
				//
				foreach (string extension in extensions)
				{
					var extParts = extension.Split(',');
					var path = extParts[0];
					var existentHandler = FindHandlerAction(handlersCollection, path, processor);
					// remove handler if exists
					if (existentHandler != null)
						handlersCollection.Remove(existentHandler);
				}
				//
				srvman.CommitChanges();
			}
		}