From 38ff89ca94465889016cabed775549e90b6fdd4d Mon Sep 17 00:00:00 2001 From: Thom Ritterfeld Date: Sat, 3 Dec 2022 07:49:57 +0100 Subject: [PATCH] Replaced osx_keychain with ruby-keychain gem --- lib/keyring.rb | 16 ++++++++++++---- spec/keyring_spec.rb | 2 +- spec/spec_helper.rb | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/keyring.rb b/lib/keyring.rb index 24baea5..ee9f065 100644 --- a/lib/keyring.rb +++ b/lib/keyring.rb @@ -1,4 +1,6 @@ -require 'osx_keychain' +require 'keychain' +require 'base64' +require 'json' module CocoaPodsKeys class Keyring @@ -27,11 +29,17 @@ def self.keychain_prefix end def keychain - @keychain ||= OSXKeychain.new + @keychain ||= Keychain.generic_passwords end def save(key, value) - keychain[self.class.keychain_prefix + name, key] = value + item = keychain.where(service: self.class.keychain_prefix + name, account: key).first + if item + item.password = value + item.save! + else + keychain_has_keykeychain.create(service: self.class.keychain_prefix + name, password: value, account: key) + end end def keychain_data @@ -53,7 +61,7 @@ def keychain_has_key?(key) end def keychain_value(key) - ENV[key] || keychain[self.class.keychain_prefix + name, key] + ENV[key] || keychain.where(service: self.class.keychain_prefix + name, account: key).first.password end def camel_cased_keys diff --git a/spec/keyring_spec.rb b/spec/keyring_spec.rb index dfc067e..57ebc0e 100644 --- a/spec/keyring_spec.rb +++ b/spec/keyring_spec.rb @@ -17,7 +17,7 @@ expect(keyring.keychain_data).to eq('ARMyKey' => 'Hello') end - it 'looks up keys from the OSXKeychain' do + it 'looks up keys from Keychain Access' do keyring = Keyring.new('test', '/', ['ARMyKey']) keyring.instance_variable_set(:@keychain, FakeKeychain.new('KeychainKey' => 'abcde')) expect(keyring.keychain_has_key?('KeychainKey')).to be_truthy diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 108ee3d..c6d1152 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -16,12 +16,22 @@ def fixture(name) c.color = true end +class FakeKeychainItem + attr_accessor :password + + def initialize(password) + @password = password + end +end + class FakeKeychain def initialize(data) @data = data end - def [](_, key) - @data[key] + def where(conditions) + password = @data[conditions[:account]] + item = FakeKeychainItem.new(password) + [item] end end