using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
public partial class CMSModules_Membership_Controls_ResetPassword : CMSUserControl
{
#region "Variables"
private string siteName = string.Empty;
private double interval = 0;
private string hash = string.Empty;
private string time = string.Empty;
private int userID = 0;
private int policyReq = 0;
private int pwdExp = 0;
private string returnUrl = null;
#endregion
#region "Properties"
///
/// Text shown if request hash isn't found.
///
public string InvalidRequestText
{
get;
set;
}
public string ExceededIntervalText
{
get;
set;
}
///
/// Url on which is user redirected after successful password reset.
///
public string RedirectUrl
{
get;
set;
}
///
/// E-mail address from which e-mail is sent.
///
public string SendEmailFrom
{
get;
set;
}
///
/// Text shown when password reset was successful.
///
public string SuccessText
{
get;
set;
}
///
/// Messages placeholder
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
#endregion
#region "Page events"
protected void Page_Init(object sender, EventArgs e)
{
if (!RequestHelper.IsPostBack())
{
// Clear session value
SessionHelper.SetValue("UserPasswordRequestID", 0);
}
}
///
/// Page load.
///
/// Sender.
/// Arguments
protected void Page_Load(object sender, EventArgs e)
{
userID = ValidationHelper.GetInteger(SessionHelper.GetValue("UserPasswordRequestID"), 0);
hash = QueryHelper.GetString("hash", string.Empty);
time = QueryHelper.GetString("datetime", string.Empty);
policyReq = QueryHelper.GetInteger("policyreq", 0);
pwdExp = QueryHelper.GetInteger("exp", 0);
returnUrl = QueryHelper.GetString("returnurl", null);
btnReset.Text = GetString("general.reset");
rfvConfirmPassword.Text = GetString("general.requiresvalue");
siteName = CMSContext.CurrentSiteName;
// Get interval from settings
interval = SettingsKeyProvider.GetDoubleValue(siteName + ".CMSResetPasswordInterval");
// Prepare failed message
string invalidRequestMessage = DataHelper.GetNotEmpty(InvalidRequestText, String.Format(ResHelper.GetString("membership.passwresetfailed"), ResolveUrl("~/cmspages/logon.aspx?forgottenpassword=1")));
// Reset password cancelation
if (QueryHelper.GetBoolean("cancel", false))
{
// Get user info
UserInfo ui = UserInfoProvider.GetUserInfoWithSettings("UserPasswordRequestHash = '" + SqlHelperClass.GetSafeQueryString(hash, true) + "'");
if (ui != null)
{
ui.UserPasswordRequestHash = null;
UserInfoProvider.SetUserInfo(ui);
SessionHelper.Remove("UserPasswordRequestID");
ShowInformation(GetString("membership.passwresetcancelled"));
}
else
{
ShowError(invalidRequestMessage);
}
pnlReset.Visible = false;
return;
}
// Reset password request
if (!URLHelper.IsPostback())
{
if (policyReq > 0)
{
ShowInformation(GetString("passwordpolicy.policynotmet") + "
" + passStrength.GetPasswordPolicyHint());
}
// Prepare query
string query = "UserPasswordRequestHash = '" + SqlHelperClass.GetSafeQueryString(hash, true) + "'";
if (userID > 0)
{
query = SqlHelperClass.AddWhereCondition(query, "UserID = " + userID, "OR");
}
// Get user info
UserInfo ui = UserInfoProvider.GetUserInfoWithSettings(query);
// Validate request
ResetPasswordResultEnum result = AuthenticationHelper.ValidateResetPassword(ui, hash, time, interval, "Reset password control");
// Prepare messages
string timeExceededMessage = DataHelper.GetNotEmpty(ExceededIntervalText, String.Format(ResHelper.GetString("membership.passwreqinterval"), ResolveUrl("~/cmspages/logon.aspx?forgottenpassword=1")));
string resultMessage = string.Empty;
// Check result
switch (result)
{
case ResetPasswordResultEnum.Success:
// Save user is to session
SessionHelper.SetValue("UserPasswordRequestID", ui.UserID);
// Delete it from user info
ui.UserPasswordRequestHash = null;
UserInfoProvider.SetUserInfo(ui);
break;
case ResetPasswordResultEnum.TimeExceeded:
resultMessage = timeExceededMessage;
break;
default:
resultMessage = invalidRequestMessage;
break;
}
if (!string.IsNullOrEmpty(resultMessage))
{
// Show error message
ShowError(resultMessage);
pnlReset.Visible = false;
return;
}
}
}
///
/// Click event of btnOk.
///
/// Sender
/// Arguments
protected void btnReset_Click(object sender, EventArgs e)
{
if ((passStrength.Text.Length > 0) && rfvConfirmPassword.IsValid)
{
if (passStrength.Text == txtConfirmPassword.Text)
{
// Check policy
if (passStrength.IsValid())
{
// Check if password expired
if (pwdExp > 0)
{
UserInfo ui = UserInfoProvider.GetUserInfo(userID);
if (!UserInfoProvider.IsUserPasswordDifferent(ui, passStrength.Text))
{
ShowError(GetString("passreset.newpasswordrequired"));
return;
}
}
// Get e-mail address of sender
string emailFrom = DataHelper.GetNotEmpty(SendEmailFrom, SettingsKeyProvider.GetStringValue(siteName + ".CMSSendPasswordEmailsFrom"));
// Try to reset password and show result to user
bool success;
string resultText = AuthenticationHelper.ResetPassword(hash, time, userID, interval, passStrength.Text, "Reset password control", emailFrom, siteName, null, out success, InvalidRequestText, ExceededIntervalText, returnUrl);
// If password reset was successful
if (success)
{
SessionHelper.Remove("UserPasswordRequestID");
// Redirect to specified URL
if (!string.IsNullOrEmpty(RedirectUrl))
{
URLHelper.Redirect(RedirectUrl);
}
// Get proper text
ShowConfirmation(DataHelper.GetNotEmpty(SuccessText, resultText));
pnlReset.Visible = false;
lblLogonLink.Text = string.Format(GetString("memberhsip.logonlink"), returnUrl);
}
else
{
ShowError(resultText);
}
}
else
{
ShowError(AuthenticationHelper.GetPolicyViolationMessage(CMSContext.CurrentSiteName));
}
}
else
{
ShowError(GetString("passreset.notmatch"));
}
}
else
{
ShowError(GetString("general.requiresvalue"));
}
}
#endregion
}