aboutsummaryrefslogtreecommitdiff
path: root/lib/facter/letsencrypt_directory.rb
blob: d21bb1caf685413147e6b6e37c4f79c960b32aab (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: %w[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