From 1a8e0788c289d66ded4d0373beef09fe40d36000 Mon Sep 17 00:00:00 2001 From: Alec Leamas Date: Thu, 2 Dec 2010 00:23:38 +0100 Subject: [PATCH] Add rake task db:first_user. Purges database and adds a user without development dependencies. Closes http://bugs.joindiaspora.com/issues/548. Note error handling for User.build... --- db/seeds/first_user.rb | 77 ++++++++++++++++++++++++++++++++++++++++++ lib/tasks/db.rake | 24 +++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 db/seeds/first_user.rb diff --git a/db/seeds/first_user.rb b/db/seeds/first_user.rb new file mode 100644 index 000000000..f116d5349 --- /dev/null +++ b/db/seeds/first_user.rb @@ -0,0 +1,77 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3 or later. See +# the COPYRIGHT file. +# +# Add a parameterized user to database. +# +# + +require File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment') +require File.join(File.dirname(__FILE__), '..', '..','config', 'initializers', '_load_app_config.rb') +require 'yaml' + +def read_password + + begin + system('stty -echo') + while true do + printf 'Enter password: ' + pw1 = $stdin.gets.chomp + puts + if pw1.length < 6 + puts "Too short (minimum 6 characters)" + next + end + printf 'Again: ' + pw2 = $stdin.gets.chomp + puts + break if pw1 == pw2 + puts "They don't match, try again" + end + ensure + system('stty echo') + end + return pw1 +end + +username = ( ARGS[:username] == nil ? 'admin' : ARGS[:username].dup) + +if ARGS[:email] == nil + config = YAML.load(File.read(Rails.root.join('config', + 'app_config.yml'))) + email = username + '@' + config['default']['pod_url'] +else + email = ARGS[:email] +end + +if ARGS[:password] == nil + password = read_password +else + password = ARGS[:password] +end + +#printf "Building: %s, %s, '%s'\n", username, email, password + +user = User.build( :email => email, + :username => username, + :password => password, + :password_confirmation => password, + :person => { + :profile => { + :first_name => username, + :last_name => "Unknown", + :image_url => "/images/user/default.png" + } + } + ) + +errors = user.errors +errors.delete :person +if errors.size > 0 + raise "Error(s) creating user " + username + ": " + errors.to_s +end + +user.save +user.person.save! +user.seed_aspects +puts "Created user " + username + ' (' + email + ')' diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index a71ca72f0..f3d134897 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -21,6 +21,12 @@ namespace :db do create end + task :first_user, :username, :password do |t, args| + puts "Setting up first user in #{Rails.env} database" + ARGS = args + require File.dirname(__FILE__) + '/../../db/seeds/first_user' + end + end desc 'Delete the collections in the current RAILS_ENV database' @@ -53,6 +59,24 @@ namespace :db do puts "you did it!" end + task :reset do + puts "making a new base user" + Rake::Task['db:purge'].invoke + Rake::Task['db:seed:dev'].invoke + puts "you did it!" + end + + desc 'Purge database, add a new user' + task :first_user, :username, :password do |t, args| + puts "Purging database and adding a new user" + username = args[:username] || 'admin' + password = args[:password] if args[:password] != nil + Rake::Task['db:purge'].invoke + Rake::Task['db:seed:first_user'].invoke(username, password) + end + + + task :fix_diaspora_handle do puts "fixing the people in this seed" require File.dirname(__FILE__) + '/../../config/environment'