Created
August 1, 2010 23:04
-
-
Save portertech/503876 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Genenerate random passwords for beta users, save the results in a csv | |
require 'rubygems' | |
require 'digest' | |
require "mysql" | |
require 'fastercsv' | |
def generate_hash(string) | |
Digest::SHA1.hexdigest(string) | |
end | |
# Generate random password | |
def generate_passwd(len) | |
passwd = Array.new(len/2) { rand(256) }.pack('C*').unpack('H*').first | |
salt = generate_hash("--#{Time.now.utc}--#{passwd}--") | |
encrypt_passwd = generate_hash("--#{salt}--#{passwd}--") | |
res = Array.new | |
res.push(passwd, salt, encrypt_passwd) | |
end | |
# Report any errors and ensure the db connection is closed | |
begin | |
# Connect to the MySQL server | |
dbh = Mysql.real_connect("localhost", "root", "", "plumtree_development") | |
# Get server version string and display it | |
puts "Server version: " + dbh.get_server_info | |
# Get a list of user id's | |
res = dbh.query("SELECT id, email FROM users WHERE admin_flag = 0") | |
# Save updates to csv | |
FasterCSV.open("beta_users.csv", "w") do |csv| | |
# Update beta users with new passwords | |
while row = res.fetch_row do | |
passwd = generate_passwd(8) | |
dbh.query("UPDATE users SET salt = '#{passwd[1]}', encrypted_password = '#{passwd[2]}' WHERE id = #{row[0]}") | |
csv << [row[1], passwd[0]] | |
end | |
end | |
puts "Number of users updated: #{res.num_rows}" | |
res.free | |
rescue Mysql::Error => e | |
puts "Error code: #{e.errno}" | |
puts "Error message: #{e.error}" | |
puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate") | |
ensure | |
# disconnect from server | |
dbh.close if dbh | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment