124 lines
2.9 KiB
Ruby
124 lines
2.9 KiB
Ruby
require_relative 'lib/emacscollab'
|
|
require 'tty-prompt'
|
|
require 'colorize'
|
|
|
|
$prompt = TTY::Prompt.new
|
|
$login = "root"
|
|
|
|
def init
|
|
puts "Logged in as " + $login.colorize(:cyan) + "\n"
|
|
choices = %w(Users Projects Quit)
|
|
case $prompt.select("What do you want to do?", choices)
|
|
when "Projects"
|
|
projects
|
|
when "Users"
|
|
users
|
|
when "Quit"
|
|
exit
|
|
end
|
|
end
|
|
|
|
def users
|
|
choices = $users
|
|
user = $prompt.select("Pick a user", choices)
|
|
keys_user(user)
|
|
end
|
|
|
|
def keys_user(user)
|
|
choices = {'List keys' => :list ,'Add key' => :add, 'Remove key' => :remove}
|
|
case $prompt.select("What do you want to do?", choices)
|
|
when :list
|
|
user.keys.each{|k| puts k.pretty}
|
|
keys_user user
|
|
when :add
|
|
key = $prompt.ask("Please enter a valid public SSH key", echo: false)
|
|
begin
|
|
user.add_key_from_string(key)
|
|
rescue InvalidSSHPubKey => e
|
|
puts e.message.colorize(:red)
|
|
keys_user(user)
|
|
rescue DuplicateSSHPubKey => e
|
|
puts e.message.colorize(:red)
|
|
keys_user(user)
|
|
end
|
|
when :remove
|
|
choices = user.keys.map { |k| [k.pretty, k] }.to_h
|
|
key = $prompt.select("Select the key to remove", choices)
|
|
unless $prompt.no?("Are you sure you want to remove this key?")
|
|
user.remove_key(key)
|
|
end
|
|
end
|
|
end
|
|
|
|
def projects
|
|
choices = choices = {'Create new project' => :create,
|
|
'Modify existing project' => :modify}
|
|
case $prompt.select("What do you want to do?", choices)
|
|
when :create
|
|
project_create
|
|
when :modify
|
|
project_modify
|
|
end
|
|
end
|
|
|
|
def project_create
|
|
id = $prompt.ask("What should be the id of the new project?") do |input|
|
|
input.required true
|
|
input.validate /\A\w+\Z/
|
|
end
|
|
begin
|
|
create_project(id)
|
|
rescue DuplicateProjectError => e
|
|
puts e.message.colorize(:red)
|
|
projects
|
|
end
|
|
|
|
end
|
|
|
|
def project_modify
|
|
# Currently, it is implied that modify equals changing which users have access
|
|
project_users($prompt.select("Pick a project", $projects))
|
|
end
|
|
|
|
def project_users(project)
|
|
choices = {'List users with access' => :list,
|
|
'Add user' => :add,
|
|
'Select users with access' => :select}
|
|
case $prompt.select("What do you want to do?", choices)
|
|
when :list
|
|
project.users.each {|u| puts u.id}
|
|
when :add
|
|
choices = $users
|
|
user = $prompt.select("Pick a user", choices)
|
|
project.add_user(user)
|
|
puts "Added user #{user} to #{project}".colorize(:green)
|
|
when :select
|
|
choices = $users
|
|
|
|
# Mark already added users as "default"
|
|
defaults = []
|
|
counter = 1
|
|
choices.each do |u|
|
|
if project.users.include? u then
|
|
defaults << counter
|
|
end
|
|
counter += 1
|
|
end
|
|
|
|
if defaults != []
|
|
users = $prompt.multi_select("Select users", choices, default: defaults)
|
|
else
|
|
users = $prompt.multi_select("Select users", choices)
|
|
end
|
|
|
|
project.users = users
|
|
project.flush
|
|
project.refresh
|
|
end
|
|
|
|
end
|
|
|
|
while true
|
|
init
|
|
end
|