diff --git a/lib/gitlab/gpg.rb b/lib/gitlab/gpg.rb index 258901bb238..582347019e5 100644 --- a/lib/gitlab/gpg.rb +++ b/lib/gitlab/gpg.rb @@ -8,10 +8,8 @@ module Gitlab def add(key) GPGME::Key.import(key) end - end - def fingerprints_from_key(key) - using_tmp_keychain do + def fingerprints_from_key(key) import = GPGME::Key.import(key) return [] if import.imported == 0 @@ -20,13 +18,15 @@ module Gitlab end end + def fingerprints_from_key(key) + using_tmp_keychain do + CurrentKeyChain.fingerprints_from_key(key) + end + end + def primary_keyids_from_key(key) using_tmp_keychain do - import = GPGME::Key.import(key) - - return [] if import.imported == 0 - - fingerprints = import.imports.map(&:fingerprint) + fingerprints = CurrentKeyChain.fingerprints_from_key(key) GPGME::Key.find(:public, fingerprints).map { |raw_key| raw_key.primary_subkey.keyid } end @@ -34,11 +34,7 @@ module Gitlab def emails_from_key(key) using_tmp_keychain do - import = GPGME::Key.import(key) - - return [] if import.imported == 0 - - fingerprints = import.imports.map(&:fingerprint) + fingerprints = CurrentKeyChain.fingerprints_from_key(key) GPGME::Key.find(:public, fingerprints).flat_map { |raw_key| raw_key.uids.map(&:email) } end diff --git a/spec/lib/gitlab/gpg_spec.rb b/spec/lib/gitlab/gpg_spec.rb index 497fbeab5d5..ebb7720eaea 100644 --- a/spec/lib/gitlab/gpg_spec.rb +++ b/spec/lib/gitlab/gpg_spec.rb @@ -2,16 +2,15 @@ require 'rails_helper' describe Gitlab::Gpg do describe '.fingerprints_from_key' do - it 'returns the fingerprint' do - expect( - described_class.fingerprints_from_key(GpgHelpers::User1.public_key) - ).to eq [GpgHelpers::User1.fingerprint] + before do + # make sure that each method is using the temporary keychain + expect(described_class).to receive(:using_tmp_keychain).and_call_original end - it 'returns an empty array when the key is invalid' do - expect( - described_class.fingerprints_from_key('bogus') - ).to eq [] + it 'returns CurrentKeyChain.fingerprints_from_key' do + expect(Gitlab::Gpg::CurrentKeyChain).to receive(:fingerprints_from_key).with(GpgHelpers::User1.public_key) + + described_class.fingerprints_from_key(GpgHelpers::User1.public_key) end end @@ -65,4 +64,18 @@ describe Gitlab::Gpg::CurrentKeyChain do ) end end + + describe '.fingerprints_from_key' do + it 'returns the fingerprint' do + expect( + described_class.fingerprints_from_key(GpgHelpers::User1.public_key) + ).to eq [GpgHelpers::User1.fingerprint] + end + + it 'returns an empty array when the key is invalid' do + expect( + described_class.fingerprints_from_key('bogus') + ).to eq [] + end + end end