Example #1
0
        public bool Authenticate(IUserCredential tool, string role)
        {
            if (IsStandAlone)
            {
                UserIdentity principal = new UserIdentity(UserInfo.Empty, true, new TimeSpan(0), "local");
                AppDomain.CurrentDomain.SetThreadPrincipal(principal);

                _userCollection.Add(principal);
            }
            else
            {
                if (_loginServiceClient == null)
                {
                    _callBack = new LoginServiceCallback(_userCollection);
                    _loginServiceClient = new DuplexClient<ILoginService>(new InstanceContext(_callBack), _configuration.PingInterval);
                    _loginServiceClient.Open();
                    _loginServiceClient.OnChanged += new EventHandler<ClientState>(_loginServiceClient_OnChanged);
                }
                string loginName, password;
            again: ;

                if (tool.GetUserCredential(out loginName, out password))
                {
                    byte[] hash = SecurityUtils.PasswordToHash(password);

                    UserIdentity principal = loginService.Login(loginName, hash, Environment.MachineName);
                    if (principal == null || !principal.IsAuthenticated)
                    {
                        tool.FailedLogin();
                        goto again;
                    }

                    if (role != null && !principal.IsInRole(role))
                    {
                        tool.FailedRole(role);
                        loginService.Logoff(principal);
                        goto again;
                    }

                    AppDomain.CurrentDomain.SetThreadPrincipal(principal);

                    loginService.Subscribe(principal);

                    _userCollection.AddRange(loginService.GetUserLoginCollection());
                }
                else
                {
                    return false;
                    //throw new ApplicationException("User cancel");
                }
            }
            return true;
        }
Example #2
0
        public bool Authenticate(UserIdentity previousId)
        {
            if (_loginServiceClient == null)
            {
                _callBack = new LoginServiceCallback(_userCollection);
                _loginServiceClient = new DuplexClient<ILoginService>(new InstanceContext(_callBack), _configuration.PingInterval);
                _loginServiceClient.Open();
                _loginServiceClient.OnChanged += new EventHandler<ClientState>(_loginServiceClient_OnChanged);
            }

            UserIdentity principal = loginService.Login(previousId.User.Name, previousId.User.Hash, Environment.MachineName);
            if (principal == null || !principal.IsAuthenticated)
            {
                return false;
            }

            AppDomain.CurrentDomain.SetThreadPrincipal(principal);

            loginService.Subscribe(principal);

            _userCollection.AddRange(loginService.GetUserLoginCollection());
            return true;
        }