summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/key.rb40
-rw-r--r--app/views/profiles/keys/_key.html.haml4
-rw-r--r--app/views/profiles/keys/show.html.haml3
-rw-r--r--db/migrate/20130624162710_add_fingerprint_to_key.rb6
-rw-r--r--db/schema.rb5
-rw-r--r--lib/tasks/migrate/migrate_keys.rake15
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
+
+