module Resources class PublicKey < BaseResource include PublicKeyPrompter def list result = get("services/public_keys") puts "\nPublic Keys:" table = Terminal::Table.new headings: [ 'Name', 'Valid Until', 'Created At', 'Updated At' ] do |t| result.each do | pk | t << [ pk['name'], pk['valid_until'], pk['created_at'], pk['updated_at'] ] end end prompter.say table.to_s puts end def show pk_id = public_key_id pk = get("services/public_keys/#{pk_id}") puts "\nPublic Key:" table = Terminal::Table.new headings: [ 'Name', 'Valid Until', 'Created At', 'Updated At' ] do |t| t << [ pk['name'], pk['valid_until'], pk['created_at'], pk['updated_at'] ] end puts table puts end def create params = { public_key: { name: prompter.ask("\nName for new public key: "), key_file: prompter.ask("\nFile containing public key (PEM format): ", ->(field) { File.new(field) }) do |q| q.glob = "*.pem" q.validate = ->(file_name) { File.exists?(file_name) } q.responses[:ask_on_error] = :question q.responses[:not_valid] = "\nFile does not exist" end, valid_until: prompter.ask("\nDate at which key becomes invalid: ") do |q| q.validate = ->(valid_until) { return true if valid_until.nil? || valid_until.length == 0 begin Date.parse(valid_until) true rescue ArgumentError false end } q.responses[:ask_on_error] = :question q.responses[:not_valid] = "\nInvalid date" end } } result = post("services/public_keys", params) puts "\nID of new Public Key: #{result['id']}" puts end def update pk_id = public_key_id show params = { public_key: { name: prompter.ask("\nName for new public key: "), key_file: prompter.ask("\nFile containing public key (PEM format): ", ->(field) { File.new(field) }) do |q| q.validate = ->(file_name) { File.exists?(file_name) } q.responses[:ask_on_error] = :question q.responses[:not_valid] = "\nFile does not exist" end, valid_until: prompter.ask("\nDate at which key becomes invalid: ") do |q| q.validate = ->(valid_until) { return true if valid_until.nil? || valid_until.length == 0 begin Date.parse(valid_until) true rescue ArgumentError false end } q.responses[:ask_on_error] = :question q.responses[:not_valid] = "\nInvalid date" end } } result = put("services/public_keys/#{pk_id}", params) puts "\nID of updated Public Key: #{result['id']}" puts end def destroy pk_id = public_key_id show if prompter.agree("\nAre you sure you want to destroy this public key? (y/n) ", true) puts result = delete("services/public_keys/#{pk_id}") puts "\nID of deleted public key: #{result['id']}" else puts "\nCancelled deletion" end puts end end end