Exemplo n.º 1
0
        public VerifyResult CheckVerificationToken(int id, VerificationToken token)
        {
            if (token == null)
            {
                return(VerifyResult.InvalidToken);
            }

            string email;

            return(this.CheckVerificationToken(id, token, out email));
        }
Exemplo n.º 2
0
        public VerifyResult CheckVerificationToken(int id, VerificationToken token, out string email)
        {
            string userEmail = null;
            var    result    = this.Connection.InTransaction(true).Do(t =>
            {
                var data = t.ReadOne("SELECT Email, UserBlocked, VerificationToken FROM Users WHERE Id=@id", new { id });
                return(VerifyToken(data, token, out userEmail));
            });

            email = userEmail;
            return(result);
        }
Exemplo n.º 3
0
        public VerifyResult CheckAndClearVerificationToken(int id, VerificationToken token, out string email, string newPassword = null)
        {
            string       userEmail = null;
            VerifyResult result    = this.Connection.InTransaction(true).Do(
                t =>
            {
                var data = t.ReadOne("SELECT Email, Password, UserBlocked, VerificationToken FROM Users WHERE Id=@id", new { id });

                result = VerifyToken(data, token, out userEmail);

                if ((newPassword != null && !this.ValidatePassword(newPassword)) ||
                    (newPassword == null && data.Password == null))
                {
                    return(VerifyResult.InvalidPassword);
                }

                if (result != VerifyResult.Success)
                {
                    return(result);
                }

                var values = new Dictionary <string, object> {
                    { "VerificationToken", null }, { "EmailVerified", true }
                };
                if (newPassword != null)
                {
                    byte[] salt        = null;
                    var hashedPassword = this.PasswordHasher.Hash(newPassword, ref salt);
                    values.Add("Password", hashedPassword);
                    values.Add("Salt", salt);
                }

                t.Update("Users", values, "Id=@id", new { id });

                return(result);
            });

            email = userEmail;
            return(result);
        }
Exemplo n.º 4
0
        private static VerifyResult VerifyToken(dynamic data, VerificationToken token, out string email)
        {
            if (data == null)
            {
                email = null;
                return(VerifyResult.UnknownUser);
            }

            email = data.Email;

            if (data.UserBlocked)
            {
                return(VerifyResult.UserBlocked);
            }

            byte[] storedToken = data.VerificationToken;
            if (token == null || !AreNotNullAndEqual(storedToken, token.Data))
            {
                return(VerifyResult.InvalidToken);
            }

            return(VerifyResult.Success);
        }
Exemplo n.º 5
0
        public VerifyResult ResetVerificationToken(string email, out VerificationToken token, out int id)
        {
            if (!ValidateAndNormalizeEmail(ref email))
            {
                token = null;
                id    = 0;
                return(VerifyResult.UnknownUser);
            }

            VerificationToken localToken = null;
            int localId = 0;
            var result  = this.Connection.InTransaction(true).Do(
                t =>
            {
                var data = t.ReadOne("SELECT Id, EmailVerified, UserBlocked FROM Users WHERE Email=@email", new { email });

                if (data == null)
                {
                    return(VerifyResult.UnknownUser);
                }

                localId = data.Id;

                if (data.UserBlocked)
                {
                    return(VerifyResult.UserBlocked);
                }

                localToken = VerificationToken.Generate();
                t.Update("Users", new { VerificationToken = localToken.Data }, "Id=@id", new { id = localId });
                return(VerifyResult.Success);
            });

            token = localToken;
            id    = localId;
            return(result);
        }
