From 5b4382e12e060528c42bd3e19f61df88d6316785 Mon Sep 17 00:00:00 2001 From: miks Date: Fri, 30 Dec 2011 21:59:59 +0200 Subject: [PATCH] Validate key uniqueness across Key and DeployKey tables --- app/models/deploy_key.rb | 4 ++++ app/models/key.rb | 4 ++++ lib/unique_public_key_validator.rb | 7 +++++++ 3 files changed, 15 insertions(+) create mode 100644 lib/unique_public_key_validator.rb diff --git a/app/models/deploy_key.rb b/app/models/deploy_key.rb index 254e766c4..c720f09ba 100644 --- a/app/models/deploy_key.rb +++ b/app/models/deploy_key.rb @@ -1,3 +1,5 @@ +require 'unique_public_key_validator' + class DeployKey < ActiveRecord::Base belongs_to :project @@ -10,6 +12,8 @@ class DeployKey < ActiveRecord::Base :uniqueness => true, :length => { :within => 0..5000 } + validates_with UniquePublicKeyValidator + before_save :set_identifier after_save :update_repository after_destroy :repository_delete_key diff --git a/app/models/key.rb b/app/models/key.rb index 359538d2c..0e4088e47 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -1,3 +1,5 @@ +require 'unique_public_key_validator' + class Key < ActiveRecord::Base belongs_to :user @@ -10,6 +12,8 @@ class Key < ActiveRecord::Base :uniqueness => true, :length => { :within => 0..5000 } + validates_with UniquePublicKeyValidator + before_save :set_identifier after_save :update_repository after_destroy :repository_delete_key diff --git a/lib/unique_public_key_validator.rb b/lib/unique_public_key_validator.rb new file mode 100644 index 000000000..b2306bda3 --- /dev/null +++ b/lib/unique_public_key_validator.rb @@ -0,0 +1,7 @@ +class UniquePublicKeyValidator < ActiveModel::Validator + def validate(record) + if (DeployKey.where('key = ? AND id !=?', record.key , record.id).count > 0 || Key.where('key = ? AND id !=?', record.key , record.id).count > 0) + record.errors.add :key, 'already exist.' + end + end +end -- 2.11.0