2023-10-22 23:23:56 +02:00
|
|
|
|
2023-10-23 23:11:12 +02:00
|
|
|
require "option_parser"
|
2023-10-22 23:23:56 +02:00
|
|
|
require "./config"
|
|
|
|
require "./fzf"
|
|
|
|
|
|
|
|
module GX
|
|
|
|
class Cli
|
2023-10-23 23:11:12 +02:00
|
|
|
|
2023-10-22 23:23:56 +02:00
|
|
|
@config : Config
|
|
|
|
|
|
|
|
def initialize()
|
|
|
|
# Main execution starts here
|
2023-10-23 23:11:12 +02:00
|
|
|
@config = Config.new
|
2023-10-22 23:23:56 +02:00
|
|
|
|
|
|
|
## FIXME: check that FZF is installed
|
|
|
|
end
|
|
|
|
|
2023-10-23 23:11:12 +02:00
|
|
|
def parse_command_line(args)
|
|
|
|
# update
|
|
|
|
add_args = { name: "", path: "" }
|
|
|
|
delete_args = { name: "" }
|
|
|
|
pparser = OptionParser.new do |parser|
|
|
|
|
parser.banner = "Usage: gx-vault [options]\n\nGlobal options"
|
|
|
|
|
|
|
|
parser.on("-c", "--config FILE", "Set configuration file") do |path|
|
|
|
|
@config.path = path
|
|
|
|
end
|
|
|
|
parser.on("-h", "--help", "Show this help") do |flag|
|
|
|
|
STDOUT.puts parser
|
|
|
|
exit(0)
|
|
|
|
end
|
|
|
|
|
|
|
|
parser.separator("\nCommands")
|
|
|
|
parser.on("create", "Create vault") do
|
|
|
|
@config.mode = Config::Mode::Add
|
|
|
|
|
|
|
|
parser.banner = "Usage: gx-vault create [options]\n\nGlobal options"
|
|
|
|
parser.separator("\nCommand options")
|
|
|
|
|
|
|
|
parser.on("-n", "--name", "Set vault name") do |name|
|
|
|
|
add_args = add_args.merge({ name: name })
|
|
|
|
end
|
|
|
|
parser.on("-p", "--path", "Set vault encrypted path") do |path|
|
|
|
|
add_args = add_args.merge({ path: path })
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
parser.on("delete", "Delete vault") do
|
|
|
|
@config.mode = Config::Mode::Add
|
|
|
|
|
|
|
|
parser.banner = "Usage: gx-vault delete [options]\n\nGlobal options"
|
|
|
|
parser.separator("\nCommand options")
|
|
|
|
|
|
|
|
parser.on("-n", "--name", "Set vault name") do |name|
|
|
|
|
delete_args = delete_args.merge({ name: name })
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
parser.on("edit", "Edit configuration") do |flag|
|
|
|
|
@config.mode = Config::Mode::Edit
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
pparser.parse(args)
|
|
|
|
end
|
|
|
|
|
2023-10-22 23:23:56 +02:00
|
|
|
def run()
|
2023-10-23 23:11:12 +02:00
|
|
|
@config.load_from_file
|
2023-10-22 23:23:56 +02:00
|
|
|
# Correcting the fzf interaction part
|
|
|
|
names_display = @config.vaults.map do |vault|
|
|
|
|
vault.mounted? ? "#{vault.name} [#{ "open".colorize(:green) }]" : vault.name
|
|
|
|
end
|
|
|
|
|
|
|
|
selected_vault_name = Fzf.run(names_display.sort)
|
|
|
|
puts ">> #{selected_vault_name}".colorize(:yellow)
|
|
|
|
selected_vault = @config.vaults.find { |v| v.name == selected_vault_name }
|
|
|
|
|
|
|
|
if selected_vault
|
|
|
|
selected_vault.mounted? ? selected_vault.unmount : selected_vault.mount
|
|
|
|
else
|
|
|
|
STDERR.puts "Vault not found.".colorize(:red)
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|