lib/user_interaction.rb in webroar-0.2.6 vs lib/user_interaction.rb in webroar-0.3.0
- old
+ new
@@ -18,115 +18,177 @@
#
require 'rubygems'
module Webroar
- module UserInteraction
- def choose_gem_version
+ class UserInteraction
+
+ def initialize(options)
+ @options = options
+ @gem_name = nil
+ end
+
+ # User input to install WebROaR
+ def user_input
+ return nil, true, @gem_name if choose_gem_version
+
+ puts "Setting up server admin panel ..."
+
+ username = read_user_name
+ password = read_password
+
+ write_user(username, password)
+
+ puts "Setting up server specifications ..."
+
+ port = read_port
+
+ return port, false, nil
+ end
+
+ private
+
+ def gem_exist?
print "Checking for any previous installation of WebROaR ... "
list = Gem.source_index.find_name(/^webroar$/)
unless list
puts "not found."
- return nil
+ return false
end
#gem_names = list.collect {|gem| gem.full_name}
gem_list = list.collect {|gem| gem.version}
gem_list.each_with_index do |item, index|
- if !File.exist?(File.join(WEBROAR_ROOT,"..","webroar-#{item}","conf","config.yml"))
- gem_list.delete(item)
- end
+ gem_list.delete(item) if !File.exist?(File.join(WEBROAR_ROOT,"..","webroar-#{item}","conf","config.yml"))
end
if gem_list.length == 0
puts "not found."
- return nil
+ return false
end
puts "found."
- gem_name = "WebROaR-" + gem_list[gem_list.length - 1].to_s
+ @gem_name = "WebROaR-" + gem_list[gem_list.length - 1].to_s
+ return true
+ end
+
+ def choose_gem_version
+
+ return false if !@options[:import].nil? and !@options[:import]
+
+ return false unless gem_exist?
+
+ return true if @options[:import]
+
require File.join(WEBROAR_ROOT, 'src', 'ruby_lib', 'ruby_interface','version.rb')
- choice_list = ["Import configuration, logs and admin panel data from the previous installation - #{gem_name}.",
- "No import required, install #{Webroar::SERVER} afresh."]
+ choice_list = ["Import configuration, logs and admin panel data from the previous installation - #{@gem_name}.","No import required, install #{Webroar::SERVER} afresh."]
puts ""
puts "Please enter your choice from the options below:"
choice_list.each_with_index do |item, index|
puts " #{index+1}. #{item}"
end
print "> "
result = STDIN.gets.chomp("\n")
- return nil unless result =~ /^\d+$/
+ return false unless result =~ /^\d+$/
result = result.to_i
- return gem_name if result == 1
- return nil
-
+ return true if result == 1
+ return false
+
#return nil if result < 1 or (gem_names.length - 1) < result
#return gem_names[result-1]
end
-
- # User input to install WebROaR
- def user_input
- import_from = choose_gem_version
- return nil, true, import_from if import_from
-
- puts "Setting up server admin panel ..."
-
- while(true)
- print "Please enter a username for the administrator account of server's admin panel: "
- username = STDIN.gets.chomp("\n")
- if(username.length < 1)
- #puts "Please enter a username."
- redo
- else
- break
+
+
+ def read_user_name
+ if !@options[:username] or @options[:username].length < 1
+ while(true)
+ print "Please enter a username for the administrator account of server's admin panel: "
+ username = STDIN.gets.chomp("\n")
+ if(username.length < 1)
+ #puts "Please enter a username."
+ redo
+ else
+ break
+ end
end
+ username
+ else
+ @options[:username]
end
- while(true)
- print "Please enter a password(minimum 6 characters) for the administrator account of server's admin panel: "
- system("stty -echo")
- pswd = STDIN.gets.chomp("\n")
- if(pswd.length < 6)
- puts "\nPlease enter a password with at least 6 characters."
- redo
- end
- print "\nConfirm password: "
- re_pswd = STDIN.gets.chomp("\n")
- system("stty echo")
- print "\n"
- if(re_pswd == pswd)
- write_user(username, pswd)
- break
- else
- puts "\nPasswords do not match. Please try again."
- redo
- end
- end
- puts "Setting up server specifications ..."
-
- while(true)
- print "Enter server port (default is 3000): "
- port_s = STDIN.gets.chomp
- if port_s == ""
- port = 3000
- break
- else
- unless port_s=~/^\d+$/
- puts "\nInvalid port number. Valid port is a number between 1 and 65535. Please try again ..."
+ end
+
+ def read_password
+ if !@options[:password] or @options[:password].length < 6
+ while(true)
+ puts "\nPlease enter a password with at least 6 characters." if @options[:password]
+ print "Please enter a password(minimum 6 characters) for the administrator account of server's admin panel: "
+ system("stty -echo")
+ pswd = STDIN.gets.chomp("\n")
+ if(pswd.length < 6)
+ puts "\nPlease enter a password with at least 6 characters."
redo
end
- port = port_s.to_i
- if(port < 1 or port > 65535)
- puts "\nInvalid port number. Valid port is a number between 1 and 65535. Please try again ..."
- redo
- else
+ print "\nConfirm password: "
+ re_pswd = STDIN.gets.chomp("\n")
+ system("stty echo")
+ print "\n"
+ if(re_pswd == pswd)
break
+ else
+ puts "\nPasswords do not match. Please try again."
+ redo
end
end
+ pswd
+ else
+ @options[:password]
end
- return port, false, nil
- end
- end
-end
+ end
+
+ def read_port
+ if !@options[:port] or !(@options[:port]=~/^\d+$/) or @options[:port].to_i < 1 or @options[:port].to_i > 65535
+ while(true)
+ puts "\nInvalid port number. Valid port is a number between 1 and 65535. Please try again ..." if @options[:port]
+ print "Enter server port (default is 3000): "
+ port_s = STDIN.gets.chomp
+ if port_s == ""
+ port = 3000
+ break
+ else
+ unless port_s=~/^\d+$/
+ puts "\nInvalid port number. Valid port is a number between 1 and 65535. Please try again ..."
+ redo
+ end
+ port = port_s.to_i
+ if(port < 1 or port > 65535)
+ puts "\nInvalid port number. Valid port is a number between 1 and 65535. Please try again ..."
+ redo
+ else
+ break
+ end
+ end
+ end
+ port
+ else
+ @options[:port].to_i
+ end
+ end
+
+ def write_user(username, pswd)
+ info = Array.new
+ u = {}
+ u['user_name'] = username
+ u['password'] = Digest::MD5.hexdigest(pswd)
+ info <<= u
+ yaml_obj=YAML::dump(info)
+ file=File.open(File.join(ADMIN_PANEL_DIR,'config','user.yml'),"w")
+ file.puts(yaml_obj)
+ file.close
+ end
+
+ end #UserInteraction
+
+end #Webroar