Skip to content

Instantly share code, notes, and snippets.

@portertech
Created August 1, 2010 23:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save portertech/503876 to your computer and use it in GitHub Desktop.
Save portertech/503876 to your computer and use it in GitHub Desktop.
# 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