Sha256: 0add0533215e102ece725666dda9ac509ba9127c400724164c5a129f1a82f846

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

require 'sshkey'

class Trocla::Formats::Sshkey < Trocla::Formats::Base

  expensive true

  def format(plain_password,options={})

    if plain_password.match(/-----BEGIN RSA PRIVATE KEY-----.*-----END RSA PRIVATE KEY/m)
      # Import, validate ssh key
      begin
        sshkey = ::SSHKey.new(plain_password)
      rescue Exception => e
        raise "SSH key import failed: #{e.message}"
      end
      return sshkey.private_key + sshkey.ssh_public_key
    end

    type = options['type'] || 'rsa'
    bits = options['bits'] || 2048

    begin
      sshkey = ::SSHKey.generate(
        type:       type,
        bits:       bits,
        comment:    options['comment'],
        passphrase: options['passphrase']
      )
    rescue Exception => e
      raise "SSH key creation failed: #{e.message}"
    end

    sshkey.private_key + sshkey.ssh_public_key
  end

  def render(output,render_options={})
    if render_options['privonly']
      ::SSHKey.new(output).private_key
    elsif render_options['pubonly']
      ::SSHKey.new(output).ssh_public_key
    else
      super(output,render_options)
    end
  end

end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
trocla-0.4.0 lib/trocla/formats/sshkey.rb
trocla-ruby2-0.4.0 lib/trocla/formats/sshkey.rb