using System;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;
using CMS.CMSHelper;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.LicenseProvider;
using CMS.OutputFilter;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.UIControls;
public partial class CMSPages_logon : CMSPage, ICallbackEventHandler
{
#region "Variables"
private LocalizedLabel mFailureLabel = null;
private bool? mShowForgottenPassword = null;
public string tablePadding = string.Empty;
public string labelClass = "LoginLabel";
public string textboxClass = "LoginTextBox";
#endregion
#region "Properties"
///
/// Failure text label.
///
public LocalizedLabel FailureLabel
{
get
{
return mFailureLabel ?? (mFailureLabel = (LocalizedLabel)Login1.FindControl("FailureText"));
}
}
///
/// Returns whether is page in forgotten password "mode"
///
private bool IsForgottenPassword
{
get
{
return ValidationHelper.GetBoolean(ViewState["ForgottenPassword"], false);
}
set
{
ViewState["ForgottenPassword"] = value;
}
}
///
/// Gets or sets whether link to forgotten password is shown on logon page.
///
public bool ShowForgottenPassword
{
get
{
if (mShowForgottenPassword == null)
{
mShowForgottenPassword = ValidationHelper.GetBoolean(SettingsHelper.AppSettings["CMSShowForgottenPassLink"], true);
}
return mShowForgottenPassword.Value;
}
set
{
mShowForgottenPassword = value;
}
}
///
/// Gets return URL for logon page
///
public string ReturnUrl
{
get
{
return QueryHelper.GetString("returnurl", string.Empty);
}
}
///
/// Indicates if logon for Site Manager
///
public bool IsSiteManager
{
get
{
return ReturnUrl.ToLowerCSafe().Contains("cmssitemanager");
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
//aifaadd
Session.Clear();
System.Web.Security.FormsAuthentication.SignOut();
CMS.CMSHelper.CMSContext.ClearShoppingCart();
CMS.CMSHelper.CMSContext.CurrentUser = null;
//HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate");
// HttpContext.Current.Response.AddHeader("Pragma", "no-cache");
// HttpContext.Current.Response.AddHeader("Expires", "0");
//end
SetBrowserClass();
AddNoCacheTag();
// Ensure the refresh script
bool sameWindow = (FormStateHelper.PreservePostbackValuesOnLogin && (FormStateHelper.GetSavedState() != null));
const string defaultCondition = "((top.frames['cmsdesktop'] != null) || (top.frames['propheader'] != null))";
if (sameWindow)
{
ScriptHelper.RegisterStartupScript(this, typeof(string), "TopWindow", ScriptHelper.GetScript(" try {if (((document.body.clientWidth < 510) || (document.body.clientHeight < 300)) && " + defaultCondition + ") { var loginUrl = top.window.location.href.replace(/\\/\\(\\w\\([^\\)]+\\)\\)/g, ''); if (loginUrl.indexOf('restorepost=0') < 0) { if (loginUrl.indexOf('?') >= 0) { loginUrl = loginUrl + '&restorepost=0'; } else { loginUrl = loginUrl + '?restorepost=0'; } } top.window.location.replace(loginUrl); }} catch(err){}"));
}
else
{
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "TopWindow", ScriptHelper.GetScript(" if " + defaultCondition + " { try {top.window.location.replace(top.window.location.href.replace(/\\/\\(\\w\\([^\\)]+\\)\\)/g, ''));} catch(err){} }"));
}
// Enable caps lock check
if (ValidationHelper.GetBoolean(SettingsHelper.AppSettings["CMSUseCapsLockNotification"], true))
{
RegisterCAPSLOCKScript();
TextBox txtPassword = (TextBox)Login1.FindControl("Password");
if (txtPassword != null)
{
txtPassword.Attributes.Add("onkeypress", "CheckCapsLock(event)");
}
}
// Site manager prefix
string smPrefix = IsSiteManager ? "SM/" : null;
// Initialize help
CMSAdminControls_UI_PageElements_Help ucHelp = (CMSAdminControls_UI_PageElements_Help)Login1.FindControl("ucHelp");
ucHelp.Tooltip = GetString("logon.helptooltip");
ucHelp.IconUrl = GetImageUrl("Others/LogonForm/" + smPrefix + "HelpButton.png");
ucHelp.TopicName = "LogonTroubleshooting";
LocalizedLabel lblItem = (LocalizedLabel)Login1.FindControl("lblUserName");
if (lblItem != null)
{
lblItem.Text = "{$LogonForm.UserName$}";
}
lblItem = (LocalizedLabel)Login1.FindControl("lblPassword");
if (lblItem != null)
{
lblItem.Text = "{$LogonForm.Password$}";
}
// Display culture link due to value of the key stored in the web.config file
bool showCultureSelector = ValidationHelper.GetBoolean(SettingsHelper.AppSettings["CMSShowLogonCultureSelector"], true);
if (showCultureSelector)
{
ImageButton lnkLanguage = (ImageButton)Login1.FindControl("lnkLanguage");
if (lnkLanguage != null)
{
lnkLanguage.Visible = true;
// Ensure language selection panel functionality
HtmlGenericControl pnlLanguage = (HtmlGenericControl)Login1.FindControl("pnlLanguage");
if (pnlLanguage != null)
{
lnkLanguage.ImageUrl = GetImageUrl("Others/LogonForm/" + smPrefix + "LanguageButton.png");
lnkLanguage.AlternateText = GetString("LogonForm.SelectLanguage");
lnkLanguage.ToolTip = GetString("LogonForm.SelectLanguage");
ltlScript.Text = ScriptHelper.GetScript("function ShowLanguage(id){var panel=document.getElementById(id);if(panel!=null){panel.style.display=(panel.style.display == 'block')?'none':'block';}}");
lnkLanguage.Attributes.Add("onclick", "ShowLanguage('" + pnlLanguage.ClientID + "'); return false;");
}
}
}
// Set up forgotten password link
if (ShowForgottenPassword)
{
ImageButton lnkPassword = (ImageButton)Login1.FindControl("lnkPassword");
if (lnkPassword != null)
{
lnkPassword.Visible = true;
lnkPassword.ImageUrl = GetImageUrl("Others/LogonForm/" + smPrefix + "ForgottenPassword.png");
lnkPassword.AlternateText = GetString("LogonForm.ForgottenPassword");
lnkPassword.ToolTip = GetString("LogonForm.ForgottenPassword");
lnkPassword.Click += lnkPassword_Click;
}
}
LocalizedCheckBox chkItem = (LocalizedCheckBox)Login1.FindControl("chkRememberMe");
if (chkItem != null)
{
chkItem.Text = "{$LogonForm.RememberMe$}";
}
LocalizedButton btnItem = (LocalizedButton)Login1.FindControl("LoginButton");
if (btnItem != null)
{
btnItem.Text = "{$LogonForm.LogOnButton$}";
btnItem.Click += btnItem_Click;
}
RequiredFieldValidator rfvUserName = (RequiredFieldValidator)Login1.FindControl("rfvUserNameRequired");
if (rfvUserName != null)
{
rfvUserName.ToolTip = GetString("LogonForm.NameRequired");
rfvUserName.ErrorMessage = GetString("LogonForm.NameRequired");
}
// Load UI cultures for the dropdown list
if (!RequestHelper.IsPostBack())
{
LoadCultures();
}
if (lblVersion != null)
{
// Show version only if right key is inserted
string versionKey = QueryHelper.GetString("versionkey", string.Empty);
if (EncryptionHelper.VerifyVersionRSA(versionKey))
{
lblVersion.Text = ResHelper.GetString("Footer.Version") + " " + CMSContext.GetFriendlySystemVersion(true);
}
}
Login1.LoggingIn += Login1_LoggingIn;
Login1.LoggedIn += Login1_LoggedIn;
Login1.LoginError += Login1_LoginError;
if (!RequestHelper.IsPostBack())
{
Login1.UserName = QueryHelper.GetString("username", String.Empty);
}
// Ensure username textbox focus
CMSTextBox txtUserName = (CMSTextBox)Login1.FindControl("UserName");
if (txtUserName != null)
{
ScriptHelper.RegisterStartupScript(this, GetType(), "SetFocus", ScriptHelper.GetScript("var txt=document.getElementById('" + txtUserName.ClientID + "');if(txt!=null){txt.focus();}"));
txtUserName.EnableAutoComplete = SecurityHelper.IsAutoCompleteEnabledForLogin(CMSContext.CurrentSiteName);
}
// Ensure different class for Site Manager
if (IsSiteManager)
{
pnlMainContainer.CssClass += " SM";
}
if (QueryHelper.GetBoolean("forgottenpassword", false))
{
SetForgottenPasswordMode();
}
// Register script to update logon error message
StringBuilder sbScript = new StringBuilder();
sbScript.Append(@"
var failedText_", ClientID, "= document.getElementById('", FailureLabel.ClientID, @"');
function UpdateLabel_", ClientID, @"(content, context) {
var lbl = document.getElementById(context);
if(lbl)
{
lbl.innerHTML = content;
lbl.className = """";
}
}");
ScriptHelper.RegisterClientScriptBlock(this, GetType(), "InvalidLogonAttempts_" + ClientID, sbScript.ToString(), true);
}
private void btnItem_Click(object sender, EventArgs e)
{
// Check if should send password
if (IsForgottenPassword)
{
SetForgottenPasswordMode();
TextBox txtUserName = (TextBox)Login1.FindControl("UserName");
LocalizedLabel lblForgottenResult = (LocalizedLabel)Login1.FindControl("lblForgottenResult");
if (txtUserName != null)
{
// Reset password
string siteName = CMSContext.CurrentSiteName;
lblForgottenResult.Visible = true;
bool success;
// Prepare URL to which may user return after password reset
string returnUrl = URLHelper.CurrentURL;
if (!string.IsNullOrEmpty(Login1.UserName))
{
returnUrl = URLHelper.AddParameterToUrl(returnUrl, "username", Login1.UserName);
}
lblForgottenResult.Text = AuthenticationHelper.ForgottenEmailRequest(txtUserName.Text.Trim(), siteName, "Logon page", SettingsKeyProvider.GetStringValue(siteName + ".CMSSendPasswordEmailsFrom"), null, AuthenticationHelper.GetResetPasswordUrl(siteName), out success, returnUrl);
if (!success)
{
lblForgottenResult.CssClass = "Red";
}
}
}
}
private void lnkPassword_Click(object sender, ImageClickEventArgs e)
{
if (!IsForgottenPassword)
{
SetForgottenPasswordMode();
}
else
{
string url = URLHelper.RemoveParameterFromUrl(URLHelper.CurrentURL, "forgottenpassword");
url = URLHelper.AddParameterToUrl(url, "username", Login1.UserName);
URLHelper.Redirect(url);
}
}
private void Login1_LoginError(object sender, EventArgs e)
{
if (FailureLabel != null)
{
if (AuthenticationHelper.DisplayAccountLockInformation(CMSContext.CurrentSiteName))
{
string link = "" + GetString("general.clickhere") + "";
if (ValidationHelper.GetBoolean(RequestStockHelper.GetItem("UserAccountLockedInvalidLogonAttempts"), false))
{
FailureLabel.Text = string.Format(GetString("invalidlogonattempts.unlockaccount.accountlocked") + GetString("invalidlogonattempts.unlockaccount.accountlockedlink"), link);
}
if (ValidationHelper.GetBoolean(RequestStockHelper.GetItem("UserAccountLockedPasswordExpired"), false))
{
FailureLabel.Text = string.Format(GetString("passwordexpiration.accountlocked") + GetString("invalidlogonattempts.unlockaccount.accountlockedlink"), link);
}
}
else
{
FailureLabel.Text = GetString("Login_FailureText");
}
}
}
private void Login1_LoggedIn(object sender, EventArgs e)
{
// ScreenLock - unlock screen
IsScreenLocked = false;
// Ensure response cookie
CookieHelper.EnsureResponseCookie(FormsAuthentication.FormsCookieName);
// Set cookie expiration
if (Login1.RememberMeSet)
{
CookieHelper.ChangeCookieExpiration(FormsAuthentication.FormsCookieName, DateTime.Now.AddYears(1), false);
}
else
{
// Extend the expiration of the authentication cookie if required
if (!AuthenticationHelper.UseSessionCookies && (HttpContext.Current != null) && (HttpContext.Current.Session != null))
{
CookieHelper.ChangeCookieExpiration(FormsAuthentication.FormsCookieName, DateTime.Now.AddMinutes(Session.Timeout), false);
}
}
// Current username
string userName = Login1.UserName;
//edited by aifa cooper 18/11/2015
Session["myuser"] = userName;
//end
// Get info on the authenticated user
UserInfo ui = UserInfoProvider.GetUserInfoForSitePrefix(userName, CMSContext.CurrentSite);
String siteName = CMSContext.CurrentSiteName;
// For site prefix user, authenticate manually
if (ui != null)
{
if (UserInfoProvider.UserNameSitePrefixEnabled(siteName) && UserInfoProvider.IsSitePrefixedUser(ui.UserName))
{
CMSContext.AuthenticateUser(ui.UserName, Login1.RememberMeSet);
}
}
// Check whether safe user name is required and if so get safe username
else if (RequestHelper.IsMixedAuthentication() && UserInfoProvider.UseSafeUserName)
{
userName = ValidationHelper.GetSafeUserName(userName, CMSContext.CurrentSiteName);
if (UserInfoProvider.UserNameSitePrefixEnabled(siteName))
{
// Check for site prefix
ui = UserInfoProvider.GetUserInfoForSitePrefix(userName, CMSContext.CurrentSite);
if (ui != null)
{
userName = ui.UserName;
}
}
CMSContext.AuthenticateUser(userName, Login1.RememberMeSet);
}
// Set culture
DropDownList drpCulture = (DropDownList)Login1.FindControl("drpCulture");
if (drpCulture != null)
{
string selectedCulture = drpCulture.SelectedValue;
// Not the default culture
if (selectedCulture != "")
{
// Update the user
if (ui != null)
{
ui.PreferredUICultureCode = selectedCulture;
UserInfoProvider.SetUserInfo(ui);
}
// Update current user
CMSContext.CurrentUser.PreferredUICultureCode = selectedCulture;
}
}
// Splash screen handling
bool splashScreenEnabled = false;
LicenseKeyInfo lki = LicenseKeyInfoProvider.GetLicenseKeyInfo(URLHelper.GetCurrentDomain());
if ((lki != null) && lki.IsTrial && (ui != null) && ui.UserSettings.UserShowSplashScreen)
{
if (lki.ExpirationDate != DateTimeHelper.ZERO_TIME)
{
// Display splash screen only if using trial license
splashScreenEnabled = true;
}
}
// Splash screen
string returnUrl = ReturnUrl;
// Return url is not specified or is relative path or hash is valid
if (string.IsNullOrEmpty(returnUrl) || returnUrl.StartsWithCSafe("~") || returnUrl.StartsWithCSafe("/") || QueryHelper.ValidateHash("hash"))
{
if (splashScreenEnabled && ui.UserSettings.UserShowSplashScreen && SettingsKeyProvider.GetBoolValue(CMSContext.CurrentSiteName + ".CMSShowSplashScreen"))
{
if ((returnUrl != null) && ((!String.IsNullOrEmpty(CMSContext.CurrentSiteName)) && (returnUrl.Contains("cmsdesk") || IsSiteManager)))
{
URLHelper.Redirect(ResolveUrl("~/CMSSiteManager/SplashScreen.aspx?continueurl=" + returnUrl));
}
}
// Destination page URL
if ((returnUrl != null) && returnUrl.Contains("restorepost"))
{
// Delete the saved state
SavedFormState state = FormStateHelper.GetSavedState();
if (state != null)
{
state.Delete();
}
returnUrl = URLHelper.RemoveParameterFromUrl(returnUrl, "restorepost");
URLHelper.Redirect(ResolveUrl(returnUrl));
}
}
else
{
URLHelper.Redirect(ResolveUrl("~/CMSMessages/Error.aspx?title=" + ResHelper.GetString("general.badhashtitle") + "&text=" + ResHelper.GetString("general.badhashtext")));
}
}
private void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
{
// Ensure all cookies
if (CookieHelper.CurrentCookieLevel <= CookieLevel.All)
{
CookieHelper.ChangeCookieLevel(CookieLevel.All);
}
// Ban IP addresses which are blocked for login
if ((CMSContext.CurrentSite != null) && !BannedIPInfoProvider.IsAllowed(CMSContext.CurrentSiteName, BanControlEnum.Login))
{
e.Cancel = true;
if (FailureLabel != null)
{
FailureLabel.Visible = true;
FailureLabel.Text = GetString("banip.ipisbannedlogin");
}
}
Login1.RememberMeSet = ((CheckBox)Login1.FindControl("chkRememberMe")).Checked;
}
///
/// Load UI cultures for the dropdown list.
///
private void LoadCultures()
{
DropDownList drpCulture = (DropDownList)Login1.FindControl("drpCulture");
if (drpCulture != null)
{
DataSet ds = UICultureInfoProvider.GetAllUICultures();
DataView dvCultures = ds.Tables[0].DefaultView;
dvCultures.Sort = "UICultureName ASC";
drpCulture.DataValueField = "UICultureCode";
drpCulture.DataTextField = "UICultureName";
drpCulture.DataSource = dvCultures;
drpCulture.DataBind();
// Add default value
drpCulture.Items.Insert(0, new ListItem(GetString("LogonForm.DefaultCulture"), ""));
LocalizedLabel lblCulture = (LocalizedLabel)Login1.FindControl("lblCulture");
if (lblCulture != null)
{
lblCulture.AssociatedControlID = drpCulture.ID;
lblCulture.Text = ResHelper.GetString("general.select");
lblCulture.Display = false;
}
}
}
///
/// Registers the script to handle the CAPSLOCK check.
///
private void RegisterCAPSLOCKScript()
{
string script =
"function OnCapslockOn() {\n " +
"document.getElementById('" + FailureLabel.ClientID + "').innerHTML = " + ScriptHelper.GetString(GetString("General.Capslock")) + "; \n" +
"} \n" +
"function OnCapslockOff() {\n " +
"var elem = document.getElementById('" + FailureLabel.ClientID + "');\n" +
"if(elem.innerHTML != ''){elem.innerHTML = '';} \n" +
"} \n";
ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "CapsLockHandling", ScriptHelper.GetScript(script) + ScriptHelper.CapslockScript);
}
///
/// Sets forgotten password mode.
///
private void SetForgottenPasswordMode()
{
LocalizedButton btnItem = (LocalizedButton)Login1.FindControl("LoginButton");
if (btnItem != null)
{
btnItem.ResourceString = "LogonForm.SendRequest";
btnItem.CommandName = string.Empty;
}
TextBox txtPassword = (TextBox)Login1.FindControl("Password");
if (txtPassword != null)
{
txtPassword.Visible = false;
}
LocalizedLabel lblItem = (LocalizedLabel)Login1.FindControl("lblPassword");
if (lblItem != null)
{
lblItem.Visible = false;
}
CheckBox chkRemeber = (CheckBox)Login1.FindControl("chkRememberMe");
if (chkRemeber != null)
{
chkRemeber.Visible = false;
}
LocalizedLabel lblLogOn = (LocalizedLabel)Login1.FindControl("lblLogOn");
if (lblLogOn != null)
{
lblLogOn.ResourceString = "logonform.lnkpasswordretrieval";
}
LocalizedLabel lblUserName = (LocalizedLabel)Login1.FindControl("lblUserName");
if (lblUserName != null)
{
lblUserName.ResourceString = "logonform.lblpasswordretrieval";
}
ImageButton lnkPassword = (ImageButton)Login1.FindControl("lnkPassword");
if (lnkPassword != null)
{
lnkPassword.ToolTip = GetString("logonform.logonbutton");
}
tablePadding = "TablePadding";
labelClass += " PasswordLabel";
IsForgottenPassword = true;
}
#region "ICallbackEventHandler Members"
public string GetCallbackResult()
{
string result = "";
UserInfo ui = UserInfoProvider.GetUserInfo(Login1.UserName);
if (ui != null)
{
string siteName = CMSContext.CurrentSiteName;
// Prepare return URL
string returnUrl = URLHelper.CurrentURL;
if (!string.IsNullOrEmpty(Login1.UserName))
{
returnUrl = URLHelper.AddParameterToUrl(returnUrl, "username", Login1.UserName);
}
switch (UserAccountLockCode.ToEnum(ui.UserAccountLockReason))
{
case UserAccountLockEnum.MaximumInvalidLogonAttemptsReached:
result = AuthenticationHelper.SendUnlockAccountRequest(ui, siteName, "USERLOGON", SettingsKeyProvider.GetStringValue(siteName + ".CMSSendPasswordEmailsFrom"), CMSContext.CurrentResolver, returnUrl);
break;
case UserAccountLockEnum.PasswordExpired:
bool outParam = true;
result = AuthenticationHelper.SendPasswordRequest(ui, siteName, "USERLOGON", SettingsKeyProvider.GetStringValue(siteName + ".CMSSendPasswordEmailsFrom"), "Membership.PasswordExpired", null, AuthenticationHelper.GetResetPasswordUrl(siteName), out outParam, returnUrl);
break;
}
}
return result;
}
public void RaiseCallbackEvent(string eventArgument)
{
}
#endregion
}