fluke/devops-client/lib/devops-client/handler/user.rb
2015-04-14 16:29:02 +04:00

124 lines
2.6 KiB
Ruby

require "devops-client/handler/handler"
require "devops-client/options/user_options"
require "devops-client/output/user"
class User < Handler
output_with Output::User
def initialize(host, def_options={})
@host, @options = host, def_options
@options_parser = UserOptions.new(ARGV, def_options)
end
def handle
current_command = ARGV[1].to_sym
@options, @args = @options_parser.parse_options_for!(current_command)
case current_command
when :list
list_handler
output
when :create
create_handler
when :delete
delete_handler
when :grant
grant_handler
when :password
password_handler
when :email
email_handler
end
end
def list_handler
@list = get("/users")
end
def create_handler
r = inspect_parameters @options_parser.create_params, @args[2], @args[3]
unless r.nil?
@options_parser.invalid_create_command
abort(r)
end
password = self.options[:new_password] || enter_password(@args[2])
q = {
"username" => @args[2],
"password" => password,
"email" => @args[3]
}
post "/user", q
end
def delete_handler
r = inspect_parameters @options_parser.delete_params, @args[2]
unless r.nil?
@options_parser.invalid_delete_command
abort(r)
end
if question(I18n.t("handler.user.question.delete", :name => @args[2]))
delete "/user/#{@args[2]}"
end
end
def password_handler
r = inspect_parameters @options_parser.password_params, @args[2]
unless r.nil?
@options_parser.invalid_password_command
abort(r)
end
password = enter_password(@args[2])
q = {
"password" => password
}
put "/user/#{@args[2]}/password", q
end
def email_handler
r = inspect_parameters @options_parser.email_params, @args[2], @args[3]
unless r.nil?
@options_parser.invalid_email_command
abort(r)
end
q = {
"email" => @args[3]
}
put "/user/#{@args[2]}/email", q
end
def grant_handler
r = inspect_parameters @options_parser.grant_params, @args[2], @args[3], @args[4]
unless r.nil?
@options_parser.invalid_grant_command
abort(r)
end
@args[3] = '' if @args[3].nil?
q = {
'cmd' => @args[3],
'privileges' => @args[4]
}
put "/user/#{@args[2]}", q
end
def enter_password user
print "Enter password for '#{user}': "
password = ""
begin
system("stty -echo")
password = STDIN.gets.strip
puts
ensure
system("stty echo")
end
password
end
end