From 7648c92fada26b5edc246b458a666746b14fc767 Mon Sep 17 00:00:00 2001 From: Stephane Bounmy Date: Mon, 10 Feb 2014 10:38:29 +0100 Subject: [PATCH] support mongoid aswell --- lib/devise_security_extension.rb | 10 ++++++---- .../models/active_record/old_password.rb | 3 +++ .../models/{ => active_record}/security_question.rb | 3 +-- .../models/mongoid/old_password.rb | 12 ++++++++++++ .../models/mongoid/security_question.rb | 7 +++++++ lib/devise_security_extension/models/old_password.rb | 3 --- .../models/secure_validatable.rb | 6 ++++-- 7 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 lib/devise_security_extension/models/active_record/old_password.rb rename lib/devise_security_extension/models/{ => active_record}/security_question.rb (86%) create mode 100644 lib/devise_security_extension/models/mongoid/old_password.rb create mode 100644 lib/devise_security_extension/models/mongoid/security_question.rb delete mode 100644 lib/devise_security_extension/models/old_password.rb diff --git a/lib/devise_security_extension.rb b/lib/devise_security_extension.rb index a902ed35..12b305e6 100644 --- a/lib/devise_security_extension.rb +++ b/lib/devise_security_extension.rb @@ -1,5 +1,5 @@ #require 'rails/all' -require 'active_record/connection_adapters/abstract/schema_definitions' +require 'active_record/connection_adapters/abstract/schema_definitions' if defined?(ActiveRecord) require 'active_support/core_ext/integer' require 'active_support/ordered_hash' require 'active_support/concern' @@ -80,6 +80,8 @@ module Controllers end end +orm = defined?(Mongoid) ? 'mongoid' : 'active_record' + # modules Devise.add_module :password_expirable, :controller => :password_expirable, :model => 'devise_security_extension/models/password_expirable', :route => :password_expired Devise.add_module :secure_validatable, :model => 'devise_security_extension/models/secure_validatable' @@ -91,6 +93,6 @@ module Controllers # requires require 'devise_security_extension/routes' require 'devise_security_extension/rails' -require 'devise_security_extension/orm/active_record' -require 'devise_security_extension/models/old_password' -require 'devise_security_extension/models/security_question' +require 'devise_security_extension/orm/active_record' if defined?(ActiveRecord) +require "devise_security_extension/models/#{orm}/old_password" +require "devise_security_extension/models/#{orm}/security_question" diff --git a/lib/devise_security_extension/models/active_record/old_password.rb b/lib/devise_security_extension/models/active_record/old_password.rb new file mode 100644 index 00000000..2d1928bc --- /dev/null +++ b/lib/devise_security_extension/models/active_record/old_password.rb @@ -0,0 +1,3 @@ +class OldPassword < ActiveRecord::Base + belongs_to :password_archivable, :polymorphic => true +end \ No newline at end of file diff --git a/lib/devise_security_extension/models/security_question.rb b/lib/devise_security_extension/models/active_record/security_question.rb similarity index 86% rename from lib/devise_security_extension/models/security_question.rb rename to lib/devise_security_extension/models/active_record/security_question.rb index 8df1e208..a709bea1 100644 --- a/lib/devise_security_extension/models/security_question.rb +++ b/lib/devise_security_extension/models/active_record/security_question.rb @@ -1,3 +1,2 @@ class SecurityQuestion < ActiveRecord::Base - -end +end \ No newline at end of file diff --git a/lib/devise_security_extension/models/mongoid/old_password.rb b/lib/devise_security_extension/models/mongoid/old_password.rb new file mode 100644 index 00000000..46663e10 --- /dev/null +++ b/lib/devise_security_extension/models/mongoid/old_password.rb @@ -0,0 +1,12 @@ +class OldPassword + include Mongoid::Document + include Mongoid::Timestamps + + field :encrypted_password, :type => String + field :password_salt, :type => String + field :password_archivable_id, :type => Integer + field :password_archivable_type, :type => String + + belongs_to :password_archivable, :polymorphic => true + attr_accessible :encrypted_password +end \ No newline at end of file diff --git a/lib/devise_security_extension/models/mongoid/security_question.rb b/lib/devise_security_extension/models/mongoid/security_question.rb new file mode 100644 index 00000000..0beb452f --- /dev/null +++ b/lib/devise_security_extension/models/mongoid/security_question.rb @@ -0,0 +1,7 @@ +class SecurityQuestion + include Mongoid::Document + include Mongoid::Timestamps + + field :locale, type: String + field :name, type: String +end diff --git a/lib/devise_security_extension/models/old_password.rb b/lib/devise_security_extension/models/old_password.rb deleted file mode 100644 index f667917d..00000000 --- a/lib/devise_security_extension/models/old_password.rb +++ /dev/null @@ -1,3 +0,0 @@ -class OldPassword < ActiveRecord::Base - belongs_to :password_archivable, :polymorphic => true -end diff --git a/lib/devise_security_extension/models/secure_validatable.rb b/lib/devise_security_extension/models/secure_validatable.rb index 2b933867..2eec4a85 100644 --- a/lib/devise_security_extension/models/secure_validatable.rb +++ b/lib/devise_security_extension/models/secure_validatable.rb @@ -36,7 +36,9 @@ def self.included(base) end # extra validations - validates :email, :email => email_validation if email_validation # use rails_email_validator or similar + if email_validation # use rails_email_validator or similar + validates :email, :email => email_validation + end validates :password, :format => { :with => password_regex, :message => :password_format }, :if => :password_required? # don't allow use same password @@ -76,7 +78,7 @@ module ClassMethods private def has_uniqueness_validation_of_login? validators.any? do |validator| - validator.kind_of?(ActiveRecord::Validations::UniquenessValidator) && + validator.class.name =~ /::Validations::UniquenessValidator$/) && validator.attributes.include?(login_attribute) end end