using System;
using System.Collections;
using System.Text;
using System.Web.UI;
using CMS.FormControls;
using CMS.GlobalHelper;
using CMS.LicenseProvider;
using CMS.SalesForce;
using CMS.SettingsProvider;
using CMS.SiteProvider;
///
/// Displays the organization credentials setting, and allows the user to authorize access to SalesForce organization.
///
public partial class CMSModules_ContactManagement_FormControls_SalesForce_Authorization : FormEngineUserControl, ICallbackEventHandler
{
#region "Private members"
private bool mEnabled = true;
#endregion
#region "Public properties"
///
/// Gets or sets the organization credentials in encrypted form.
///
public override object Value
{
get
{
return CredentialsHiddenField.Value;
}
set
{
CredentialsHiddenField.Value = value as string;
}
}
///
/// Gets or sets the value indicating whether this control is enabled.
///
public override bool Enabled
{
get
{
return mEnabled;
}
set
{
mEnabled = value;
}
}
///
/// Gets the client identifier of the control holding the setting value.
///
public override string ValueElementID
{
get
{
return CredentialsHiddenField.ClientID;
}
}
#endregion
#region "Protected properties"
protected string ParametersId
{
get
{
string parametersId = ViewState["PID"] as string;
if (String.IsNullOrEmpty(parametersId))
{
parametersId = Guid.NewGuid().ToString("N");
ViewState["PID"] = parametersId;
}
return parametersId;
}
}
#endregion
#region "Life-cycle methods"
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Scripts
ScriptHelper.RegisterDialogScript(Page);
// Localization
SetupButton.Text = GetString("sf.authorize");
ClearButton.Text = GetString("sf.removeauthorization");
// Events
ClearButton.Click += new EventHandler(ClearButton_Click);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
string baseUrl = URLHelper.ResolveUrl("~/CMSModules/ContactManagement/Pages/Tools/SalesForce/AuthorizationSetupPrologue.aspx");
if (URLHelper.Url.Scheme == "https" || ValidationHelper.GetBoolean(SettingsHelper.AppSettings["CMSSalesForceHttpCallbackEnabled"], false))
{
baseUrl = URLHelper.ResolveUrl("~/CMSModules/ContactManagement/Pages/Tools/SalesForce/AuthorizationSetup.aspx");
}
string url = URLHelper.AddParameterToUrl(baseUrl, "pid", ParametersId);
string script = String.Format("function SalesForce_AuthorizeAccess (arg, context) {{ modalDialog('{0}', 'SalesForceAccessAuthorization', '950', '600', null, false, false, true); return false; }}", URLHelper.AddParameterToUrl(url, "hash", QueryHelper.GetHash(url)));
ScriptHelper.RegisterClientScriptBlock(this, GetType(), "SalesForce_AuthorizeAccess", script, true);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
InitializeControls();
}
#endregion
#region "Control event methods"
protected void ClearButton_Click(object sender, EventArgs e)
{
Value = String.Empty;
MessageLabel.Text = GetString("sf.organizationcredentialscleared");
}
#endregion
#region "Private methods"
private void InitializeControls()
{
InitializeSetupButton();
if (String.IsNullOrEmpty(MessageLabel.Text))
{
// No HTML encoding
MessageLabel.Text = CreateMessage();
}
SetupButton.Visible = Enabled;
ClearButton.Visible = Enabled && !String.IsNullOrEmpty(Value as string);
}
private void InitializeSetupButton()
{
SetupButton.OnClientClick = String.Format("{0}; return false;", Page.ClientScript.GetCallbackEventReference(this, null, "SalesForce_AuthorizeAccess", null));
}
private Hashtable CreateParameters()
{
Hashtable parameters = new Hashtable();
parameters.Add("Credentials", Value);
parameters.Add("CredentialsHiddenFieldClientId", CredentialsHiddenField.ClientID);
parameters.Add("MessageLabelClientId", MessageLabel.ClientID);
parameters.Add("UrlScheme", URLHelper.Url.Scheme);
parameters.Add("UrlPort", URLHelper.Url.Port);
parameters.Add("SiteName", GetCurrentSiteNameForSettings());
return parameters;
}
private string CreateMessage()
{
StringBuilder message = new StringBuilder();
string content = Value as string;
if (String.IsNullOrEmpty(content))
{
message.Append(GetString("sf.nocredentials"));
}
else
{
OrganizationCredentials credentials = OrganizationCredentials.Deserialize(EncryptionHelper.DecryptData(content).TrimEnd('\0'));
message.AppendFormat(GetString("sf.organizationcredentialspresent"), credentials.UserName, credentials.OrganizationName);
}
return message.ToString();
}
private string GetCurrentSiteNameForSettings()
{
int siteId = QueryHelper.GetInteger("SiteID", 0);
SiteInfo site = SiteInfoProvider.GetSiteInfo(siteId);
if (site == null)
{
return String.Empty;
}
return site.SiteName;
}
#endregion
#region ICallbackEventHandler Members
string ICallbackEventHandler.GetCallbackResult()
{
return null;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
Hashtable parameters = CreateParameters();
WindowHelper.Add(ParametersId, parameters);
}
#endregion
}