Pigeon-Ruby/pigeon-cli

136 lines
3.3 KiB
Plaintext
Raw Normal View History

2019-09-22 02:30:03 +00:00
#!/usr/bin/env ruby
require_relative File.join("dist", "pigeon")
require "thor"
module Pigeon
class Identity < Thor
class ConfigAlreadyExists < StandardError; end
2019-09-22 02:30:03 +00:00
desc "new", "Creates a new identiy in `.pigeon` directory if none exists"
def new
if File.file?(Pigeon::Storage::PIGEON_DB_PATH)
puts "Pigeon has detected a `pigeon.db` file.
2019-09-22 02:30:03 +00:00
Refusing to overwrite existing Pigeon config.
Remove config dir or switch to a different directory."
raise ConfigAlreadyExists
2019-09-22 02:30:03 +00:00
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::KeyPair.current.public_key
2019-09-22 02:30:03 +00:00
end
end
class Blob < Thor
desc "set", "Copy arbitrary binary data into the database"
2019-09-22 02:30:03 +00:00
2019-09-22 17:34:08 +00:00
def set(data = "")
blob = (data != "") ? data : STDIN.read
puts Pigeon::Storage.current.set_blob(blob)
2019-09-22 02:30:03 +00:00
end
desc "get", "Read arbitrary data from the database"
2019-09-22 02:30:03 +00:00
2019-09-22 11:00:19 +00:00
def get(hex_digest)
puts Pigeon::Storage.current.get_blob(hex_digest)
2019-09-22 02:30:03 +00:00
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 PigeonMessage < Thor
desc "create", "Begin a new Pigeon message"
def create(kind)
puts Pigeon::Message.create(kind: kind).render
end
2019-10-19 20:29:29 +00:00
desc "append", "Add a key/value pair to the current DRAFT"
def append(key, raw_value = "")
v = (raw_value != "") ? raw_value : STDIN.read
puts Pigeon::Message.current.append(key, v)
end
2019-10-19 20:48:17 +00:00
desc "show", "Print a message to STDOUT. If message_id is missing, current draft will be displayed."
def show(message_id = "")
if message_id == ""
puts Pigeon::Message.current.render
2019-10-19 20:48:17 +00:00
else
raise "TODO: Find message by ID?"
end
end
desc "sign", "Commit current DRAFT to local feed."
def sign
puts Pigeon::Message.current.sign.render
end
end
2019-09-22 02:30:03 +00:00
class CLI < Thor
desc "status", "Show various information about the `.pigeon` directory"
def status
2019-09-25 01:54:32 +00:00
puts "
,.------------------------------------
| -`. Pigeon Protocol Ruby Client
| '( @ > Version: #{Config::VERSION}
| _) ( Peers: #{Dir[File.join(".pigeon", "peers", "*")].count}
| / ) Blocked: #{Dir[File.join(".pigeon", "blocked", "*")].count}
| /_,' /
| \ /
|===m" "m===
'-,___________________________________
"
2019-09-22 02:30:03 +00:00
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
desc "message SUBCOMMAND ...ARGS", "Manage messages"
subcommand "message", PigeonMessage
2019-09-22 02:30:03 +00:00
end
end
Pigeon::CLI.start(ARGV)