Pigeon-Ruby/pigeon-cli

94 lines
2.2 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require_relative File.join("dist", "pigeon")
require "thor"
module Pigeon
class Identity < Thor
class ConfigAlreadyExists < StandardError; end
desc "new", "Creates a new identiy in `.pigeon` directory if none exists"
def new
# TODO: --force flag
# TODO: --seed flag
if Dir.exist?(Pigeon::Storage::ROOT_DIR)
puts "Pigeon has detected a `.pigeon` directory.
Refusing to overwrite existing Pigeon config.
Remove config dir or switch to a different directory."
raise ConfigAlreadyExists
end
kp = Pigeon::KeyPair.new()
kp.save!
puts kp.public_key
end
desc "show", "Prints a base64 identiy string to STDOUT"
def show
puts Pigeon::Storage.current.get_conf("public_key")
end
end
class Blob < Thor
desc "set", "Copy arbitrary binary data into the database"
def set(data = "")
blob = (data != "") ? data : STDIN.read
puts Pigeon::Storage.current.set_blob(blob)
end
desc "get", "Read arbitrary data from the database"
def get(hex_digest)
puts Pigeon::Storage.current.get_blob(hex_digest)
end
end
class Peer < Thor
desc "add", "Begin following a Pigeon peer"
def add(identity)
puts Pigeon::Storage.current.add_peer(identity)
end
desc "remove", "Stop following a Pigeon peer"
def remove(identity)
puts Pigeon::Storage.current.remove_peer(identity)
end
desc "block", "Stop following a Pigeon peer AND refuse to replicate"
def block(identity)
puts Pigeon::Storage.current.block_peer(identity)
end
desc "all", "List all Pigeon peers"
def all
puts Pigeon::Storage.current.all_peers
end
end
class CLI < Thor
desc "status", "Show various information about the `.pigeon` directory"
def status
puts "Version: #{Config::VERSION}"
end
desc "identity SUBCOMMAND ...ARGS", "Manage `.pigeon` identity"
subcommand "identity", Identity
desc "blob SUBCOMMAND ...ARGS", "Manage blob storage"
subcommand "blob", Blob
desc "peer SUBCOMMAND ...ARGS", "Manage blob storage"
subcommand "peer", Peer
end
end
Pigeon::CLI.start(ARGV)