Module: VagrantDockerCertificatesManager::Registry
- Defined in:
- lib/vagrant-docker-certificates-manager/util/registry.rb
Class Method Summary collapse
-
.adopt(fp, owner) ⇒ Boolean
Adds an owner to an already tracked certificate.
- .all ⇒ Object
- .db_path ⇒ Object
- .ensure_dir! ⇒ Object
-
.find_by_path(path) ⇒ Object
rubocop:enable Naming/PredicateMethod.
-
.load ⇒ Hash
Loads tracked certificates from the best-effort local registry.
- .others_for_os?(fp, os) ⇒ Boolean
-
.release(fp, owner) ⇒ Boolean
Releases one owner from a tracked certificate.
- .save(data) ⇒ Object
-
.track(fp, attrs) ⇒ void
Tracks a certificate fingerprint and its ownership metadata.
- .untrack(fp) ⇒ Object
Class Method Details
.adopt(fp, owner) ⇒ Boolean
Adds an owner to an already tracked certificate.
rubocop:disable Naming/PredicateMethod -- boolean return kept for symmetry with #release
61 62 63 64 65 66 67 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 61 def adopt(fp, owner) data = load return false unless data[fp] data[fp]["owners"] = Array(data[fp]["owners"]) | [owner.to_s] save(data) true end |
.all ⇒ Object
96 97 98 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 96 def all load end |
.db_path ⇒ Object
10 11 12 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 10 def db_path File.join(Dir.home, ".vagrant.d", "vdcm", "certs.json") end |
.ensure_dir! ⇒ Object
14 15 16 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 14 def ensure_dir! FileUtils.mkdir_p(File.dirname(db_path)) end |
.find_by_path(path) ⇒ Object
rubocop:enable Naming/PredicateMethod
91 92 93 94 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 91 def find_by_path(path) data = load data.find { |_fp, v| File.(v["path"]) == File.(path) } end |
.load ⇒ Hash
Loads tracked certificates from the best-effort local registry.
A corrupt or missing registry must not block Vagrant actions, because the OS trust store remains the source of truth.
24 25 26 27 28 29 30 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 24 def load ensure_dir! return {} unless File.exist?(db_path) JSON.parse(File.read(db_path)) rescue StandardError {} end |
.others_for_os?(fp, os) ⇒ Boolean
100 101 102 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 100 def others_for_os?(fp, os) load.any? { |k, v| k != fp && v["os"].to_s == os.to_s } end |
.release(fp, owner) ⇒ Boolean
Releases one owner from a tracked certificate.
Keep the certificate installed while at least one Vagrant machine still owns it.
rubocop:disable Naming/PredicateMethod -- boolean return kept for symmetry with #adopt
79 80 81 82 83 84 85 86 87 88 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 79 def release(fp, owner) data = load rec = data[fp] return false unless rec owners = Array(rec["owners"]) owners.delete(owner.to_s) rec["owners"] = owners save(data) !owners.empty? end |
.save(data) ⇒ Object
32 33 34 35 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 32 def save(data) ensure_dir! File.write(db_path, JSON.pretty_generate(data)) end |
.track(fp, attrs) ⇒ void
This method returns an undefined value.
Tracks a certificate fingerprint and its ownership metadata.
42 43 44 45 46 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 42 def track(fp, attrs) data = load data[fp] = attrs save(data) end |
.untrack(fp) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/vagrant-docker-certificates-manager/util/registry.rb', line 48 def untrack(fp) data = load removed = !data.delete(fp).nil? save(data) removed end |