diff options
author | Rubén Dávila <ruben@gitlab.com> | 2017-09-27 16:11:42 -0500 |
---|---|---|
committer | Rubén Dávila <ruben@gitlab.com> | 2017-10-05 08:25:27 -0500 |
commit | a41e7e0105e238161ba697ebf26d8554ae59d295 (patch) | |
tree | 2569ea57cecdfeadb8584b721a255ae4d5f6dbc4 | |
parent | d0572d9aad2c434a040f11956a4c3feac1afdcf8 (diff) | |
download | gitlab-ce-a41e7e0105e238161ba697ebf26d8554ae59d295.tar.gz |
Add ability to include subkeys when finding by fingerprint
-rw-r--r-- | app/models/gpg_key.rb | 11 | ||||
-rw-r--r-- | lib/gitlab/gpg/commit.rb | 2 |
2 files changed, 12 insertions, 1 deletions
diff --git a/app/models/gpg_key.rb b/app/models/gpg_key.rb index ed09b44027c..6d3537b6fcf 100644 --- a/app/models/gpg_key.rb +++ b/app/models/gpg_key.rb @@ -40,6 +40,17 @@ class GpgKey < ActiveRecord::Base after_commit :update_invalid_gpg_signatures, on: :create after_create :generate_subkeys + def self.find_with_subkeys(fingerprint) + keys_table = arel_table + subkeys_table = GpgKeySubkey.arel_table + + condition = keys_table[:primary_keyid].eq(fingerprint).or( + subkeys_table[:keyid].eq(fingerprint) + ) + + joins(:subkeys).where(condition).first + end + def primary_keyid super&.upcase end diff --git a/lib/gitlab/gpg/commit.rb b/lib/gitlab/gpg/commit.rb index 86bd9f5b125..40274e13918 100644 --- a/lib/gitlab/gpg/commit.rb +++ b/lib/gitlab/gpg/commit.rb @@ -43,7 +43,7 @@ module Gitlab # key belonging to the keyid. # This way we can add the key to the temporary keychain and extract # the proper signature. - gpg_key = GpgKey.find_by(primary_keyid: verified_signature.fingerprint) + gpg_key = GpgKey.find_with_subkeys(verified_signature.fingerprint) if gpg_key Gitlab::Gpg::CurrentKeyChain.add(gpg_key.key) |