Commit 578902fda09291a7a8059a1d50e42984c8fc10b4

lint key from newlines in before_validation hook

Commit diff

app/models/ssh_key.rb

 
11class SshKey < ActiveRecord::Base
22 belongs_to :user
33
4 SSH_KEY_FORMAT = /^ssh\-[a-z0-9]{3,4} [a-z0-9\+=\n\/]+ [a-z0-9_\.\-]*(@[a-z0-9\.\-]*)?$/ims
4 SSH_KEY_FORMAT = /^ssh\-[a-z0-9]{3,4} [a-z0-9\+=\/]+ [a-z0-9_\.\-]*(@[a-z0-9\.\-]*)?$/ims
55
66 validates_presence_of :user_id, :key
77 validates_format_of :key, :with => SSH_KEY_FORMAT
88
99 before_validation { |k| k.key.to_s.strip! }
10 before_save :lint_key!
10 before_validation :lint_key!
1111 after_create :create_new_task
1212 # we only allow people to create/destroy keys after_update :create_update_task
1313 after_destroy :create_delete_task
4747
4848 protected
4949 def lint_key!
50 key.gsub!(/\n*/m, "")
50 self.key.gsub!(/(\r|\n)*/m, "")
5151 end
5252end
toggle raw diff

spec/models/ssh_key_spec.rb

 
4040 key.should be_valid
4141 end
4242
43 it "cant contain multiple keys" do
44 k = "ssh-rsa bXljYWtkZHlpemltd21vY2NqdGJnaHN2bXFjdG9zbXplaGlpZnZ0a3VyZWFzc2dkanB4aXNxamxieGVib3l6Z3hmb2ZxZW15Y2FrZGR5aXppbXdtb2NjanRiZ2hzdm1xY3Rvc216ZWhpaWZ2dGt1cmVhc3NnZGpweGlzcWpsYnhlYm95emd4Zm9mcWU= foo@example.com"
45 key = "#{k}\r#{k}"
46 ssh = new_key(:key => key)
47 ssh.should_not be_valid
48 end
49
4350 it "strips newlines before save" do
4451 ssh = new_key(:key => "ssh-rsa bXljYWtkZHlpemltd21vY2NqdGJnaHN2bXFjdG\n9zbXplaGlpZnZ0a3VyZWFzc2dkanB4aXNxamxieGVib3l6Z3hmb2ZxZW15Y2FrZGR5aXppbXdtb2NjanRiZ2hzdm1xY3Rvc216ZWhpaWZ2dGt1cm\nVhc3NnZGpweGlzcWpsYnhlYm95emd4Zm9mcWU= foo@example.com")
45 ssh.save
52 ssh.valid?
4653 ssh.key.should_not include("\n")
54
55 ssh = new_key(:key => "ssh-rsa bXljYWtkZHlpemltd21vY2NqdGJnaHN2bXFjdG\r\n9zbXplaGlpZnZ0a3VyZWFzc2dkanB4aXNxamxieGVib3l6Z3hmb2ZxZW15Y2FrZGR5aXppbXdtb2NjanRiZ2hzdm1xY3Rvc216ZWhpaWZ2dGt1cm\nVhc3NnZGpweGlzcWpsYnhlYm95emd4Zm9mcWU= foo@example.com")
56 ssh.valid?
57 ssh.key.should_not include("\r\n")
58
59 ssh = new_key(:key => "ssh-rsa bXljYWtkZHlpemltd21vY2NqdGJnaHN2bXFjdG\r9zbXplaGlpZnZ0a3VyZWFzc2dkanB4aXNxamxieGVib3l6Z3hmb2ZxZW15Y2FrZGR5aXppbXdtb2NjanRiZ2hzdm1xY3Rvc216ZWhpaWZ2dGt1cm\nVhc3NnZGpweGlzcWpsYnhlYm95emd4Zm9mcWU= foo@example.com")
60 ssh.valid?
61 ssh.key.should_not include("\r")
4762 end
4863
4964 it "strips beginning and ending whitespace+newlines before validation" do
toggle raw diff