Esempio n. 1
0
        /// <summary>
        /// Export register file.
        /// </summary>
        private void exportBtn_Click(object sender, EventArgs e)
        {
            try {
                if (registerFileDialog.ShowDialog() == DialogResult.OK)
                {
                    var lcode = File.ReadAllText(registerFileDialog.FileName);
                    if (String.IsNullOrWhiteSpace(lcode))
                    {
                        registerCode.Clear();
                        MessageBox.Show("注册码不能为空,请输入注册码。", "系统警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    registerCode.Text = lcode;
                    Common.CheckLicense(lcode);
                    if (Common.LicenseStatus == EnmLicenseStatus.Licensed)
                    {
                        Common.CurApplication.AppLicense = lcode;
                        var registryEntity = new RegistryDatabase();
                        registryEntity.SaveSystemApplication(Common.CurApplication);

                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine("软件注册成功!");
                        sb.AppendLine();
                        sb.AppendFormat("用户: {0}{1}", Common.CurLicense.Name, Environment.NewLine);
                        sb.AppendFormat("公司: {0}{1}", Common.CurLicense.Company, Environment.NewLine);
                        sb.AppendFormat("Email: {0}{1}", Common.CurLicense.Email, Environment.NewLine);
                        sb.AppendFormat("有效期: {0}", new DateTime(2099, 12, 31).Equals(Common.CurLicense.Expiration) ? "永不过期" : Common.GetDateString(Common.CurLicense.Expiration));

                        Common.WriteLog(DateTime.Now, EnmMsgType.Warning, "System", "Delta.MPS.AccessSystem.RegisterForm", sb.ToString().Replace(Environment.NewLine, " "), null);
                        MessageBox.Show(sb.ToString(), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    else if (Common.LicenseStatus == EnmLicenseStatus.Expired)
                    {
                        MessageBox.Show("注册码已过期,注册失败。", "系统警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        MessageBox.Show("无效的注册码,注册失败。", "系统警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            } catch (Exception err) {
                Common.WriteLog(DateTime.Now, EnmMsgType.Error, "System", "Delta.MPS.AccessSystem.RegisterForm", err.Message, err.StackTrace);
                MessageBox.Show(err.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// The click event of the login button.
        /// </summary>
        private void loginBtn_Click(object sender, EventArgs e)
        {
            try {
                if (String.IsNullOrWhiteSpace(userTxtCombo.Text))
                {
                    userTxtCombo.Focus();
                    setMsgTip("用户名不能为空", EnmMsgType.Warning);
                    return;
                }

                if (String.IsNullOrWhiteSpace(pwdTxtBox.Text))
                {
                    pwdTxtBox.Focus();
                    setMsgTip("密码不能为空", EnmMsgType.Warning);
                    return;
                }

                if (String.IsNullOrWhiteSpace(codeTxtBox.Text))
                {
                    codeTxtBox.Focus();
                    setMsgTip("验证码不能为空", EnmMsgType.Warning);
                    return;
                }

                if (!Common.CheckCodeString.Equals(codeTxtBox.Text, StringComparison.CurrentCultureIgnoreCase))
                {
                    codeTxtBox.Focus();
                    setMsgTip("验证码输入错误", EnmMsgType.Warning);
                    generateCodeImage();
                    return;
                }

                lastUser            = new RecentUserInfo();
                lastUser.UniqueID   = Guid.NewGuid();
                lastUser.RecentUser = Common.InputText(userTxtCombo.Text, 50);
                lastUser.RecentPwd  = Common.InputText(pwdTxtBox.Text, 50);
                lastUser.RecentLan  = LanguageCombo.SelectedValue.ToString();
                lastUser.RecentRmb  = remeberCK.Checked;
                lastUser.UpdateTime = DateTime.Now;
                loginThread         = new Thread(() => {
                    try {
                        if (lastUser == null)
                        {
                            return;
                        }

                        setLoginStatus(EnmLoginStatus.Logining);
                        setMsgTip("验证系统配置,请稍等...", EnmMsgType.Info);
                        Thread.Sleep(500);

                        var databaseServers = registryEntity.GetDatabaseServers();
                        var masterDB        = databaseServers.Find(db => { return(db.DatabaseIntention == EnmDBIntention.Master); });
                        if (masterDB == null)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("主数据库未配置", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }
                        SQLHelper.ConnectionStringLocalTransaction = Common.CreateConnectionString(masterDB);

                        var hisDB = databaseServers.Find(db => { return(db.DatabaseIntention == EnmDBIntention.History); });
                        if (hisDB == null)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("历史数据库未配置", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }
                        SQLHelper.HisConnectionStringLocalTransaction = Common.CreateConnectionString(hisDB);

                        Common.CurInterfaceParamter = registryEntity.GetInterfaceParamter();
                        if (Common.CurInterfaceParamter == null)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("接口参数未配置", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        var memberShipEntity = new MemberShip();
                        var users            = memberShipEntity.GetClientUsers(Common.CurInterfaceParamter.InterfaceUser);
                        if (users == null || users.Count == 0)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("接口参数配置错误,登录用户不存在", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        var client = users.Find(u => u.Pwd.Equals(Common.CurInterfaceParamter.InterfacePwd, StringComparison.CurrentCultureIgnoreCase));
                        if (client == null)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("接口参数配置错误,登录密码错误", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        if (client.PortVer != 7)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("接口参数配置错误,登录用户非门禁浏览器用户", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        setMsgTip("正在登录,请稍等...", EnmMsgType.Info);
                        Thread.Sleep(500);

                        Common.CurUser = memberShipEntity.GetUser(lastUser.RecentUser);
                        if (Common.CurUser == null)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("用户名不存在,登录失败。", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        if (!Common.CurUser.Enabled)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("用户已禁用,请与管理员联系。", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        if (Common.CurUser.LimitDate < DateTime.Today)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("用户已过期,请与管理员联系。", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        if (Common.IsCheckFailedPasswordAttemptCount)
                        {
                            if (Common.CurUser.IsLockedOut &&
                                DateTime.Now.Subtract(Common.CurUser.FailedPasswordDate).TotalSeconds >= 3600 * Common.MaxLockedOutHours)
                            {
                                Common.CurUser.FailedPasswordAttemptCount = 0;
                                Common.CurUser.IsLockedOut = false;
                                memberShipEntity.UpdateUser(Common.CurUser);
                            }

                            if (!Common.CurUser.IsLockedOut && Common.CurUser.FailedPasswordAttemptCount > 0 &&
                                DateTime.Now.Subtract(Common.CurUser.FailedPasswordDate).TotalSeconds >= 3600)
                            {
                                Common.CurUser.FailedPasswordAttemptCount = 0;
                                memberShipEntity.UpdateUser(Common.CurUser);
                            }
                        }

                        if (Common.IsCheckFailedPasswordAttemptCount && Common.CurUser.IsLockedOut)
                        {
                            var ts = Common.CurUser.FailedPasswordDate.AddSeconds(3600 * Common.MaxLockedOutHours).Subtract(DateTime.Now);
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip(String.Format("用户已锁定,还有{0}小时{1}分钟将自动解锁。", ts.Hours, ts.Minutes), EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        if (!memberShipEntity.CheckPassword(Common.CurUser.Password, lastUser.RecentPwd, Common.CurUser.PasswordFormat, Common.CurUser.PasswordSalt))
                        {
                            if (Common.IsCheckFailedPasswordAttemptCount)
                            {
                                Common.CurUser.FailedPasswordAttemptCount++;
                                Common.CurUser.FailedPasswordDate = DateTime.Now;
                                Common.CurUser.IsLockedOut        = Common.CurUser.FailedPasswordAttemptCount >= Common.MaxFailedPasswordAttemptCount;
                                if (Common.CurUser.IsLockedOut)
                                {
                                    Common.CurUser.LastLockoutDate = DateTime.Now;
                                }
                                memberShipEntity.UpdateUser(Common.CurUser);

                                if (!Common.CurUser.IsLockedOut)
                                {
                                    setLoginStatus(EnmLoginStatus.Off);
                                    setMsgTip(String.Format("密码错误,还可以再输入{0}次。", Common.MaxFailedPasswordAttemptCount - Common.CurUser.FailedPasswordAttemptCount), EnmMsgType.Warning);
                                    generateCodeImage();
                                    return;
                                }
                                else
                                {
                                    setLoginStatus(EnmLoginStatus.Off);
                                    setMsgTip(String.Format("密码错误,用户已锁定,将在{0}小时后自动解锁。", Common.MaxLockedOutHours), EnmMsgType.Warning);
                                    Common.WriteLog(DateTime.Now, EnmMsgType.Info, Common.CurUser.UserName, "Delta.MPS.AccessSystem.LoginForm", String.Format("用户已锁定,将在{0}小时后自动解锁。", Common.MaxLockedOutHours), null);
                                    generateCodeImage();
                                    return;
                                }
                            }
                            else
                            {
                                setLoginStatus(EnmLoginStatus.Off);
                                setMsgTip("密码错误,登录失败。", EnmMsgType.Warning);
                                generateCodeImage();
                                return;
                            }
                        }

                        //登录成功,重置密码输入错误次数。
                        if (Common.IsCheckFailedPasswordAttemptCount)
                        {
                            Common.CurUser.FailedPasswordAttemptCount = 0;
                            Common.CurUser.IsLockedOut = false;
                            memberShipEntity.UpdateUser(Common.CurUser);
                        }

                        //验证角色
                        Common.CurUser.Role = memberShipEntity.GetRole(Common.CurUser.Role.RoleID);
                        if (Common.CurUser.Role == null)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("用户未授权角色,请与管理员联系。", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        if (!Common.CurUser.Role.Enabled)
                        {
                            setLoginStatus(EnmLoginStatus.Off);
                            setMsgTip("授权角色已禁用,请与管理员联系。", EnmMsgType.Warning);
                            generateCodeImage();
                            return;
                        }

                        lastUser.RecentPwd = lastUser.RecentRmb ? lastUser.RecentPwd : String.Empty;
                        registryEntity.SaveRecentUsers(new List <RecentUserInfo>()
                        {
                            lastUser
                        });
                        recentUsers.RemoveAll(user => { return(user.RecentUser.Equals(lastUser.RecentUser)); });
                        recentUsers.Add(lastUser);

                        setLoginStatus(EnmLoginStatus.Logined);
                        setMsgTip("登录成功,准备加载数据...", EnmMsgType.Info);
                        Common.WriteLog(DateTime.Now, EnmMsgType.Login, Common.CurUser.UserName, "Delta.MPS.AccessSystem.MainForm", String.Format("{0} - {1} 登录系统", Common.CurUser.Role.RoleName, Common.CurUser.UserName), null);

                        setLoginStatus(EnmLoginStatus.Loading);
                        setMsgTip("加载角色信息(1/5)...", EnmMsgType.Info);
                        Common.CurUser.Role.Authorizations = memberShipEntity.GetRoleAuthorizations(Common.CurUser.Role.RoleID);
                        Common.CurUser.Role.Nodes          = memberShipEntity.GetRoleNodes(Common.CurUser.Role.RoleID);

                        setMsgTip("加载部门信息(2/5)...", EnmMsgType.Info);
                        Common.CurUser.Role.Departments = memberShipEntity.GetRoleDepartments(Common.CurUser.Role.RoleID);

                        setMsgTip("加载设备信息(3/5)...", EnmMsgType.Info);
                        Common.CurUser.Role.Devices = memberShipEntity.GetRoleDevices(Common.CurUser.Role.RoleID);

                        setMsgTip("系统数据校验(4/5)...", EnmMsgType.Info);
                        new MemberShip().VerifySystemData();

                        setMsgTip("软件授权校验(5/5)...", EnmMsgType.Info);
                        if (Common.IsCheckLicense)
                        {
                            Common.CurApplication.UniqueID = Common.GetMachineCode();
                            var lastApplication            = registryEntity.GetSystemApplication(Common.CurApplication.UniqueID);
                            if (lastApplication != null)
                            {
                                Common.CurApplication.AppLicense   = lastApplication.AppLicense;
                                Common.CurApplication.AppFirstTime = lastApplication.AppFirstTime;
                            }
                            registryEntity.SaveSystemApplication(Common.CurApplication);
                            Common.CheckLicense(Common.CurApplication.AppLicense);
                        }

                        setLoginStatus(EnmLoginStatus.Loaded);
                        setMsgTip("正在启动主程序...", EnmMsgType.Info);

                        this.Invoke(new MethodInvoker(delegate {
                            this.DialogResult = DialogResult.OK;
                            this.Close();
                        }));
                    } catch (ThreadAbortException) {
                    } catch (Exception err) {
                        Common.WriteLog(DateTime.Now, EnmMsgType.Error, "System", "Delta.MPS.AccessSystem.LoginForm", err.Message, err.StackTrace);
                        MessageBox.Show(err.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                });

                loginThread.IsBackground = true;
                loginThread.Start();
            } catch (Exception err) {
                Common.WriteLog(DateTime.Now, EnmMsgType.Error, "System", "Delta.MPS.AccessSystem.LoginForm", err.Message, err.StackTrace);
                MessageBox.Show(err.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }