예제 #1
0
        private Tuple <Boolean, string> create_user(User user)
        {
            try
            {
                string salt       = PasswordHasher.GenSalt();
                byte[] saltBytes  = Encoding.UTF8.GetBytes(salt);
                string hashedPass = PasswordHasher.Hash(user.password, saltBytes);

                DataTable table = new DataTable();

                string query = "insert into users values (@username, @password, @salt)";

                var con = new SqlConnection(Program._connStr);
                var cmd = new SqlCommand(query, con);
                cmd.Parameters.AddWithValue("@username", user.username);
                cmd.Parameters.AddWithValue("@password", hashedPass);
                cmd.Parameters.AddWithValue("@salt", salt);
                using (var da = new SqlDataAdapter(cmd))
                {
                    cmd.CommandType = CommandType.Text;
                    da.Fill(table);
                }

                return(Tuple.Create(true, ""));
            }
            catch (Exception e)
            {
                if (e.HResult.ToString() == "-2146232060")
                {
                    return(Tuple.Create(false, "Username already taken"));
                }
                return(Tuple.Create(false, "Unknown error occurred"));
            }
        }