/// <summary> /// Fills iis configuration with information from ftp site. /// </summary> /// <param name="ftpSite">Ftp site that holds information.</param> private void FillIisFromFtpSite(FtpSite ftpSite) { IisFtpSite iisFtpSite = this.ftpSitesService.GetIisFtpSite(ftpSite.SiteId); string logExtFileFields = ftpSite[FtpSite.MSFTP7_LOG_EXT_FILE_FIELDS]; if (iisFtpSite != null) { // Security settings. iisFtpSite.Security.Authentication.AnonymousAuthentication.Enabled = ftpSite.AllowAnonymous; iisFtpSite.Security.Authentication.AnonymousAuthentication.UserName = ftpSite.AnonymousUsername; iisFtpSite.Security.Authentication.AnonymousAuthentication.Password = ftpSite.AnonymousUserPassword; // enable logging iisFtpSite.LogFile.Enabled = true; // set logging fields if (!String.IsNullOrEmpty(logExtFileFields)) { iisFtpSite.LogFile.LogExtFileFlags = (FtpLogExtFileFlags)Enum.Parse(typeof(FtpLogExtFileFlags), logExtFileFields); } // set log files directory if (!String.IsNullOrEmpty(ftpSite.LogFileDirectory)) { iisFtpSite.LogFile.Directory = ftpSite.LogFileDirectory; } } // Set new bindings. this.CheckFtpServerBindings(ftpSite); this.ftpSitesService.SetSiteBindings(ftpSite.Name, ftpSite.Bindings); // Physical path this.ftpSitesService.SetSitePhysicalPath(ftpSite.SiteId, "/", ftpSite.ContentPath); }
/// <summary> /// Fills ftp site with data from iis ftp site. /// </summary> /// <param name="ftpSite">Ftp site to fill.</param> private void FillFtpSiteFromIis(FtpSite ftpSite) { IisFtpSite iisFtpSite = this.ftpSitesService.GetIisFtpSite(ftpSite.SiteId); if (iisFtpSite != null) { // Security settings. ftpSite.AllowAnonymous = iisFtpSite.Security.Authentication.AnonymousAuthentication.Enabled; ftpSite.AnonymousUsername = iisFtpSite.Security.Authentication.AnonymousAuthentication.UserName; ftpSite.AnonymousUserPassword = iisFtpSite.Security.Authentication.AnonymousAuthentication.Password; ftpSite["UserIsolationMode"] = iisFtpSite.UserIsolation.Mode.ToString(); // Logging settings. ftpSite[FtpSite.MSFTP7_SITE_ID] = iisFtpSite.SiteServiceId; if (iisFtpSite.LogFile.Enabled) { ftpSite.LogFileDirectory = iisFtpSite.LogFile.Directory; ftpSite[FtpSite.MSFTP7_LOG_EXT_FILE_FIELDS] = iisFtpSite.LogFile.LogExtFileFlags.ToString(); } } // Bindings ftpSite.Bindings = this.ftpSitesService.GetSiteBindings(ftpSite.SiteId); // Physical path ftpSite.ContentPath = this.ftpSitesService.GetSitePhysicalPath(ftpSite.SiteId, "/"); }
/// <summary> /// Creates ftp site. /// </summary> /// <param name="site">Ftp site to be created.</param> /// <returns>Created site id.</returns> /// <exception cref="ArgumentNullException">Is thrown in case supplied argument is null.</exception> /// <exception cref="ArgumentException"> /// Is thrown in case site id or its name is null or empty or if site id is not equal to default ftp site name. /// </exception> public string CreateSite(FtpSite site) { if (site == null) { throw new ArgumentNullException("site"); } if (String.IsNullOrEmpty(site.SiteId) || String.IsNullOrEmpty(site.Name)) { throw new ArgumentException("Site id or name is null or empty."); } this.CheckFtpServerBindings(site); PropertyBag siteBag = this.ftpSitesService.GetSiteDefaults(); // Set site name siteBag[FtpSiteGlobals.Site_Name] = site.Name; // Set site physical path siteBag[FtpSiteGlobals.AppVirtualDirectory_PhysicalPath] = site.ContentPath; PropertyBag ftpBinding = new PropertyBag(); // Set site binding protocol ftpBinding[FtpSiteGlobals.BindingProtocol] = "ftp"; // fill binding summary info ftpBinding[FtpSiteGlobals.BindingInformation] = site.Bindings[0].ToString(); // Set site binding siteBag[FtpSiteGlobals.Site_SingleBinding] = ftpBinding; // Auto-start siteBag[FtpSiteGlobals.FtpSite_AutoStart] = true; // Set anonumous authentication siteBag[FtpSiteGlobals.Authentication_AnonymousEnabled] = true; siteBag[FtpSiteGlobals.Authentication_BasicEnabled] = true; this.ftpSitesService.AddSite(siteBag); AuthorizationRuleCollection rules = this.ftpSitesService.GetAuthorizationRuleCollection(site.Name); rules.Add(AuthorizationRuleAccessType.Allow, "*", String.Empty, PermissionsFlags.Read); IisFtpSite iisFtpSite = this.ftpSitesService.GetIisFtpSite(site.Name); iisFtpSite.UserIsolation.Mode = Mode.StartInUsersDirectory; iisFtpSite.Security.Ssl.ControlChannelPolicy = ControlChannelPolicy.SslAllow; iisFtpSite.Security.Ssl.DataChannelPolicy = DataChannelPolicy.SslAllow; this.FillIisFromFtpSite(site); this.ftpSitesService.CommitChanges(); // Do not start the site because it is started during creation. try { this.ChangeSiteState(site.Name, ServerState.Started); } catch { // Ignore the error if happened. } return(site.Name); }