aboutsummaryrefslogtreecommitdiff
path: root/lib/facter/letsencrypt_directory.rb
blob: 0e450e53b968c6648b22ed8b668acd2a5c2d31eb (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
# frozen_string_literal: true

# Borrowed from puppet-letsencrypt

require 'openssl'
require 'pathname'

Facter.add(:letsencrypt_directory) do
  confine kernel: ['FreeBSD', 'Linux', 'OpenBSD']

  setcode do
    certs = {}

    # locate the certificate repository
    livedir = ['/etc/letsencrypt/live', '/etc/certbot/live']
              .map { |path| Pathname.new path }
              .find(&:directory?)

    unless livedir.nil?
      Pathname.new(livedir).children.select(&:directory?).each do |path|
        pem = File.join(path, 'cert.pem')
        cert = OpenSSL::X509::Certificate.new(File.new(pem).read)
        san = cert.extensions.find { |e| e.oid == 'subjectAltName' }
        names = san.value.split(',').map { |entry| entry.split(':')[1] }
        names.each do |n|
          certs[n] = path.to_s
        end
      end
    end

    certs
  end
end