summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRubén Dávila <ruben@gitlab.com>2017-09-27 16:11:42 -0500
committerRubén Dávila <ruben@gitlab.com>2017-10-05 08:25:27 -0500
commita41e7e0105e238161ba697ebf26d8554ae59d295 (patch)
tree2569ea57cecdfeadb8584b721a255ae4d5f6dbc4
parentd0572d9aad2c434a040f11956a4c3feac1afdcf8 (diff)
downloadgitlab-ce-a41e7e0105e238161ba697ebf26d8554ae59d295.tar.gz
Add ability to include subkeys when finding by fingerprint
-rw-r--r--app/models/gpg_key.rb11
-rw-r--r--lib/gitlab/gpg/commit.rb2
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)