// CChangePasswordDlg.cpp: 实现文件
|
//
|
|
#include "stdafx.h"
|
#include "BondEq.h"
|
#include "afxdialogex.h"
|
#include "ChangePasswordDlg.h"
|
|
|
// CChangePasswordDlg 对话框
|
|
IMPLEMENT_DYNAMIC(CChangePasswordDlg, CDialogEx)
|
|
CChangePasswordDlg::CChangePasswordDlg(CWnd* pParent /*=nullptr*/)
|
: CDialogEx(IDD_DIALOG_CHANGE_PASSWORD, pParent)
|
{
|
}
|
|
CChangePasswordDlg::~CChangePasswordDlg()
|
{
|
}
|
|
bool CChangePasswordDlg::changeUserPassword(UserManager& userManager, const std::string& username, const std::string& newPassword)
|
{
|
if (!userManager.changePassword(username, newPassword)) {
|
AfxMessageBox(_T("修改用户密码失败。"));
|
return false;
|
}
|
|
return true;
|
}
|
|
void CChangePasswordDlg::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialogEx::DoDataExchange(pDX);
|
DDX_Control(pDX, IDC_EDIT_CHANGE_USERNAME, m_editUsername);
|
DDX_Control(pDX, IDC_EDIT_CHANGE_CURRENT_PASSWORD, m_editCurrentPassword);
|
DDX_Control(pDX, IDC_EDIT_CHANGE_NEW_PASSWORD, m_editNewPassword);
|
DDX_Control(pDX, IDC_EDIT_CHANGE_CONFIRM_PASSWORD, m_editConfirmPassword);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CChangePasswordDlg, CDialogEx)
|
ON_BN_CLICKED(IDOK, &CChangePasswordDlg::OnBnClickedOk)
|
END_MESSAGE_MAP()
|
|
|
// CChangePasswordDlg 消息处理程序
|
|
|
BOOL CChangePasswordDlg::OnInitDialog()
|
{
|
CDialogEx::OnInitDialog();
|
|
// 设置窗口标题和初始值
|
SetWindowText(_T("修改密码"));
|
|
UserManager& userManager = UserManager::getInstance();
|
if (userManager.isLoggedIn()) {
|
m_editUsername.SetWindowText(userManager.getCurrentUser().c_str());
|
}
|
|
return TRUE;
|
}
|
|
void CChangePasswordDlg::OnBnClickedOk()
|
{
|
CString username, currentPassword, newPassword, confirmPassword;
|
m_editUsername.GetWindowText(username);
|
m_editCurrentPassword.GetWindowText(currentPassword);
|
m_editNewPassword.GetWindowText(newPassword);
|
m_editConfirmPassword.GetWindowText(confirmPassword);
|
|
if (username.IsEmpty() || currentPassword.IsEmpty() || newPassword.IsEmpty() || confirmPassword.IsEmpty()) {
|
AfxMessageBox(_T("所有字段均为必填项。"));
|
return;
|
}
|
|
if (newPassword.Compare(confirmPassword) != 0) {
|
AfxMessageBox(_T("新密码与确认密码不匹配。"));
|
return;
|
}
|
|
SystemLogManager& logManager = SystemLogManager::getInstance();
|
if (newPassword.Compare(currentPassword) == 0) {
|
EndDialog(IDCANCEL);
|
return;
|
}
|
|
#ifdef UNICODE
|
std::string strUsername = CStringA(username);
|
std::string strCurrentPassword = CStringA(currentPassword);
|
std::string strNewPassword = CStringA(newPassword);
|
#else
|
std::string strUsername = username;
|
std::string strCurrentPassword = currentPassword;
|
std::string strNewPassword = newPassword;
|
#endif
|
|
UserManager& userManager = UserManager::getInstance();
|
if (userManager.isLoggedIn() && strCurrentPassword.compare(userManager.getCurrentPass()) == 0) {
|
if (changeUserPassword(userManager, strUsername, strNewPassword)) {
|
EndDialog(IDOK);
|
logManager.log(SystemLogManager::LogType::Info, "修改密码成功!", strUsername);
|
}
|
}
|
else {
|
if (userManager.login(strUsername, strCurrentPassword)) {
|
if (changeUserPassword(userManager, strUsername, strNewPassword)) {
|
EndDialog(IDOK);
|
logManager.log(SystemLogManager::LogType::Info, "修改密码成功!", strUsername);
|
}
|
else {
|
userManager.logout();
|
}
|
}
|
else {
|
AfxMessageBox(_T("当前用户名或密码输入错误。"));
|
}
|
}
|
}
|