summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaseeb <haseebeqx@gmail.com>2017-08-03 16:39:10 +0000
committerRémy Coutable <remy@rymai.me>2017-08-03 16:39:10 +0000
commitae99f05b059f613296c39dfa45c37dbcab40f4cd (patch)
tree1b067be3bd6879727efc2a5d94d2d16880c928d3
parent118dcff0351363426c7ac1cb3e459b001f2f9a47 (diff)
downloadgitlab-ce-ae99f05b059f613296c39dfa45c37dbcab40f4cd.tar.gz
fix #35133 strip new lines from ssh keys
-rw-r--r--app/models/key.rb3
-rw-r--r--spec/models/key_spec.rb14
2 files changed, 9 insertions, 8 deletions
diff --git a/app/models/key.rb b/app/models/key.rb
index cb8f10f6d55..49bc26122fa 100644
--- a/app/models/key.rb
+++ b/app/models/key.rb
@@ -16,8 +16,6 @@ class Key < ActiveRecord::Base
presence: true,
length: { maximum: 5000 },
format: { with: /\A(ssh|ecdsa)-.*\Z/ }
- validates :key,
- format: { without: /\n|\r/, message: 'should be a single line' }
validates :fingerprint,
uniqueness: true,
presence: { message: 'cannot be generated' }
@@ -31,6 +29,7 @@ class Key < ActiveRecord::Base
after_destroy :post_destroy_hook
def key=(value)
+ value&.delete!("\n\r")
value.strip! unless value.blank?
write_attribute(:key, value)
end
diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb
index d41717d0223..251d0cfd08c 100644
--- a/spec/models/key_spec.rb
+++ b/spec/models/key_spec.rb
@@ -94,15 +94,17 @@ describe Key do
expect(key).not_to be_valid
end
- it 'rejects the unfingerprintable key (not a key)' do
- expect(build(:key, key: 'ssh-rsa an-invalid-key==')).not_to be_valid
+ it 'accepts a key with newline charecters after stripping them' do
+ key = build(:key)
+ key.key = key.key.insert(100, "\n")
+ key.key = key.key.insert(40, "\r\n")
+ expect(key).to be_valid
end
- it 'rejects the multiple line key' do
- key = build(:key)
- key.key.tr!(' ', "\n")
- expect(key).not_to be_valid
+ it 'rejects the unfingerprintable key (not a key)' do
+ expect(build(:key, key: 'ssh-rsa an-invalid-key==')).not_to be_valid
end
+
end
context 'callbacks' do