diff options
| -rw-r--r-- | lib/leap_cli/commands/inspect.rb | 65 | 
1 files changed, 65 insertions, 0 deletions
diff --git a/lib/leap_cli/commands/inspect.rb b/lib/leap_cli/commands/inspect.rb new file mode 100644 index 0000000..025d244 --- /dev/null +++ b/lib/leap_cli/commands/inspect.rb @@ -0,0 +1,65 @@ +module LeapCli; module Commands + +  desc 'Prints information about a file or node.' +  command :inspect do |c| +    c.action do |global_options,options,args| +      object = args.first +      method = inspection_method(object) +      if method && defined?(method) +        self.send(method, object, options) +      else +        log "Sorry, I don't know how to inspect that." +      end +    end +  end + +  private + +  FTYPE_MAP = { +    "PEM certificate"         => :inspect_x509_cert, +    "PEM RSA private key"     => :inspect_x509_key, +    "OpenSSH RSA public key"  => :inspect_ssh_pub_key, +    "PEM certificate request" => :inspect_x509_csr +  } + +  def inspection_method(object) +    if File.exists?(object) +      ftype = `file #{object}`.split(':').last.strip +      log 2, "file is of type '#{ftype}'" +      if FTYPE_MAP[ftype] +        FTYPE_MAP[ftype] +      elsif ftype == "ASCII text" +        nil +      end +    elsif manager.nodes[object] +      :inspect_node +    else +      nil +    end +  end + +  def inspect_x509_key(file_path, options) +    assert_bin! 'openssl' +    puts assert_run! 'openssl rsa -in %s -text -check' % file_path +  end + +  def inspect_x509_cert(file_path, options) +    assert_bin! 'openssl' +    puts assert_run! 'openssl x509 -in %s -text -noout' % file_path +    log 0, :"SHA256 fingerprint", X509.fingerprint("SHA256", file_path) +  end + +  def inspect_x509_csr(file_path, options) +    assert_bin! 'openssl' +    puts assert_run! 'openssl req -text -noout -verify -in %s' % file_path +  end + +  #def inspect_ssh_pub_key(file_path) +  #end + +  def inspect_node(node_name, options) +    node = manager.nodes[node_name] +    puts node.dump_json +  end + +end; end  | 
