diff options
-rw-r--r-- | app/models/key.rb | 40 | ||||
-rw-r--r-- | app/views/profiles/keys/_key.html.haml | 4 | ||||
-rw-r--r-- | app/views/profiles/keys/show.html.haml | 3 | ||||
-rw-r--r-- | db/migrate/20130624162710_add_fingerprint_to_key.rb | 6 | ||||
-rw-r--r-- | db/schema.rb | 5 | ||||
-rw-r--r-- | lib/tasks/migrate/migrate_keys.rake | 15 |
6 files changed, 60 insertions, 13 deletions
diff --git a/app/models/key.rb b/app/models/key.rb index a87ea4943e9..0f2fc45abc9 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -15,6 +15,8 @@ require 'digest/md5' class Key < ActiveRecord::Base + include Gitlab::Popen + belongs_to :user attr_accessible :key, :title @@ -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 @@ -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 diff --git a/app/views/profiles/keys/_key.html.haml b/app/views/profiles/keys/_key.html.haml index cf4d80ad894..d0a3fe32c35 100644 --- a/app/views/profiles/keys/_key.html.haml +++ b/app/views/profiles/keys/_key.html.haml @@ -1,9 +1,11 @@ %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" diff --git a/app/views/profiles/keys/show.html.haml b/app/views/profiles/keys/show.html.haml index fc292f23066..735e9d1f936 100644 --- a/app/views/profiles/keys/show.html.haml +++ b/app/views/profiles/keys/show.html.haml @@ -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 diff --git a/db/migrate/20130624162710_add_fingerprint_to_key.rb b/db/migrate/20130624162710_add_fingerprint_to_key.rb new file mode 100644 index 00000000000..544a8366727 --- /dev/null +++ b/db/migrate/20130624162710_add_fingerprint_to_key.rb @@ -0,0 +1,6 @@ +class AddFingerprintToKey < ActiveRecord::Migration + def change + add_column :keys, :fingerprint, :string + remove_column :keys, :identifier + end +end diff --git a/db/schema.rb b/db/schema.rb index 4076c1b37d7..3208e8c2354 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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 @@ -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| diff --git a/lib/tasks/migrate/migrate_keys.rake b/lib/tasks/migrate/migrate_keys.rake new file mode 100644 index 00000000000..b13d984907b --- /dev/null +++ b/lib/tasks/migrate/migrate_keys.rake @@ -0,0 +1,15 @@ +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 + + |