Exemplo n.º 6
0
        public VerifyResult ResetVerificationToken(string email, out VerificationToken token)
        {
            int id;

            return(this.ResetVerificationToken(email, out token, out id));
        }
        public VerifyResult CheckAndClearVerificationToken(int id, VerificationToken token, out string email, string newPassword = null)
        {
            string userEmail = null;
            VerifyResult result = this.Connection.InTransaction(true).Do(
                t =>
                {
                    var data = t.ReadOne("SELECT Email, Password, UserBlocked, VerificationToken FROM Users WHERE Id=@id", new { id });

                    result = VerifyToken(data, token, out userEmail);

                    if ((newPassword != null && !this.ValidatePassword(newPassword))
                        || (newPassword == null && data.Password == null))
                    {
                        return VerifyResult.InvalidPassword;
                    }

                    if (result != VerifyResult.Success)
                    {
                        return result;
                    }

                    var values = new Dictionary<string, object> { { "VerificationToken", null }, { "EmailVerified", true } };
                    if (newPassword != null)
                    {
                        byte[] salt = null;
                        var hashedPassword = this.PasswordHasher.Hash(newPassword, ref salt);
                        values.Add("Password", hashedPassword);
                        values.Add("Salt", salt);
                    }

                    t.Update("Users", values, "Id=@id", new { id });

                    return result;
                });
            email = userEmail;
            return result;
        }
 public RegisterResult Register(string email, string password, out VerificationToken token)
 {
     int id;
     return this.Register(email, password, out token, out id);
 }
        public RegisterResult Register(string email, string password, out VerificationToken token, out int id)
        {
            if (!ValidateAndNormalizeEmail(ref email))
            {
                id = 0;
                token = null;
                return RegisterResult.InvalidEmail;
            }

            if (password != null && !this.ValidatePassword(password))
            {
                id = 0;
                token = null;
                return RegisterResult.InvalidPassword;
            }

            byte[] salt = null;
            byte[] hash = null;
            if (password != null)
            {
                hash = this.PasswordHasher.Hash(password, ref salt);
            }

            token = VerificationToken.Generate();

            var user = new
                    {
                        Salt = salt,
                        Password = hash,
                        Email = email,
                        EmailVerified = false,
                        UserBlocked = false,
                        VerificationToken = token.Data
                    };

            try
            {
                int userId = 0;
                var result = this.Connection.InTransaction(true).Do(
                t =>
                {
                    var userInfo = t.ReadOne("SELECT Id, UserBlocked FROM Users WHERE Email=@email", new { email });
                    if (userInfo != null)
                    {
                        userId = userInfo.Id;
                        return userInfo.UserBlocked 
                            ? RegisterResult.UserBlocked
                            : RegisterResult.DuplicateEmail;
                    }

                    t.Save("Users", user, out userId);
                    return RegisterResult.Success;
                });

                id = userId;
                return result;
            }
            catch (DbException exception)
            {
                const int MysqlDuplicateEntryServerErrorCode = 1062;
                object exceptionData = exception.Data["Server Error Code"];
                if (exceptionData is int && (int)exceptionData == MysqlDuplicateEntryServerErrorCode)
                {
                    id = 0;
                    token = null;
                    return RegisterResult.DuplicateEmail;
                }

                throw;
            }
        }
        public VerifyResult ResetVerificationToken(string email, out VerificationToken token, out int id)
        {
            if (!ValidateAndNormalizeEmail(ref email))
            {
                token = null;
                id = 0;
                return VerifyResult.UnknownUser;
            }

            VerificationToken localToken = null;
            int localId = 0;
            var result = this.Connection.InTransaction(true).Do(
                t =>
                {
                    var data = t.ReadOne("SELECT Id, EmailVerified, UserBlocked FROM Users WHERE Email=@email", new { email });

                    if (data == null)
                    {
                        return VerifyResult.UnknownUser;
                    }

                    localId = data.Id;

                    if (data.UserBlocked)
                    {    
                        return VerifyResult.UserBlocked;
                    }
                    
                    localToken = VerificationToken.Generate();
                    t.Update("Users", new { VerificationToken = localToken.Data }, "Id=@id", new { id = localId });
                    return VerifyResult.Success;
                });
            token = localToken;
            id = localId;
            return result;
        }
        private static VerifyResult VerifyToken(dynamic data, VerificationToken token, out string email)
        {
            if (data == null)
            {
                email = null;
                return VerifyResult.UnknownUser;
            }

            email = data.Email;

            if (data.UserBlocked)
            {
                return VerifyResult.UserBlocked;
            }

            byte[] storedToken = data.VerificationToken;
            if (token == null || !AreNotNullAndEqual(storedToken, token.Data))
            {
                return VerifyResult.InvalidToken;
            }

            return VerifyResult.Success;
        }
 public VerifyResult ResetVerificationToken(string email, out VerificationToken token)
 {
     int id;
     return this.ResetVerificationToken(email, out token, out id);
 }
 public VerifyResult CheckVerificationToken(int id, VerificationToken token, out string email)
 {
     string userEmail = null;
     var result = this.Connection.InTransaction(true).Do(t =>
         {
             var data = t.ReadOne("SELECT Email, UserBlocked, VerificationToken FROM Users WHERE Id=@id", new { id });
             return VerifyToken(data, token, out userEmail);
         });
     email = userEmail;
     return result;
 }
        public VerifyResult CheckVerificationToken(int id, VerificationToken token)
        {
            if (token == null)
            {
                return VerifyResult.InvalidToken;
            }

            string email;
            return this.CheckVerificationToken(id, token, out email);
        }
Exemplo n.º 15
0
        public RegisterResult Register(string email, string password, out VerificationToken token)
        {
            int id;

            return(this.Register(email, password, out token, out id));
        }
Exemplo n.º 16
0
        public VerifyResult CheckAndClearVerificationToken(int id, VerificationToken token, string newPassword = null)
        {
            string email;

            return(this.CheckAndClearVerificationToken(id, token, out email, newPassword));
        }
Exemplo n.º 17
0
        public RegisterResult Register(string email, string password, out VerificationToken token, out int id)
        {
            if (!ValidateAndNormalizeEmail(ref email))
            {
                id    = 0;
                token = null;
                return(RegisterResult.InvalidEmail);
            }

            if (password != null && !this.ValidatePassword(password))
            {
                id    = 0;
                token = null;
                return(RegisterResult.InvalidPassword);
            }

            byte[] salt = null;
            byte[] hash = null;
            if (password != null)
            {
                hash = this.PasswordHasher.Hash(password, ref salt);
            }

            token = VerificationToken.Generate();

            var user = new
            {
                Salt              = salt,
                Password          = hash,
                Email             = email,
                EmailVerified     = false,
                UserBlocked       = false,
                VerificationToken = token.Data
            };

            try
            {
                int userId = 0;
                var result = this.Connection.InTransaction(true).Do(
                    t =>
                {
                    var userInfo = t.ReadOne("SELECT Id, UserBlocked FROM Users WHERE Email=@email", new { email });
                    if (userInfo != null)
                    {
                        userId = userInfo.Id;
                        return(userInfo.UserBlocked
                            ? RegisterResult.UserBlocked
                            : RegisterResult.DuplicateEmail);
                    }

                    t.Save("Users", user, out userId);
                    return(RegisterResult.Success);
                });

                id = userId;
                return(result);
            }
            catch (DbException exception)
            {
                const int MysqlDuplicateEntryServerErrorCode = 1062;
                object    exceptionData = exception.Data["Server Error Code"];
                if (exceptionData is int && (int)exceptionData == MysqlDuplicateEntryServerErrorCode)
                {
                    id    = 0;
                    token = null;
                    return(RegisterResult.DuplicateEmail);
                }

                throw;
            }
        }
 public VerifyResult CheckAndClearVerificationToken(int id, VerificationToken token, string newPassword = null)
 {
     string email;
     return this.CheckAndClearVerificationToken(id, token, out email, newPassword);
 }