Skip to content
Snippets Groups Projects
Commit 113d2ff5 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

store and display public key fingerprint

parent 05a7e8b9
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -15,6 +15,8 @@
require 'digest/md5'
 
class Key < ActiveRecord::Base
include Gitlab::Popen
belongs_to :user
 
attr_accessible :key, :title
Loading
Loading
@@ -34,16 +36,10 @@ class Key < ActiveRecord::Base
def fingerprintable_key
return true unless key # Don't test if there is no key.
 
file = Tempfile.new('key_file')
begin
file.puts key
file.rewind
fingerprint_output = `ssh-keygen -lf #{file.path} 2>&1` # Catch stderr.
ensure
file.close
file.unlink # deletes the temp file
unless generate_fingerpint
errors.add(:key, "can't be fingerprinted")
false
end
errors.add(:key, "can't be fingerprinted") if $?.exitstatus != 0
end
 
# projects that has this key
Loading
Loading
@@ -54,4 +50,30 @@ class Key < ActiveRecord::Base
def shell_id
"key-#{id}"
end
private
def generate_fingerpint
cmd_status = 0
cmd_output = ''
file = Tempfile.new('gitlab_key_file')
begin
file.puts key
file.rewind
cmd_output, cmd_status = popen("ssh-keygen -lf #{file.path}", '/tmp')
ensure
file.close
file.unlink # deletes the temp file
end
if cmd_status.zero?
cmd_output.gsub /([\d\h]{2}:)+[\d\h]{2}/ do |match|
self.fingerprint = match
end
true
else
false
end
end
end
%li
= link_to profile_key_path(key) do
%strong= key.title
%span
(#{key.fingerprint})
%span.cgray
added
= time_ago_in_words(key.created_at)
ago
= link_to 'Remove', profile_key_path(key), confirm: 'Are you sure?', method: :delete, class: "btn btn-small btn-remove delete-key pull-right"
 
= link_to 'Remove', profile_key_path(key), confirm: 'Are you sure?', method: :delete, class: "btn btn-small btn-remove delete-key pull-right"
Loading
Loading
@@ -12,6 +12,9 @@
%strong= @key.created_at.stamp("Aug 21, 2011")
 
.span8
%p
%span.light Fingerprint:
%strong= @key.fingerprint
%pre.well-pre
= @key.key
 
Loading
Loading
class AddFingerprintToKey < ActiveRecord::Migration
def change
add_column :keys, :fingerprint, :string
remove_column :keys, :identifier
end
end
Loading
Loading
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
 
ActiveRecord::Schema.define(:version => 20130622115340) do
ActiveRecord::Schema.define(:version => 20130624162710) do
 
create_table "deploy_keys_projects", :force => true do |t|
t.integer "deploy_key_id", :null => false
Loading
Loading
@@ -77,11 +77,10 @@ ActiveRecord::Schema.define(:version => 20130622115340) do
t.datetime "updated_at"
t.text "key"
t.string "title"
t.string "identifier"
t.string "type"
t.string "fingerprint"
end
 
add_index "keys", ["identifier"], :name => "index_keys_on_identifier"
add_index "keys", ["user_id"], :name => "index_keys_on_user_id"
 
create_table "merge_requests", :force => true do |t|
Loading
Loading
desc "GITLAB | Migrate SSH Keys"
task migrate_keys: :environment do
puts "This will add fingerprint to ssh keys in db"
ask_to_continue
Key.find_each(batch_size: 20) do |key|
if key.valid? && key.save
print '.'
else
print 'F'
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment