extract gpg functionality to lib class

This commit is contained in:
Alexis Reigel 2017-02-22 17:20:42 +01:00
parent 7b4d29f4b5
commit e34cef0cd2
4 changed files with 54 additions and 12 deletions

View File

@ -33,12 +33,8 @@ class GpgKey < ActiveRecord::Base
private
def extract_fingerprint
import = GPGME::Key.import(key)
return if import.considered == 0
# we can assume that the result only contains one item as the validation
# only allows one key
self.fingerprint = import.imports.first.fingerprint
self.fingerprint = Gitlab::Gpg.fingerprints_from_key(key).first
end
end

32
lib/gitlab/gpg.rb Normal file
View File

@ -0,0 +1,32 @@
module Gitlab
module Gpg
extend self
def fingerprints_from_key(key)
using_tmp_keychain do
import = GPGME::Key.import(key)
return [] if import.imported == 0
import.imports.map(&:fingerprint)
end
end
def using_tmp_keychain
Dir.mktmpdir do |dir|
@original_dirs ||= [GPGME::Engine.dirinfo('homedir')]
@original_dirs.push(dir)
GPGME::Engine.home_dir = dir
return_value = yield
@original_dirs.pop
GPGME::Engine.home_dir = @original_dirs[-1]
return_value
end
end
end
end

View File

@ -0,0 +1,20 @@
require 'rails_helper'
describe Gitlab::Gpg do
describe '.fingerprints_from_key' do
it 'returns the fingerprint' do
expect(
described_class.fingerprints_from_key(GpgHelpers.public_key)
).to eq ['4F4840A503964251CF7D7F5DC728AF10972E97C0']
end
it 'returns an empty array when the key is invalid' do
expect(
described_class.fingerprints_from_key('bogus')
).to eq []
end
end
describe '.add_to_keychain' do
end
end

View File

@ -143,14 +143,8 @@ RSpec.configure do |config|
end
config.around(:each, :gpg) do |example|
Dir.mktmpdir do |dir|
original_dir = GPGME::Engine.dirinfo('homedir')
GPGME::Engine.home_dir = dir
Gitlab::Gpg.using_tmp_keychain do
example.run
GPGME::Engine.home_dir = original_dir
end
end
end