summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-04-14 12:00:43 +0200
committerDouwe Maan <douwe@gitlab.com>2015-04-14 12:00:43 +0200
commit1221bec56ca7d3bf1ba3b09e7a283ff5c11449f2 (patch)
tree35f01868cb691bfb35bd61379ae3744c006c4397 /app
parente245547ea1c7a5c6e85cbbd4c634c3d11b80036e (diff)
downloadgitlab-ce-1221bec56ca7d3bf1ba3b09e7a283ff5c11449f2.tar.gz
Refactor key fingerprint generation.
Diffstat (limited to 'app')
-rw-r--r--app/models/key.rb44
1 files changed, 4 insertions, 40 deletions
diff --git a/app/models/key.rb b/app/models/key.rb
index 480a16f9335..016eee86992 100644
--- a/app/models/key.rb
+++ b/app/models/key.rb
@@ -16,7 +16,6 @@ require 'digest/md5'
class Key < ActiveRecord::Base
include Sortable
- include Gitlab::Popen
belongs_to :user
@@ -79,44 +78,9 @@ class Key < ActiveRecord::Base
def generate_fingerprint
self.fingerprint = nil
- return unless key.present?
-
- cmd_status = 0
- cmd_output = ''
- explicit_fingerprint_algorithm = false
- Tempfile.open('gitlab_key_file') do |file|
- file.puts key
- file.rewind
-
- # OpenSSH 6.8 introduces a new default output format for fingerprints.
- # Check the version and decide which command to use.
- version_output, version_status = popen(%W(ssh -V))
- if version_status.zero?
- out, _ = version_output.scan /.*?(\d)\.(\d).*?,/
- major, minor = out[0], out[1]
- if major.to_i > 6 or (major.to_i == 6 and minor.to_i >= 8)
- explicit_fingerprint_algorithm = true
- end
- end
-
- if explicit_fingerprint_algorithm
- cmd_output, cmd_status = popen(%W(ssh-keygen -E md5 -lf #{file.path}), '/tmp')
- else
- cmd_output, cmd_status = popen(%W(ssh-keygen -lf #{file.path}), '/tmp')
- end
- end
-
- if cmd_status.zero?
- if explicit_fingerprint_algorithm
- cmd_output.gsub /(MD5:)(\h{2}:)+\h{2}/ do |match|
- match.slice! /^MD5:/
- self.fingerprint = match
- end
- else
- cmd_output.gsub /(\h{2}:)+\h{2}/ do |match|
- self.fingerprint = match
- end
- end
- end
+
+ return unless self.key.present?
+
+ self.fingerprint = Gitlab::KeyFingerprint.new(self.key).fingerprint
end
end