summaryrefslogtreecommitdiff
path: root/lib/puppet/provider/gpgkey/gpgme.rb
blob: 7a37f45d8d2ad76a5f23a92c6ed4b04452857091 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Puppet::Type.type(:gpgkey).provide(:gpgme) do
  require 'gpgme'
  def exists?
    ! GPGME::Key.find(:secret, keyname()).empty?
  end

  def create
    ctx = GPGME::Ctx.new
    keydata = "<GnupgKeyParms format=\"internal\">\n"
    keydata += "Key-Type: "       +@resource.value(:keytype)+"\n"
    keydata += "Key-Length: "     +@resource.value(:keylength)+"\n"
    keydata += "Subkey-Type: "    +@resource.value(:subkeytype)+"\n"
    keydata += "Subkey-Length: "  +@resource.value(:subkeylength)+"\n"
    keydata += "Name-Real: "      +@resource.value(:name)+"\n"
    keydata += "Name-Comment: "   +keyname()+"\n"
    keydata += "Name-Email: "     +@resource.value(:email)+"\n"
    keydata += "Expire-Date: "    +@resource.value(:expire)+"\n"
    keydata += "</GnupgKeyParms>\n"

    ctx.genkey(keydata, nil, nil)
  end

  def destroy
    GPGME::Key.find(:secret, keyname()).each do |key|
      key.delete!(true)
    end
  end

  private
  def keyname
    keyname = 'puppet#' + @resource.value(:name) + '#'
    return keyname
  end

end