public bool Equals(HandshakeToken other)
 {
     if (other == null)
     {
         return(false);
     }
     return(this.Identifier.Equals(other.Identifier));
 }
        public void CancelLogin(HandshakeToken handshakeToken)
        {
            lock (sessions)
            {
                RemoveExpiredSessions();

                sessions.RemoveAll(s => !s.IsAuthenticated && s.HandshakeToken.Equals(handshakeToken));
            }
        }
        public AuthToken FinishLogin(HandshakeToken handshakeToken, SecondFactor secondFactor)
        {
            lock (sessions)
            {
                RemoveExpiredSessions();

                var session =
                    sessions.SingleOrDefault(s => !s.IsAuthenticated && s.HandshakeToken.Equals(handshakeToken));

                if (session != null)
                {
                    if (session.Owner.HardcodedSecondFactorCode.Equals(secondFactor.OneTimeUseCode))
                    {
                        var toRet = new AuthToken(GetNewHash(), GetSessionExpiryFromNowUtc());

                        session.AuthToken = toRet;

                        return(toRet);
                    }
                }
                throw new FaultException("Authentication error");
            }
        }
        public HandshakeToken BeginLogin(LoginCredentials credentials)
        {
            lock (sessions)
            {
                RemoveExpiredSessions();

                var user = users.SingleOrDefault(u => u.Username == credentials.Username);
                if (user != null)
                {
                    if (user.Password == credentials.Password)
                    {
                        var toRet = new HandshakeToken(GetNewHash(), GetHandshakeExpiryFromNowUtc());
                        sessions.Add(new Session
                        {
                            Owner          = user,
                            HandshakeToken = toRet
                        });
                        return(toRet);
                    }
                }
                throw new FaultException("Bad username or password");
            }
        }
 public AuthToken FinishLogin(HandshakeToken handshakeToken, SecondFactor secondFactor)
 {
     return(Auth.Provider.FinishLogin(handshakeToken, secondFactor));
 }
 public void CancelLogin(HandshakeToken handshakeToken)
 {
     Auth.Provider.CancelLogin(handshakeToken);
 }