diff options
author | haseeb <haseebeqx@gmail.com> | 2017-08-03 16:39:10 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2017-08-03 16:39:10 +0000 |
commit | ae99f05b059f613296c39dfa45c37dbcab40f4cd (patch) | |
tree | 1b067be3bd6879727efc2a5d94d2d16880c928d3 | |
parent | 118dcff0351363426c7ac1cb3e459b001f2f9a47 (diff) | |
download | gitlab-ce-ae99f05b059f613296c39dfa45c37dbcab40f4cd.tar.gz |
fix #35133 strip new lines from ssh keys
-rw-r--r-- | app/models/key.rb | 3 | ||||
-rw-r--r-- | spec/models/key_spec.rb | 14 |
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 |