aboutsummaryrefslogtreecommitdiff
path: root/lib/facter/letsencrypt_directory.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/facter/letsencrypt_directory.rb')
-rw-r--r--lib/facter/letsencrypt_directory.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/facter/letsencrypt_directory.rb b/lib/facter/letsencrypt_directory.rb
new file mode 100644
index 0000000..d21bb1c
--- /dev/null
+++ b/lib/facter/letsencrypt_directory.rb
@@ -0,0 +1,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