diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-02-02 19:18:12 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2018-02-02 19:18:12 +0000 |
commit | a58f8c32c62bcf5824d1fe1d0de53e9bda974d65 (patch) | |
tree | 724ed641bc437c9f6133d5555c9766647d8682e3 /spec/models/key_spec.rb | |
parent | cd5d75c362cdf06efb8174eddfbd0f4b65687dec (diff) | |
parent | 972f564dcd897ee66799c19f96ed22df588f8a18 (diff) | |
download | gitlab-ce-a58f8c32c62bcf5824d1fe1d0de53e9bda974d65.tar.gz |
Merge branch 'rd-40552-gitlab-should-check-if-keys-are-valid-before-saving' into 'master'
Sanitize extra blank spaces used when uploading a SSH key
Closes #40552
See merge request gitlab-org/gitlab-ce!16821
Diffstat (limited to 'spec/models/key_spec.rb')
-rw-r--r-- | spec/models/key_spec.rb | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb index 7398fd25aa8..bf5703ac986 100644 --- a/spec/models/key_spec.rb +++ b/spec/models/key_spec.rb @@ -72,16 +72,53 @@ describe Key, :mailer do expect(build(:key)).to be_valid end - 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 unfingerprintable key (not a key)' do expect(build(:key, key: 'ssh-rsa an-invalid-key==')).not_to be_valid end + + where(:factory, :chars, :expected_sections) do + [ + [:key, ["\n", "\r\n"], 3], + [:key, [' ', ' '], 3], + [:key_without_comment, [' ', ' '], 2] + ] + end + + with_them do + let!(:key) { create(factory) } + let!(:original_fingerprint) { key.fingerprint } + + it 'accepts a key with blank space characters after stripping them' do + modified_key = key.key.insert(100, chars.first).insert(40, chars.last) + _, content = modified_key.split + + key.update!(key: modified_key) + + expect(key).to be_valid + expect(key.key.split.size).to eq(expected_sections) + + expect(content).not_to match(/\s/) + expect(original_fingerprint).to eq(key.fingerprint) + end + end + end + + context 'validate size' do + where(:key_content, :result) do + [ + [Spec::Support::Helpers::KeyGeneratorHelper.new(512).generate, false], + [Spec::Support::Helpers::KeyGeneratorHelper.new(8192).generate, false], + [Spec::Support::Helpers::KeyGeneratorHelper.new(1024).generate, true] + ] + end + + with_them do + it 'validates the size of the key' do + key = build(:key, key: key_content) + + expect(key.valid?).to eq(result) + end + end end context 'validate it meets key restrictions' do |