require 'highline/import'
namespace :gaku do
desc "Create admin username and password" task generate_admin: :environment do if Gaku::User.admin.empty? create_admin_user else puts 'Admin user has already been previously created.' if agree('Would you like to create a new admin user? (yes/no)') create_admin_user else puts 'No admin user created.' end end end
end
def prompt_for_admin_password
if ENV['ADMIN_PASSWORD'] password = ENV['ADMIN_PASSWORD'].dup say "Admin Password #{password}" else password = ask('Password [123456]: ') do |q| q.echo = false q.validate = /^(|.{5,40})$/ q.responses[:not_valid] = 'Invalid password. Must be at least 5 characters long.' q.whitespace = :strip end password = '123456' if password.blank? end password
end
def prompt_for_admin_email
if ENV['ADMIN_EMAIL'] email = ENV['ADMIN_EMAIL'].dup say "Admin User #{email}" else email = ask('Email [admin@gakuengine.com]: ') do |q| q.echo = true q.whitespace = :strip end email = 'admin@gakuengine.com' if email.blank? end email
end
def prompt_for_admin_username
if ENV['ADMIN_USERNAME'] username = ENV['ADMIN_USERNAME'].dup say "Admin User #{username}" else username = ask('Username [admin]: ') do |q| q.echo = true q.whitespace = :strip end username = 'admin' if username.blank? end username
end
def create_admin_user
if ENV['AUTO_ACCEPT'] password = '123456' email = 'admin@gakuengine.com' else puts 'Create the admin user (press enter for defaults).' username = prompt_for_admin_username email = prompt_for_admin_email password = prompt_for_admin_password end attributes = { password: password, password_confirmation: password, email: email, username: username } if Gaku::User.find_by_email(email) say "\nWARNING: There is already a user with the email: #{email}, so no account changes were made. If you wish to create an additional admin user, please run rake gaku:generate_admin again with a different email.\n\n" elsif Gaku::User.find_by_username(username) say "\nWARNING: There is already a user with the username: #{username}, so no account changes were made. If you wish to create an additional admin user, please run rake gaku:generate_admin again with a different username.\n\n" else say "Creating user..." creator = Gaku::UserCreator.new(attributes) creator.save admin = creator.get_user # create an admin role and and assign the admin user to that role role = Gaku::Role.where(name: 'Admin').first_or_initialize admin.roles << role if admin.save say "User Created" else say "User NOT Created" end end
end