External IP address bound to SSL binding, now internal dedicated IP SSL Tab only to show website name and domain default choice to include global dns zone during site creation is unchecked When switching SSL enabled site to shared, certificate to be deleted When deleted SSL enabled site, certificate to be deleted Switch IP Mode added to the hosting plan
1092 lines
No EOL
33 KiB
C#
1092 lines
No EOL
33 KiB
C#
// Copyright (c) 2012, Outercurve Foundation.
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without modification,
|
|
// are permitted provided that the following conditions are met:
|
|
//
|
|
// - Redistributions of source code must retain the above copyright notice, this
|
|
// list of conditions and the following disclaimer.
|
|
//
|
|
// - Redistributions in binary form must reproduce the above copyright notice,
|
|
// this list of conditions and the following disclaimer in the documentation
|
|
// and/or other materials provided with the distribution.
|
|
//
|
|
// - Neither the name of the Outercurve Foundation nor the names of its
|
|
// contributors may be used to endorse or promote products derived from this
|
|
// software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using System.Data;
|
|
using System.Configuration;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Web;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Web.UI.HtmlControls;
|
|
using WebsitePanel.EnterpriseServer;
|
|
using WebsitePanel.Providers;
|
|
using WebsitePanel.Providers.Web;
|
|
using WebsitePanel.Providers.Common;
|
|
using WebsitePanel.Portal.Code.Helpers;
|
|
using WebsitePanel.Providers.ResultObjects;
|
|
|
|
namespace WebsitePanel.Portal
|
|
{
|
|
public partial class WebSitesEditSite : WebsitePanelModuleBase
|
|
{
|
|
/// <summary>
|
|
/// Use this variable to define additional tabs to in the control
|
|
/// </summary>
|
|
private List<Tab> TabsList = new List<Tab>()
|
|
{
|
|
new Tab { Id = "home", ResourceKey = "Tab.HomeFolder", ViewId = "tabHomeFolder" },
|
|
new Tab { Id = "vdirs", ResourceKey = "Tab.VirtualDirs", Quota = Quotas.WEB_VIRTUALDIRS, ViewId = "tabVirtualDirs" },
|
|
new Tab { Id = "securedfolders", ResourceKey = "Tab.SecuredFolders", Quota = Quotas.WEB_SECUREDFOLDERS, ViewId = "tabSecuredFolders" },
|
|
new Tab { Id = "htaccessfolders", ResourceKey = "Tab.Htaccess", Quota = Quotas.WEB_HTACCESS, ViewId = "tabHeliconApe" },
|
|
new Tab { Id = "frontpage", ResourceKey = "Tab.FrontPage", Quota = Quotas.WEB_FRONTPAGE, ViewId = "tabFrontPage" },
|
|
new Tab { Id = "extensions", ResourceKey = "Tab.Extensions", ViewId = "tabExtensions" },
|
|
new Tab { Id = "errors", ResourceKey = "Tab.CustomErrors", Quota = Quotas.WEB_ERRORS, ViewId = "tabErrors" },
|
|
new Tab { Id = "headers", ResourceKey = "Tab.CustomHeaders", Quota = Quotas.WEB_HEADERS, ViewId = "tabHeaders" },
|
|
new Tab { Id = "webpub", ResourceKey = "Tab.WebDeployPublishing", Quota = Quotas.WEB_REMOTEMANAGEMENT, ViewId = "tabWebDeployPublishing" },
|
|
new Tab { Id = "mime", ResourceKey = "Tab.MIMETypes", Quota = Quotas.WEB_MIME, ViewId = "tabMimes" },
|
|
new Tab { Id = "coldfusion", ResourceKey = "Tab.ColdFusion", Quota = Quotas.WEB_COLDFUSION, ViewId = "tabCF" },
|
|
new Tab { Id = "webman", ResourceKey = "Tab.WebManagement", Quota = Quotas.WEB_REMOTEMANAGEMENT, ViewId = "tabWebManagement" },
|
|
new Tab { Id = "SSL", ResourceKey = "Tab.SSL", Quota = Quotas.WEB_SSL, ViewId = "SSL" },
|
|
};
|
|
|
|
private int PackageId
|
|
{
|
|
get { return (int)ViewState["PackageId"]; }
|
|
set { ViewState["PackageId"] = value; }
|
|
}
|
|
|
|
private bool IsDedicatedIP
|
|
{
|
|
get { return (bool)ViewState["IsDedicatedIP"]; }
|
|
set { ViewState["IsDedicatedIP"] = value; }
|
|
}
|
|
|
|
private bool IIs7
|
|
{
|
|
get { return (bool)ViewState["IIs7"]; }
|
|
set { ViewState["IIs7"] = value; }
|
|
}
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
// Retrieve localized tab names as per file resources
|
|
// and assign Web resource group by default if otherwise specified
|
|
TabsList.ForEach((x) =>
|
|
{
|
|
x.Name = GetLocalizedString(x.ResourceKey);
|
|
x.ResourceGroup = x.ResourceGroup ?? ResourceGroups.Web;
|
|
});
|
|
|
|
//
|
|
if (!IsPostBack)
|
|
{
|
|
BindWebSite();
|
|
}
|
|
}
|
|
|
|
private void BindTabs()
|
|
{
|
|
//
|
|
var filteredTabs = TabsList.FilterTabsByHostingPlanQuotas(PackageId).ToList();
|
|
|
|
// remove "SSL" tab for a site with dynamic IP
|
|
var sslTab = filteredTabs.SingleOrDefault(t => t.Id == "SSL");
|
|
if (!IsDedicatedIP && sslTab != null)
|
|
filteredTabs.Remove(sslTab);
|
|
|
|
var selectedValue = dlTabs.SelectedValue;
|
|
|
|
if (dlTabs.SelectedIndex == -1)
|
|
{
|
|
if (!IsPostBack && String.IsNullOrEmpty(Request["MenuID"]) == false)
|
|
{
|
|
// Find menu item requested
|
|
var st = filteredTabs.SingleOrDefault(x => x.Id.Equals(Request["MenuID"]));
|
|
//
|
|
if (st != null)
|
|
{
|
|
selectedValue = st.ViewId;
|
|
//
|
|
dlTabs.SelectedIndex = Array.IndexOf(filteredTabs.ToArray(), st);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Select "Home Folder" tab by default
|
|
dlTabs.SelectedIndex = 0;
|
|
}
|
|
}
|
|
|
|
// Bind data to the view
|
|
dlTabs.DataSource = filteredTabs;
|
|
dlTabs.DataBind();
|
|
// Select active view corresponding to the tab selected
|
|
tabs.SetActiveViewById(selectedValue as string);
|
|
}
|
|
|
|
protected void dlTabs_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
BindTabs();
|
|
}
|
|
|
|
private void BindWebSite()
|
|
{
|
|
WebSite site = null;
|
|
try
|
|
{
|
|
site = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_GET_SITE", ex);
|
|
return;
|
|
}
|
|
|
|
if (site == null)
|
|
RedirectToBrowsePage();
|
|
|
|
// IIS 7.0 mode
|
|
IIs7 = site.IIs7;
|
|
|
|
|
|
|
|
PackageId = site.PackageId;
|
|
|
|
// bind site
|
|
lnkSiteName.Text = site.Name;
|
|
lnkSiteName.NavigateUrl = "http://" + site.Name;
|
|
|
|
// bind unassigned IP addresses
|
|
ddlIpAddresses.Items.Clear();
|
|
PackageIPAddress[] ips = ES.Services.Servers.GetPackageUnassignedIPAddresses(site.PackageId, IPAddressPool.WebSites);
|
|
foreach (PackageIPAddress ip in ips)
|
|
{
|
|
string fullIP = ip.ExternalIP;
|
|
if (ip.InternalIP != null &&
|
|
ip.InternalIP != "" &&
|
|
ip.InternalIP != ip.ExternalIP)
|
|
fullIP += " (" + ip.InternalIP + ")";
|
|
|
|
ddlIpAddresses.Items.Add(new ListItem(fullIP, ip.PackageAddressID.ToString()));
|
|
}
|
|
|
|
if (site.IsDedicatedIP)
|
|
{
|
|
litIPAddress.Text = site.SiteIPAddress;
|
|
}
|
|
|
|
dedicatedIP.Visible = site.IsDedicatedIP;
|
|
sharedIP.Visible = !site.IsDedicatedIP;
|
|
|
|
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
|
|
if (Utils.CheckQouta(Quotas.WEB_ALLOWIPADDRESSMODESWITCH, cntx))
|
|
cmdSwitchToDedicatedIP.Visible = (ddlIpAddresses.Items.Count > 0);
|
|
else
|
|
cmdSwitchToDedicatedIP.Visible = cmdSwitchToSharedIP.Visible = false;
|
|
|
|
|
|
litFrontPageUnavailable.Visible = false;
|
|
tblSharePoint.Visible = site.SharePointInstalled;
|
|
tblFrontPage.Visible = !site.SharePointInstalled;
|
|
|
|
|
|
if (!site.ColdFusionAvailable)
|
|
{
|
|
litCFUnavailable.Text = GetLocalizedString("Text.COLDFUSION_UNAVAILABLE");
|
|
litCFUnavailable.Visible = true;
|
|
rowCF.Visible = false;
|
|
rowVirtDir.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
if (site.ColdFusionVersion.Equals("7"))
|
|
{
|
|
litCFUnavailable.Text = "ColdFusion 7.x is installed";
|
|
litCFUnavailable.Visible = true;
|
|
}
|
|
else
|
|
{
|
|
if (site.ColdFusionVersion.Equals("8"))
|
|
litCFUnavailable.Text = "ColdFusion 8.x is installed";
|
|
litCFUnavailable.Visible = true;
|
|
}
|
|
|
|
if (site.ColdFusionVersion.Equals("9"))
|
|
litCFUnavailable.Text = "ColdFusion 9.x is installed";
|
|
litCFUnavailable.Visible = true;
|
|
|
|
}
|
|
|
|
if (!PackagesHelper.CheckGroupQuotaEnabled(PackageId, ResourceGroups.Web, Quotas.WEB_CFVIRTUALDIRS))
|
|
{
|
|
//virtual directories are not implemented for IIS 7
|
|
rowVirtDir.Visible = false;
|
|
}
|
|
|
|
chkCfExt.Checked = site.ColdFusionInstalled;
|
|
chkVirtDir.Checked = site.CreateCFVirtualDirectories;
|
|
|
|
// bind FrontPage
|
|
if (!site.FrontPageAvailable)
|
|
{
|
|
litFrontPageUnavailable.Text = GetLocalizedString("Text.FPSE_UNAVAILABLE");
|
|
litFrontPageUnavailable.Visible = true;
|
|
tblFrontPage.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
// set control policies
|
|
frontPageUsername.SetPackagePolicy(site.PackageId, UserSettings.WEB_POLICY, "FrontPageAccountPolicy");
|
|
frontPagePassword.SetPackagePolicy(site.PackageId, UserSettings.WEB_POLICY, "FrontPagePasswordPolicy");
|
|
|
|
// set default account name
|
|
frontPageUsername.Text = site.FrontPageAccount;
|
|
ToggleFrontPageControls(site.FrontPageInstalled);
|
|
}
|
|
|
|
// bind controls
|
|
webSitesHomeFolderControl.BindWebItem(PackageId, site);
|
|
webSitesSecuredFoldersControl.BindSecuredFolders(site);
|
|
webSitesHeliconApeControl.BindHeliconApe(site);
|
|
webSitesExtensionsControl.BindWebItem(PackageId, site);
|
|
webSitesMimeTypesControl.BindWebItem(site);
|
|
webSitesCustomHeadersControl.BindWebItem(site);
|
|
webSitesCustomErrorsControl.BindWebItem(site);
|
|
|
|
if (site.IsDedicatedIP)
|
|
{
|
|
IsDedicatedIP = true;
|
|
WebsitesSSLControl.BindWebItem(site);
|
|
}
|
|
else
|
|
{
|
|
IsDedicatedIP = false;
|
|
}
|
|
|
|
BindVirtualDirectories();
|
|
|
|
// bind state
|
|
BindSiteState(site.SiteState);
|
|
|
|
// bind pointers
|
|
BindPointers();
|
|
|
|
// save packageid
|
|
ViewState["PackageID"] = site.PackageId;
|
|
|
|
//
|
|
ToggleWmSvcControls(site);
|
|
|
|
//
|
|
if (!site.GetValue<bool>(WebVirtualDirectory.WmSvcSiteEnabled))
|
|
{
|
|
txtWmSvcAccountName.Text = AutoSuggestWmSvcAccontName(site, "_admin");
|
|
}
|
|
|
|
ToggleWmSvcConnectionHint(site);
|
|
|
|
// Web Deploy Publishing
|
|
ToggleWebDeployPublishingControls(site);
|
|
BindWebPublishingProfileDatabases();
|
|
BindWebPublishingProfileDatabaseUsers();
|
|
BindWebPublishingProfileFtpAccounts(site);
|
|
|
|
// bind tabs
|
|
BindTabs();
|
|
}
|
|
|
|
#region Web Deploy Publishing
|
|
|
|
protected void WDeployEnabePublishingButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsValid)
|
|
return;
|
|
//
|
|
GrantWebDeployPublishingAccess(WDeployPublishingAccountTextBox.Text.Trim(), WDeployPublishingPasswordTextBox.Text);
|
|
//
|
|
BindWebSite();
|
|
}
|
|
|
|
protected void MyDatabaseList_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
//
|
|
BindWebPublishingProfileDatabaseUsers();
|
|
}
|
|
|
|
private void GrantWebDeployPublishingAccess(string accountName, string accountPassword)
|
|
{
|
|
//
|
|
ResultObject result = ES.Services.WebServers.GrantWebDeployPublishingAccess(PanelRequest.ItemID, accountName, accountPassword);
|
|
//
|
|
if (!result.IsSuccess)
|
|
{
|
|
messageBox.ShowMessage(result, "WEB_PUB_ENABLE", "IIS7");
|
|
return;
|
|
}
|
|
//
|
|
messageBox.ShowSuccessMessage("WEB_PUB_ENABLE");
|
|
}
|
|
|
|
protected void WDeployChangePublishingPasswButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsValid || WDeployPublishingPasswordTextBox.Text.Equals(PasswordControl.EMPTY_PASSWORD))
|
|
return;
|
|
//
|
|
ChangeWDeployAccountPassword(PanelRequest.ItemID, WDeployPublishingPasswordTextBox.Text);
|
|
}
|
|
|
|
private void ChangeWDeployAccountPassword(int siteItemId, string newAccountPassword)
|
|
{
|
|
try
|
|
{
|
|
//
|
|
var result = ES.Services.WebServers.ChangeWebDeployPublishingPassword(siteItemId, newAccountPassword);
|
|
//
|
|
if (result.IsSuccess == false)
|
|
{
|
|
messageBox.ShowErrorMessage("WPUB_PASSW_CHANGE");
|
|
return;
|
|
}
|
|
//
|
|
messageBox.ShowSuccessMessage("WPUB_PASSW_CHANGE");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
messageBox.ShowErrorMessage("WPUB_PASSW_CHANGE", ex);
|
|
}
|
|
}
|
|
|
|
protected void WDeployDownloadPubProfileLink_Command(object sender, CommandEventArgs e)
|
|
{
|
|
DownloadWDeployPublishingProfile((string)e.CommandArgument);
|
|
}
|
|
|
|
private void DownloadWDeployPublishingProfile(string siteName)
|
|
{
|
|
// download file
|
|
Response.Clear();
|
|
Response.AddHeader("Content-Disposition", "attachment; filename=" + String.Format("{0}.publishsettings", siteName));
|
|
Response.ContentType = "application/octet-stream";
|
|
|
|
var result = default(BytesResult);
|
|
|
|
try
|
|
{
|
|
// read remote content
|
|
result = ES.Services.WebServers.GetWebDeployPublishingProfile(PanelRequest.ItemID);
|
|
//
|
|
if (result.IsSuccess == false)
|
|
{
|
|
messageBox.ShowErrorMessage("WDEPLOY_GET_PROFILE");
|
|
//
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
messageBox.ShowErrorMessage("FILES_READ_FILE", ex);
|
|
return;
|
|
}
|
|
|
|
// write to stream
|
|
Response.BinaryWrite(result.Value);
|
|
//
|
|
Response.End();
|
|
}
|
|
|
|
protected void WDeployDisablePublishingButton_Click(object sender, EventArgs e)
|
|
{
|
|
DisableWebDeployPublishing();
|
|
//
|
|
BindWebSite();
|
|
}
|
|
|
|
private void DisableWebDeployPublishing()
|
|
{
|
|
try
|
|
{
|
|
ES.Services.WebServers.RevokeWebDeployPublishingAccess(PanelRequest.ItemID);
|
|
//
|
|
messageBox.ShowSuccessMessage("WEB_PUB_DISABLE");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
messageBox.ShowErrorMessage("WEB_PUB_DISABLE", ex);
|
|
}
|
|
}
|
|
|
|
protected void PubProfileWizardOkButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsValid)
|
|
return;
|
|
//
|
|
SaveWebDeployPublishingProfile();
|
|
//
|
|
BindWebSite();
|
|
}
|
|
|
|
private void SaveWebDeployPublishingProfile()
|
|
{
|
|
var ids = new List<int>();
|
|
// Add FTP account to profile
|
|
if (String.IsNullOrEmpty(MyFtpAccountList.SelectedValue) != true)
|
|
{
|
|
ids.Add(Convert.ToInt32(MyFtpAccountList.SelectedValue));
|
|
}
|
|
// Add database to profile
|
|
if (String.IsNullOrEmpty(MyDatabaseList.SelectedValue) != true)
|
|
{
|
|
ids.Add(Convert.ToInt32(MyDatabaseList.SelectedValue));
|
|
}
|
|
// Add database user to profile
|
|
if (String.IsNullOrEmpty(MyDatabaseUserList.SelectedValue) != true)
|
|
{
|
|
ids.Add(Convert.ToInt32(MyDatabaseUserList.SelectedValue));
|
|
}
|
|
//
|
|
var result = ES.Services.WebServers.SaveWebDeployPublishingProfile(PanelRequest.ItemID, ids.ToArray());
|
|
//
|
|
if (!result.IsSuccess)
|
|
{
|
|
messageBox.ShowMessage(result, "WPUB_PROFILE_SAVE", "IIS7");
|
|
return;
|
|
}
|
|
//
|
|
messageBox.ShowSuccessMessage("WPUB_PROFILE_SAVE");
|
|
}
|
|
|
|
private void DisableChildControlsOfType(Control ctl, params Type[] ctlTypes)
|
|
{
|
|
foreach (Control cc in ctl.Controls)
|
|
{
|
|
if (Array.Exists(ctlTypes, x =>
|
|
{
|
|
return cc.GetType().Equals(x);
|
|
}))
|
|
{
|
|
cc.Visible = false;
|
|
}
|
|
// Disable child controls recursively if any
|
|
if (cc.Controls.Count > 0)
|
|
{
|
|
DisableChildControlsOfType(cc, ctlTypes);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void EnableControlsInBulk(params Control[] ctls)
|
|
{
|
|
foreach (var item in ctls)
|
|
{
|
|
item.Visible = true;
|
|
}
|
|
}
|
|
|
|
private void ToggleWebDeployPublishingControls(WebVirtualDirectory item)
|
|
{
|
|
// Disable all child controls
|
|
DisableChildControlsOfType(tabWebDeployPublishing, typeof(PlaceHolder), typeof(Button), typeof(TextBox), typeof(Literal));
|
|
|
|
// Cleanup password text boxes
|
|
WDeployPublishingPasswordTextBox.Text = WDeployPublishingPasswordTextBox.Attributes["value"] = String.Empty;
|
|
WDeployPublishingConfirmPasswordTextBox.Text = WDeployPublishingConfirmPasswordTextBox.Attributes["value"] = String.Empty;
|
|
|
|
// Step 1: Web Deploy feature is not installed on the server
|
|
if (item.WebDeployPublishingAvailable == false)
|
|
{
|
|
// Enable panels
|
|
EnableControlsInBulk(PanelWDeployNotInstalled);
|
|
//
|
|
return;
|
|
}
|
|
|
|
// Step 2: Web Deploy feature is available but not publishing enabled for the web site yet
|
|
if (item.WebDeploySitePublishingEnabled == false)
|
|
{
|
|
// Enable controls
|
|
EnableControlsInBulk(
|
|
PanelWDeploySitePublishingDisabled,
|
|
PanelWDeployPublishingCredentials,
|
|
WDeployEnabePublishingButton,
|
|
WDeployPublishingAccountTextBox,
|
|
WDeployPublishingPasswordTextBox,
|
|
WDeployPublishingConfirmPasswordTextBox,
|
|
WDeployPublishingAccountRequiredFieldValidator);
|
|
|
|
WDeployPublishingAccountTextBox.Text = AutoSuggestWmSvcAccontName(item, "_dploy");
|
|
//
|
|
WDeployPublishingAccountRequiredFieldValidator.Enabled = true;
|
|
//
|
|
return;
|
|
}
|
|
// Step 3: Publishing has been enabled for the web site
|
|
if (item.WebDeploySitePublishingEnabled == true)
|
|
{
|
|
// Enable controls
|
|
EnableControlsInBulk(
|
|
PanelWDeployPublishingCredentials,
|
|
WDeployChangePublishingPasswButton,
|
|
WDeployDisablePublishingButton,
|
|
WDeployPublishingAccountLiteral,
|
|
WDeployPublishingPasswordTextBox,
|
|
WDeployPublishingConfirmPasswordTextBox);
|
|
// Disable user name validation
|
|
WDeployPublishingAccountRequiredFieldValidator.Enabled = false;
|
|
// Display plain-text publishing account name
|
|
WDeployPublishingAccountLiteral.Text = item.WebDeployPublishingAccount;
|
|
// Miscellaneous
|
|
// Enable empty publishing password for stylistic purposes
|
|
WDeployPublishingPasswordTextBox.Text = PasswordControl.EMPTY_PASSWORD;
|
|
WDeployPublishingPasswordTextBox.Attributes["value"] = PasswordControl.EMPTY_PASSWORD;
|
|
// Enable empty publishing password confirmation for stylistic purposes
|
|
WDeployPublishingConfirmPasswordTextBox.Text = PasswordControl.EMPTY_PASSWORD;
|
|
WDeployPublishingConfirmPasswordTextBox.Attributes["value"] = PasswordControl.EMPTY_PASSWORD;
|
|
}
|
|
// Step 4: Publishing has been enabled and publishing profile has been built
|
|
if (item.WebDeploySitePublishingEnabled == true)
|
|
{
|
|
// Enable controls
|
|
EnableControlsInBulk(PanelWDeployManagePublishingProfile);
|
|
// Save web site name as a command argument for the link
|
|
WDeployDownloadPubProfileLink.CommandArgument = item.Name;
|
|
}
|
|
}
|
|
|
|
private void BindWebPublishingProfileDatabases()
|
|
{
|
|
MyDatabaseList.DataSource = ES.Services.DatabaseServers.GetSqlDatabases(PanelSecurity.PackageId, null, false);
|
|
MyDatabaseList.DataBind();
|
|
//
|
|
MyDatabaseList.Items.Insert(0, new ListItem(GetLocalizedString("WebPublishing.ChooseDatabasePrompt"), String.Empty));
|
|
}
|
|
|
|
private void BindWebPublishingProfileDatabaseUsers()
|
|
{
|
|
//
|
|
if (String.IsNullOrEmpty(MyDatabaseList.SelectedValue) == false)
|
|
{
|
|
var dbItem = ES.Services.DatabaseServers.GetSqlDatabase(Convert.ToInt32(MyDatabaseList.SelectedValue));
|
|
//
|
|
var sqlUsers = ES.Services.DatabaseServers.GetSqlUsers(PanelSecurity.PackageId, dbItem.GroupName, false);
|
|
//
|
|
MyDatabaseUserList.DataSource = Array.FindAll(sqlUsers, x => Array.Exists(dbItem.Users, y => y.Equals(x.Name)));
|
|
MyDatabaseUserList.DataBind();
|
|
}
|
|
else
|
|
{
|
|
MyDatabaseUserList.Items.Clear();
|
|
}
|
|
//
|
|
MyDatabaseUserList.Items.Insert(0, new ListItem(GetLocalizedString("WebPublishing.ChooseDatabaseUserPrompt"), String.Empty));
|
|
}
|
|
|
|
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));
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region WmSvc Management
|
|
|
|
private string AutoSuggestWmSvcAccontName(WebVirtualDirectory item, string suffix)
|
|
{
|
|
string autoSuggestedPart = item.Name;
|
|
//
|
|
if (autoSuggestedPart.Length > 14)
|
|
{
|
|
autoSuggestedPart = autoSuggestedPart.Substring(0, 14);
|
|
//
|
|
while (!String.IsNullOrEmpty(autoSuggestedPart) &&
|
|
!Char.IsLetterOrDigit(autoSuggestedPart[autoSuggestedPart.Length - 1]))
|
|
{
|
|
autoSuggestedPart = autoSuggestedPart.Substring(0, autoSuggestedPart.Length - 1);
|
|
}
|
|
}
|
|
//
|
|
return autoSuggestedPart + suffix;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
protected void btnWmSvcSiteEnable_Click(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsValid)
|
|
return;
|
|
|
|
//
|
|
string accountName = txtWmSvcAccountName.Text.Trim();
|
|
string accountPassword = txtWmSvcAccountPassword.Text;
|
|
|
|
//
|
|
ResultObject result = ES.Services.WebServers.GrantWebManagementAccess(PanelRequest.ItemID, accountName, accountPassword);
|
|
//
|
|
if (!result.IsSuccess)
|
|
{
|
|
messageBox.ShowMessage(result, "IIS7_WMSVC", "IIS7");
|
|
return;
|
|
}
|
|
//
|
|
messageBox.ShowSuccessMessage("Iis7WmSvc_Enabled");
|
|
//
|
|
BindWebSite();
|
|
}
|
|
|
|
protected void btnWmSvcChangePassw_Click(object sender, EventArgs e)
|
|
{
|
|
if (!Page.IsValid)
|
|
return;
|
|
|
|
//
|
|
string accountPassword = txtWmSvcAccountPassword.Text;
|
|
|
|
//
|
|
ResultObject result = ES.Services.WebServers.ChangeWebManagementAccessPassword(
|
|
PanelRequest.ItemID, accountPassword);
|
|
//
|
|
if (!result.IsSuccess)
|
|
{
|
|
messageBox.ShowMessage(result, "IIS7_WMSVC", "IIS7");
|
|
return;
|
|
}
|
|
//
|
|
messageBox.ShowSuccessMessage("Iis7WmSvc_PasswordChanged");
|
|
//
|
|
BindWebSite();
|
|
}
|
|
|
|
protected void btnWmSvcSiteDisable_Click(object sender, EventArgs e)
|
|
{
|
|
//
|
|
string accountName = txtWmSvcAccountName.Text.Trim();
|
|
|
|
//
|
|
ES.Services.WebServers.RevokeWebManagementAccess(PanelRequest.ItemID);
|
|
//
|
|
messageBox.ShowSuccessMessage("Iis7WmSvc_Disabled");
|
|
//
|
|
BindWebSite();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region FrontPage
|
|
private void ToggleFrontPageControls(bool installed)
|
|
{
|
|
// status
|
|
litFrontPageStatus.Text = installed ? GetLocalizedString("Text.FPSE_INSTALLED") : GetLocalizedString("Text.FPSE_NOT_INSTALLED");
|
|
|
|
if (!installed)
|
|
frontPageUsername.Text = "";
|
|
|
|
frontPageUsername.EditMode = installed;
|
|
|
|
// toggle buttons
|
|
btnInstallFrontPage.Visible = !installed;
|
|
btnUninstallFrontPage.Visible = installed;
|
|
btnChangeFrontPagePassword.Visible = installed;
|
|
pnlFrontPage.DefaultButton = installed ? "btnChangeFrontPagePassword" : "btnInstallFrontPage";
|
|
}
|
|
|
|
protected void btnInstallFrontPage_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.InstallFrontPage(PanelRequest.ItemID,
|
|
frontPageUsername.Text, frontPagePassword.Password);
|
|
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
ShowSuccessMessage("WEB_FP_INSTALL");
|
|
frontPagePassword.Password = "";
|
|
frontPageUsername.Text = frontPageUsername.Text;
|
|
ToggleFrontPageControls(true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_FP_INSTALL", ex);
|
|
return;
|
|
}
|
|
}
|
|
protected void btnChangeFrontPagePassword_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.ChangeFrontPagePassword(PanelRequest.ItemID,
|
|
frontPagePassword.Password);
|
|
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
ShowSuccessMessage("WEB_FP_CHANGE_PASSWORD");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_FP_CHANGE_PASSWORD", ex);
|
|
return;
|
|
}
|
|
}
|
|
protected void btnUninstallFrontPage_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.UninstallFrontPage(PanelRequest.ItemID);
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
ShowSuccessMessage("WEB_FP_UNINSTALL");
|
|
ToggleFrontPageControls(false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_FP_UNINSTALL", ex);
|
|
return;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
private void BindVirtualDirectories()
|
|
{
|
|
gvVirtualDirectories.DataSource = ES.Services.WebServers.GetVirtualDirectories(PanelRequest.ItemID);
|
|
gvVirtualDirectories.DataBind();
|
|
}
|
|
|
|
private void BindPointers()
|
|
{
|
|
gvPointers.DataSource = ES.Services.WebServers.GetWebSitePointers(PanelRequest.ItemID);
|
|
gvPointers.DataBind();
|
|
}
|
|
|
|
private void SaveWebSite()
|
|
{
|
|
if (!Page.IsValid)
|
|
return;
|
|
|
|
// load original web site item
|
|
WebSite site = ES.Services.WebServers.GetWebSite(PanelRequest.ItemID);
|
|
|
|
// collect form data
|
|
site.FrontPageAccount = frontPageUsername.Text;
|
|
|
|
site.ColdFusionInstalled = chkCfExt.Checked;
|
|
site.CreateCFVirtualDirectories = chkVirtDir.Checked;
|
|
|
|
// other controls
|
|
webSitesExtensionsControl.SaveWebItem(site);
|
|
webSitesHomeFolderControl.SaveWebItem(site);
|
|
webSitesMimeTypesControl.SaveWebItem(site);
|
|
webSitesCustomHeadersControl.SaveWebItem(site);
|
|
webSitesCustomErrorsControl.SaveWebItem(site);
|
|
|
|
// update web site
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.UpdateWebSite(site);
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_UPDATE_SITE", ex);
|
|
return;
|
|
}
|
|
|
|
RedirectSpaceHomePage();
|
|
}
|
|
|
|
private void DeleteWebSite()
|
|
{
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.DeleteWebSite(PanelRequest.ItemID);
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_DELETE_SITE", ex);
|
|
return;
|
|
}
|
|
|
|
RedirectSpaceHomePage();
|
|
}
|
|
|
|
protected void btnUpdate_Click(object sender, EventArgs e)
|
|
{
|
|
SaveWebSite();
|
|
}
|
|
|
|
protected void btnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
RedirectSpaceHomePage();
|
|
}
|
|
|
|
protected void btnDelete_Click(object sender, EventArgs e)
|
|
{
|
|
DeleteWebSite();
|
|
}
|
|
|
|
protected void btnAddVirtualDirectory_Click(object sender, EventArgs e)
|
|
{
|
|
Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "add_vdir",
|
|
PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId.ToString()));
|
|
}
|
|
|
|
#region Site State
|
|
private void BindSiteState(ServerState state)
|
|
{
|
|
if (state == ServerState.Continuing)
|
|
state = ServerState.Started;
|
|
|
|
litStatus.Text = GetLocalizedString("SiteState." + state.ToString());
|
|
cmdStart.Visible = (state == ServerState.Stopped);
|
|
cmdContinue.Visible = (state == ServerState.Paused);
|
|
cmdPause.Visible = (state == ServerState.Started);
|
|
cmdStop.Visible = (state == ServerState.Started || state == ServerState.Paused);
|
|
}
|
|
|
|
protected void cmdChangeState_Click(object sender, ImageClickEventArgs e)
|
|
{
|
|
string stateName = ((ImageButton)sender).CommandName;
|
|
ServerState state = (ServerState)Enum.Parse(typeof(ServerState), stateName, true);
|
|
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.ChangeSiteState(PanelRequest.ItemID, state);
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
BindSiteState(state);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_CHANGE_SITE_STATE", ex);
|
|
return;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Pointers
|
|
protected void gvPointers_RowDeleting(object sender, GridViewDeleteEventArgs e)
|
|
{
|
|
int domainId = (int)gvPointers.DataKeys[e.RowIndex][0];
|
|
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.DeleteWebSitePointer(PanelRequest.ItemID, domainId);
|
|
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
ShowSuccessMessage("WEB_DELETE_SITE_POINTER");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_DELETE_SITE_POINTER", ex);
|
|
return;
|
|
}
|
|
|
|
// rebind pointers
|
|
BindPointers();
|
|
}
|
|
|
|
protected void btnAddPointer_Click(object sender, EventArgs e)
|
|
{
|
|
Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "add_pointer",
|
|
PortalUtils.SPACE_ID_PARAM + "=" + PanelSecurity.PackageId.ToString()));
|
|
}
|
|
#endregion
|
|
|
|
protected void cmdSwitchToDedicatedIP_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
sharedIP.Visible = false;
|
|
switchToDedicatedIP.Visible = true;
|
|
}
|
|
|
|
protected void cmdSwitchToSharedIP_Click(object sender, EventArgs e)
|
|
{
|
|
// call web service
|
|
try
|
|
{
|
|
int result = ES.Services.WebServers.SwitchWebSiteToSharedIP(PanelRequest.ItemID);
|
|
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
ShowSuccessMessage("WEB_SWITCH_TO_SHARED_IP");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_SWITCH_TO_SHARED_IP", ex);
|
|
return;
|
|
}
|
|
|
|
// rebind
|
|
BindWebSite();
|
|
}
|
|
|
|
protected void cmdApplyDedicatedIP_Click(object sender, EventArgs e)
|
|
{
|
|
// call web service
|
|
try
|
|
{
|
|
int addressId = Int32.Parse(ddlIpAddresses.SelectedValue);
|
|
int result = ES.Services.WebServers.SwitchWebSiteToDedicatedIP(PanelRequest.ItemID, addressId);
|
|
|
|
if (result < 0)
|
|
{
|
|
ShowResultMessage(result);
|
|
return;
|
|
}
|
|
|
|
ShowSuccessMessage("WEB_SWITCH_TO_DEDICATED_IP");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessage("WEB_SWITCH_TO_DEDICATED_IP", ex);
|
|
return;
|
|
}
|
|
|
|
// rebind
|
|
HideDedicatedIPPanel();
|
|
BindWebSite();
|
|
}
|
|
|
|
protected void cmdCancelDedicatedIP_Click(object sender, EventArgs e)
|
|
{
|
|
HideDedicatedIPPanel();
|
|
}
|
|
|
|
private void HideDedicatedIPPanel()
|
|
{
|
|
switchToDedicatedIP.Visible = false;
|
|
sharedIP.Visible = true;
|
|
}
|
|
}
|
|
} |