easy_auth-password 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e419b42c6e04427284b63a41be18698e6cf6b0e9
4
+ data.tar.gz: aa272d6e85671d33233c5f5b7d922f01d45836fe
5
+ SHA512:
6
+ metadata.gz: 03743c3e90ed4ffd1b1a826a211628852c8d689febad90a36085d5d98286c8b670bbe758910beb5e1e2d5d757aaa6f121071c60fbfcfbbac2e31c679d04f2251
7
+ data.tar.gz: a095feb21ca9f6eb401050ddf3b1f7fdde22621c34fdb87df5e241e81ad249c23f4b4714d15e5485771976ae0084ced88a6bd45c1fc36413efd2b9831ab67d16
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # EasyAuth-Password #
2
2
 
3
- [![Build Status](http://travis-ci.org/dockyard/easy_auth-password.png)](http://travis-ci.org/dockyard/easy_auth-password)
3
+ [![Build Status](https://secure.travis-ci.org/dockyard/easy_auth-password.png)](http://travis-ci.org/dockyard/easy_auth-password)
4
4
  [![Dependency Status](https://gemnasium.com/dockyard/easy_auth-password.png?travis)](https://gemnasium.com/dockyard/easy_auth-password)
5
5
  [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/dockyard/easy_auth-password)
6
6
 
7
- Dead simple drop in authentication for Rails
7
+ Password support for [EasyAuth](https://github.com/dockyard/easy_auth)
8
8
 
9
9
  ## Installation ##
10
10
 
@@ -14,13 +14,18 @@ In your Gemfile add the following:
14
14
  gem 'easy_auth-password'
15
15
  ```
16
16
 
17
- After running Bundler you'll need to install the migrations
17
+ Then follow the general installation instructions for
18
+ [EasyAuth](https://github.com/dockyard/easy_auth#installation)
18
19
 
19
- ```ruby
20
- rake easy_auth-password:install:migrations
20
+ Then add the migration:
21
+
22
+ ```bash
23
+ rake easy_auth_password:install:migrations
21
24
  ```
22
25
 
23
- Then run your migrations.
26
+ ## Usage ##
27
+
28
+ `EasyAuth-Password` will handle most of what you want automatically.
24
29
 
25
30
  ## Authors ##
26
31
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'bundler/setup'
2
2
  require 'rspec/core/rake_task'
3
- Bundler::GemHelper.install_tasks
3
+ require 'byebug'
4
4
 
5
5
  RSpec::Core::RakeTask.new('default') do |t|
6
6
  t.pattern = FileList['spec/**/*_spec.rb']
@@ -8,3 +8,4 @@ end
8
8
 
9
9
  APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
10
10
  load 'rails/tasks/engine.rake'
11
+ Bundler::GemHelper.install_tasks
@@ -1,4 +1,4 @@
1
- <%= form_for @identity, :url => main_app.edit_password_path(params[:reset_token]) do |f| %>
1
+ <%= form_for @account, :url => edit_password_reset_path(:username => params[:username], :reset_token => params[:reset_token]) do |f| %>
2
2
  <p>
3
3
  <%= f.label :password %>
4
4
  <%= f.text_field :password %>
@@ -1,7 +1,7 @@
1
1
  <%= form_for @identity, :url => main_app.password_reset_path, :method => :post do |f| %>
2
2
  <p>
3
- <%= f.label :username %>
4
- <%= f.text_field :username %>
3
+ <%= f.label :uid %>
4
+ <%= f.text_field :uid %>
5
5
  </p>
6
6
  <p>
7
7
  <%= f.submit 'Submit' %>
@@ -1,7 +1,7 @@
1
1
  <%= form_for @identity, :url => main_app.sign_in_path do |f| %>
2
2
  <p>
3
- <%= f.label :username %>
4
- <%= f.text_field :username %>
3
+ <%= f.label :uid %>
4
+ <%= f.text_field :uid %>
5
5
  </p>
6
6
  <p>
7
7
  <%= f.label :password %>
@@ -1,14 +1,10 @@
1
1
  en:
2
2
  easy_auth:
3
- sessions:
4
- create:
5
- notice: 'You have been signed in.'
6
- error: 'Could not sign you in. Please check your credentials.'
7
- delete:
8
- notice: 'You have been signed out.'
9
3
  password_reset:
10
4
  create:
11
5
  notice: 'Please check your email for your password reset link.'
12
6
  update:
13
7
  notice: 'Your password has been updated.'
14
8
  error: 'There was an issue updating your password.'
9
+ edit:
10
+ error: 'Could not authenticate you from your reset token.'
@@ -0,0 +1,6 @@
1
+ class CreateEasyAuthPassword < ActiveRecord::Migration
2
+ def change
3
+ add_column :identities, :remember_token_digest, :string
4
+ add_column :identities, :reset_token_digest, :string
5
+ end
6
+ end
@@ -1,7 +1,7 @@
1
1
  module EasyAuth::Controllers::PasswordReset
2
2
  def self.included(base)
3
3
  base.instance_eval do
4
- before_filter :find_identity_from_reset_token, :only => [:edit, :update]
4
+ before_filter :find_account_from_reset_token, :only => [:edit, :update]
5
5
  end
6
6
  end
7
7
 
@@ -10,48 +10,62 @@ module EasyAuth::Controllers::PasswordReset
10
10
  end
11
11
 
12
12
  def create
13
- if @identity = EasyAuth.find_identity_model(params).where(:username => params[:identities_password][:username]).first
14
- @identity.generate_reset_token!
15
- PasswordResetMailer.reset(@identity.id).deliver
13
+ if @identity = EasyAuth.find_identity_model(params).where(:uid => params[:identities_password][:uid]).first
14
+ unencrypted_reset_token = @identity.generate_reset_token!
15
+ PasswordResetMailer.reset(@identity.id, unencrypted_reset_token).deliver
16
+ after_successful_attempted_password_reset
16
17
  else
17
- @identity = EasyAuth.find_identity_model(params).new(params[:identities_password])
18
+ @identity = EasyAuth.find_identity_model(params).new(uid: params[:identities_password][:uid])
19
+ after_failed_attempted_password_reset
18
20
  end
19
-
20
- flash.now[:notice] = I18n.t('easy_auth.password_reset.create.notice')
21
- render :new
22
21
  end
23
22
 
24
23
  def update
25
- if @identity.update_attributes(scope_to_password_params(:identities_password))
26
- after_successful_password_reset(@identity)
24
+ @identity = @account.password_identities.first
25
+
26
+ if @account.update_attributes(account_params)
27
+ after_successful_password_reset
27
28
  else
28
- after_failed_password_reset(@identity)
29
+ after_failed_password_reset
29
30
  end
30
31
  end
31
32
 
32
- private
33
+ def after_successful_password_reset
34
+ session[:identity_id] = @identity.id
35
+ @identity.update_column(:reset_token_digest, nil)
36
+ redirect_to after_successful_password_reset_url, :notice => I18n.t('easy_auth.password_reset.update.notice')
37
+ end
38
+
39
+ def after_successful_password_reset_url
40
+ @identity.account
41
+ end
33
42
 
34
- def scope_to_password_params(key)
35
- { :password => params[key][:password], :password_confirmation => params[key][:password_confirmation] }
43
+ def after_failed_password_reset
44
+ flash.now[:error] = I18n.t('easy_auth.password_reset.update.error')
45
+ render :edit
36
46
  end
37
47
 
38
- def find_identity_from_reset_token
39
- @identity = EasyAuth.find_identity_model(params).where(:reset_token => params[:reset_token].to_s).first
40
- @identity.password_reset = true
48
+ def after_successful_attempted_password_reset
49
+ flash.now[:notice] = I18n.t('easy_auth.password_reset.create.notice')
50
+ render :new
41
51
  end
42
52
 
43
- def after_successful_password_reset(identity)
44
- identity.set_account_session(session)
45
- identity.update_column(:reset_token, nil)
46
- redirect_to after_successful_password_reset_url(identity), :notice => I18n.t('easy_auth.password_reset.update.notice')
53
+ def after_failed_attempted_password_reset
54
+ after_successful_attempted_password_reset
47
55
  end
48
56
 
49
- def after_successful_password_reset_url(identity)
50
- identity.account
57
+ private
58
+
59
+ def account_params
60
+ params.require(ActiveModel::Naming.param_key(@account)).permit(:password, :password_confirmation)
51
61
  end
52
62
 
53
- def after_failed_password_reset(identity)
54
- flash.now[:error] = I18n.t('easy_auth.password_reset.update.error')
55
- render :edit
63
+ def find_account_from_reset_token
64
+ if @account = EasyAuth.find_identity_model(params).authenticate(self, :reset_token).try(:account)
65
+ @account.password_reset = true
66
+ else
67
+ flash[:error] = I18n.t('easy_auth.password_reset.edit.error')
68
+ redirect_to root_path
69
+ end
56
70
  end
57
71
  end
@@ -3,9 +3,9 @@ module EasyAuth::Mailers::PasswordReset
3
3
  base.clear_action_methods!
4
4
  end
5
5
 
6
- def reset(id)
7
- @identity = EasyAuth.identity_model.find(id)
8
- @url = edit_password_url(@identity.reset_token)
6
+ def reset(id, unencrypted_reset_token)
7
+ @identity = EasyAuth.find_identity_model(:identity => :password).find(id)
8
+ @url = edit_password_reset_url(:id => id, :reset_token => unencrypted_reset_token)
9
9
  mail :to => @identity.account.email, :subject => 'Password reset'
10
10
  end
11
11
  end
@@ -1,34 +1,69 @@
1
+ require 'scrypt'
2
+
1
3
  module EasyAuth::Models::Identities::Password
2
4
  include EasyAuth::TokenGenerator
5
+ extend ActiveSupport::Concern
3
6
 
4
- def self.included(base)
5
- base.class_eval do
6
- has_secure_password
7
+ included do
8
+ # Attributes
9
+ attr_reader :password
10
+ alias_attribute :password_digest, :token
7
11
 
8
- # Attributes
9
- attr_accessor :password_reset
10
- attr_accessible :username, :password, :password_confirmation, :remember
11
- alias_attribute :password_digest, :token
12
+ # Validations
13
+ _validators[:uid].delete_at(_validators[:uid].index { |v| v.instance_of?(ActiveRecord::Validations::UniquenessValidator) })
14
+ _validators[:token].delete_at(_validators[:token].index { |v| v.instance_of?(ActiveRecord::Validations::PresenceValidator) })
15
+ validates :uid, uniqueness: { case_sensitive: false }
16
+ validates :password_digest, presence: true
17
+ end
12
18
 
13
- # Relationships
14
- belongs_to :account, :polymorphic => true
19
+ module ClassMethods
20
+ def authenticate(controller, token_name = :password)
21
+ attributes = send("attributes_for_#{token_name}", controller)
22
+ return nil if attributes.nil?
23
+ where(send("conditions_for_#{token_name}", attributes)).first.try(:authenticate, attributes[token_name], token_name)
24
+ end
15
25
 
16
- # Validations
17
- validates :username, :uniqueness => { :case_sensitive => false }, :presence => true
18
- validates :password, :presence => { :on => :create }
19
- validates :password, :presence => { :if => :password_reset }
26
+ private
27
+
28
+ def attributes_for_password(controller)
29
+ controller.params[:identities_password]
30
+ end
31
+
32
+ def attributes_for_reset_token(controller)
33
+ controller.params
34
+ end
35
+
36
+ def attributes_for_remember_token(cookies)
37
+ { :id => cookies[:remember_id], :remember_token => cookies[:remember_token] }
38
+ end
20
39
 
21
- def self.authenticate(controller)
22
- attributes = controller.params[:identities_password]
23
- return nil if attributes.nil?
24
- where(arel_table[:username].matches(attributes[:username].try(&:strip))).first.try(:authenticate, attributes[:password])
25
- end
40
+ def conditions_for_password(attributes)
41
+ arel_table[:uid].matches(attributes[:uid].try(&:strip))
42
+ end
43
+
44
+ def conditions_for_reset_token(attributes)
45
+ { :id => attributes[:id] }
46
+ end
47
+
48
+ def conditions_for_remember_token(attributes)
49
+ { :id => attributes[:id] }
50
+ end
51
+ end
52
+
53
+ def authenticate(unencrypted_token, token_name = :password)
54
+ SCrypt::Password.new(send("#{token_name}_digest")) == unencrypted_token && self
55
+ end
26
56
 
57
+ def password=(unencrypted_password)
58
+ @password = unencrypted_password
59
+ unless unencrypted_password.blank?
60
+ self.password_digest = SCrypt::Password.create(unencrypted_password)
27
61
  end
28
62
  end
29
63
 
30
64
  def generate_reset_token!
31
- update_column(:reset_token, URI.escape(_generate_token(:reset).gsub(/[\.|\\\/]/,'')))
32
- reset_token
65
+ unencrypted_token = _generate_token(:reset_token)
66
+ update_column(:reset_token_digest, SCrypt::Password.create(unencrypted_token))
67
+ unencrypted_token
33
68
  end
34
69
  end
@@ -1,7 +1,28 @@
1
1
  module EasyAuth::Password::Controllers::Sessions
2
- extend EasyAuth::ReverseConcern
2
+ extend ActiveSupport::Concern
3
3
 
4
- reverse_included do
5
- before_filter :no_authentication, :only => :new, :if => Proc.new { params[:identity] == :password }
4
+ prepended do
5
+ before_filter :no_authentication, :only => :new, :if => Proc.new { params[:identity] == 'password' }
6
+
7
+ def create
8
+ super
9
+
10
+ if @identity.persisted?
11
+ if identity_attributes = params[ActiveModel::Naming.param_key(EasyAuth.find_identity_model(params).new)]
12
+ @identity.remember = identity_attributes[:remember]
13
+ end
14
+
15
+ if @identity.remember
16
+ cookies[:remember_id] = { :value => @identity.id, :expires => @identity.remember_time.from_now }
17
+ cookies[:remember_token] = { :value => @identity.generate_remember_token_digest!, :expires => @identity.remember_time.from_now }
18
+ end
19
+ end
20
+ end
21
+
22
+ def destroy
23
+ super
24
+ cookies.delete(:remember_id)
25
+ cookies.delete(:remember_token)
26
+ end
6
27
  end
7
28
  end
@@ -0,0 +1,30 @@
1
+ module EasyAuth::Password::Helpers::EasyAuth
2
+ extend ActiveSupport::Concern
3
+
4
+ prepended do
5
+ def current_account
6
+ super
7
+
8
+ if @current_account.blank?
9
+ if cookies[:remember_id] && cookies[:remember_token]
10
+ begin
11
+ @current_account = EasyAuth.find_identity_model(:identity => :password).authenticate(cookies, :remember_token).account
12
+ rescue => e
13
+ @current_account = nil
14
+ delete_session_data
15
+ end
16
+ end
17
+ end
18
+
19
+ @current_account
20
+ end
21
+
22
+ private
23
+
24
+ def delete_session_data
25
+ super
26
+ cookies.delete(:remember_id)
27
+ cookies.delete(:remember_token)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,4 @@
1
+ module EasyAuth::Password::Helpers
2
+ extend ActiveSupport::Autoload
3
+ autoload :EasyAuth
4
+ end
@@ -1,38 +1,78 @@
1
1
  module EasyAuth::Password::Models::Account
2
- extend EasyAuth::ReverseConcern
2
+ extend ActiveSupport::Concern
3
+ class NoIdentityUIDError < StandardError; end
3
4
 
4
- reverse_included do
5
+ prepended do
5
6
  # Attributes
6
- attr_accessor :password
7
- attr_accessible :password, :password_confirmation
7
+ attr_accessor :password, :password_reset
8
8
 
9
9
  # Validations
10
- validates :password, :presence => { :on => :create, :if => :run_password_identity_validations? }, :confirmation => true
11
- validates identity_username_attribute, :presence => true, :if => :run_password_identity_validations?
10
+ validates :password, :presence => { :if => :password_reset }, :confirmation => true
11
+ identity_uid_attributes.each do |attribute|
12
+ validates attribute, :presence => true, :if => :run_password_identity_validations?
13
+ end
12
14
 
13
15
  # Callbacks
14
- before_create :setup_password_identity, :if => :run_password_identity_validations?
15
- before_update :update_password_identity, :if => :run_password_identity_validations?
16
+ before_save :update_password_identities, :if => :can_update_password_identities?
16
17
 
17
18
  # Associations
18
- has_one :password_identity, :class_name => 'Identities::Password', :foreign_key => :account_id
19
+ has_many :password_identities, :class_name => 'Identities::Password', :as => :account
20
+ end
21
+
22
+ module ClassMethods
23
+ # Will attempt to find the uid attributes of :username and :email
24
+ # Will return an array of any defined on the model
25
+ # If neither are defined an exception will be raised
26
+ #
27
+ # Override this method with an array of symbols for custom attributes
28
+ #
29
+ # @return [Symbol]
30
+ def identity_uid_attributes
31
+ if table_exists?
32
+ attributes = (['email', 'username'] & column_names).map(&:to_sym)
33
+ else
34
+ attributes = []
35
+ end
36
+
37
+ if attributes.empty?
38
+ raise EasyAuth::Password::Models::Account::NoIdentityUIDError, 'your model must have either a #username or #email attribute. Or you must override the .identity_uid_attribute class method'
39
+ else
40
+ attributes
41
+ end
42
+ end
43
+ end
44
+
45
+ def identity_uid_attributes
46
+ self.class.identity_uid_attributes
19
47
  end
20
48
 
21
49
  def run_password_identity_validations?
22
- (self.new_record? && self.password.present?) || self.password_identity.present?
50
+ self.password.present? || self.password_identities.present?
23
51
  end
24
52
 
25
53
  private
26
54
 
27
- def setup_password_identity
28
- self.identities << EasyAuth.find_identity_model(:identity => :password).new(password_identity_attributes)
55
+ def can_update_password_identities?
56
+ password.present? || identity_uid_attributes.detect { |attribute| send("#{attribute}_changed?") && password_identities.where(:uid => send("#{attribute}_was")).first }
29
57
  end
30
58
 
31
- def update_password_identity
32
- self.password_identity.update_attributes(password_identity_attributes)
59
+ def update_password_identities
60
+ identity_uid_attributes.each do |attribute|
61
+ if send("#{attribute}_changed?")
62
+ identity = password_identities.find { |identity| identity.uid == send("#{attribute}_was") }
63
+ else
64
+ identity = password_identities.find { |identity| identity.uid == send(attribute) }
65
+ end
66
+
67
+ if identity
68
+ identity.update_attributes(password_identity_attributes(attribute))
69
+ else
70
+ self.password_identities.build(password_identity_attributes(attribute))
71
+ end
72
+ end
33
73
  end
34
74
 
35
- def password_identity_attributes
36
- { :username => self.identity_username_attribute, :password => self.password, :password_confirmation => self.password_confirmation }
75
+ def password_identity_attributes(attribute)
76
+ { :uid => send(attribute), :password => self.password }
37
77
  end
38
78
  end
@@ -0,0 +1,33 @@
1
+ module EasyAuth::Password::Models::Identity
2
+ extend ActiveSupport::Concern
3
+
4
+ # Getter for the remember flag
5
+ def remember
6
+ @remember
7
+ end
8
+
9
+ # Setter for the remember flag
10
+ #
11
+ # @param [Boolean] value
12
+ def remember=(value)
13
+ @remember = ::ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
14
+ end
15
+
16
+ # Generates a new remember token and updates it on the identity record
17
+ #
18
+ # @return [String]
19
+ def generate_remember_token_digest!
20
+ remember_token = _generate_token(:remember)
21
+ update_column(:remember_token_digest, SCrypt::Password.create(remember_token))
22
+ remember_token
23
+ end
24
+
25
+ # The time used for remembering how long to stay signed in
26
+ #
27
+ # Defaults to 1 year, override in the model to set your own custom remember time
28
+ #
29
+ # @return [DateTime]
30
+ def remember_time
31
+ 1.year
32
+ end
33
+ end
@@ -1,4 +1,5 @@
1
1
  module EasyAuth::Password::Models
2
2
  extend ActiveSupport::Autoload
3
3
  autoload :Account
4
+ autoload :Identity
4
5
  end
@@ -1,11 +1,16 @@
1
1
  module EasyAuth::Password::Routes
2
2
  def easy_auth_password_routes
3
- get '/sign_in' => 'sessions#new', :as => :sign_in, :defaults => { :identity => :password }
4
- post '/sign_in' => 'sessions#create', :defaults => { :identity => :password }
3
+ get '/sign_in' => 'sessions#new', :defaults => { :identity => 'password' }, :as => :sign_in
4
+ post '/sign_in' => 'sessions#create', :defaults => { :identity => 'password' }
5
5
 
6
- get '/password_reset' => 'password_reset#new', :as => :password_reset, :defaults => { :identity => :password }
7
- post '/password_reset' => 'password_reset#create', :defaults => { :identity => :password }
8
- get '/password_reset/:reset_token' => 'password_reset#edit', :as => :edit_password, :defaults => { :identity => :password }
9
- put '/password_reset/:reset_token' => 'password_reset#update', :defaults => { :identity => :password }
6
+ get '/password_reset' => 'password_reset#new', :defaults => { :identity => 'password' }, :as => :password_reset
7
+ post '/password_reset' => 'password_reset#create', :defaults => { :identity => 'password' }
8
+
9
+ get '/password_reset/:id/:reset_token' => 'password_reset#edit', :defaults => { :identity => 'password' }, :as => :edit_password_reset
10
+ if Rails.version >= '4.0.0'
11
+ patch '/password_reset/:id/:reset_token' => 'password_reset#update', :defaults => { :identity => 'password' }
12
+ else
13
+ put '/password_reset/:id/:reset_token' => 'password_reset#update', :defaults => { :identity => 'password' }
14
+ end
10
15
  end
11
16
  end
@@ -1,5 +1,5 @@
1
1
  module EasyAuth
2
2
  module Password
3
- VERSION = '0.0.6'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -8,6 +8,7 @@ module EasyAuth
8
8
  module Password
9
9
  extend ActiveSupport::Autoload
10
10
  autoload :Controllers
11
+ autoload :Helpers
11
12
  autoload :Models
12
13
  end
13
14
 
@@ -15,7 +16,13 @@ module EasyAuth
15
16
  autoload :PasswordReset
16
17
 
17
18
  module Sessions
18
- include EasyAuth::Password::Controllers::Sessions
19
+ prepend EasyAuth::Password::Controllers::Sessions
20
+ end
21
+ end
22
+
23
+ module Helpers
24
+ module EasyAuth
25
+ prepend ::EasyAuth::Password::Helpers::EasyAuth
19
26
  end
20
27
  end
21
28
 
@@ -25,7 +32,11 @@ module EasyAuth
25
32
 
26
33
  module Models
27
34
  module Account
28
- include EasyAuth::Password::Models::Account
35
+ prepend EasyAuth::Password::Models::Account
36
+ end
37
+
38
+ module Identity
39
+ prepend EasyAuth::Password::Models::Identity
29
40
  end
30
41
 
31
42
  module Identities
metadata CHANGED
@@ -1,132 +1,130 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy_auth-password
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brian Cardarella
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-05 00:00:00.000000000 Z
11
+ date: 2014-03-11 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: easy_auth
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: 0.2.0
19
+ version: 0.3.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: 0.2.0
26
+ version: 0.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: scrypt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: sqlite3
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ! '>='
45
+ - - '>='
36
46
  - !ruby/object:Gem::Version
37
47
  version: '0'
38
48
  type: :development
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ! '>='
52
+ - - '>='
44
53
  - !ruby/object:Gem::Version
45
54
  version: '0'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rspec-rails
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - ~>
52
60
  - !ruby/object:Gem::Version
53
- version: '0'
61
+ version: 2.11.4
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - ~>
60
67
  - !ruby/object:Gem::Version
61
- version: '0'
68
+ version: 2.11.4
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: capybara
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ~>
68
74
  - !ruby/object:Gem::Version
69
- version: '0'
75
+ version: '2.1'
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ~>
76
81
  - !ruby/object:Gem::Version
77
- version: '0'
82
+ version: '2.1'
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: capybara-email
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ~>
84
88
  - !ruby/object:Gem::Version
85
- version: '0'
89
+ version: 2.1.2
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - ~>
92
95
  - !ruby/object:Gem::Version
93
- version: '0'
96
+ version: 2.1.2
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: database_cleaner
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - '>='
100
102
  - !ruby/object:Gem::Version
101
103
  version: '0'
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - '>='
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  - !ruby/object:Gem::Dependency
111
112
  name: valid_attribute
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
- - - ! '>='
122
+ - - '>='
124
123
  - !ruby/object:Gem::Version
125
124
  version: '0'
126
125
  - !ruby/object:Gem::Dependency
127
126
  name: factory_girl_rails
128
127
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
128
  requirements:
131
129
  - - ~>
132
130
  - !ruby/object:Gem::Version
@@ -134,7 +132,6 @@ dependencies:
134
132
  type: :development
135
133
  prerelease: false
136
134
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
135
  requirements:
139
136
  - - ~>
140
137
  - !ruby/object:Gem::Version
@@ -142,7 +139,6 @@ dependencies:
142
139
  - !ruby/object:Gem::Dependency
143
140
  name: factory_girl
144
141
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
142
  requirements:
147
143
  - - ~>
148
144
  - !ruby/object:Gem::Version
@@ -150,41 +146,36 @@ dependencies:
150
146
  type: :development
151
147
  prerelease: false
152
148
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
149
  requirements:
155
150
  - - ~>
156
151
  - !ruby/object:Gem::Version
157
152
  version: 2.6.0
158
153
  - !ruby/object:Gem::Dependency
159
- name: bourne
154
+ name: mocha
160
155
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
156
  requirements:
163
- - - ! '>='
157
+ - - ~>
164
158
  - !ruby/object:Gem::Version
165
- version: '0'
159
+ version: 0.10.5
166
160
  type: :development
167
161
  prerelease: false
168
162
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
163
  requirements:
171
- - - ! '>='
164
+ - - ~>
172
165
  - !ruby/object:Gem::Version
173
- version: '0'
166
+ version: 0.10.5
174
167
  - !ruby/object:Gem::Dependency
175
168
  name: launchy
176
169
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
170
  requirements:
179
- - - ! '>='
171
+ - - '>='
180
172
  - !ruby/object:Gem::Version
181
173
  version: '0'
182
174
  type: :development
183
175
  prerelease: false
184
176
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
177
  requirements:
187
- - - ! '>='
178
+ - - '>='
188
179
  - !ruby/object:Gem::Version
189
180
  version: '0'
190
181
  description: EasyAuth-Password
@@ -205,13 +196,17 @@ files:
205
196
  - app/views/sessions/new.html.erb
206
197
  - config/locales/en.yml
207
198
  - config/routes.rb
199
+ - db/migrate/20120227014024_create_easy_auth_password.rb
208
200
  - lib/easy_auth/controllers/password_reset.rb
209
201
  - lib/easy_auth/mailers/password_reset.rb
210
202
  - lib/easy_auth/models/identities/password.rb
211
203
  - lib/easy_auth/password/controllers/sessions.rb
212
204
  - lib/easy_auth/password/controllers.rb
213
205
  - lib/easy_auth/password/engine.rb
206
+ - lib/easy_auth/password/helpers/easy_auth.rb
207
+ - lib/easy_auth/password/helpers.rb
214
208
  - lib/easy_auth/password/models/account.rb
209
+ - lib/easy_auth/password/models/identity.rb
215
210
  - lib/easy_auth/password/models.rb
216
211
  - lib/easy_auth/password/routes.rb
217
212
  - lib/easy_auth/password/version.rb
@@ -221,32 +216,25 @@ files:
221
216
  - README.md
222
217
  homepage: https://github.com/dockyard/easy_auth-password
223
218
  licenses: []
219
+ metadata: {}
224
220
  post_install_message:
225
221
  rdoc_options: []
226
222
  require_paths:
227
223
  - lib
228
224
  required_ruby_version: !ruby/object:Gem::Requirement
229
- none: false
230
225
  requirements:
231
- - - ! '>='
226
+ - - '>='
232
227
  - !ruby/object:Gem::Version
233
228
  version: '0'
234
- segments:
235
- - 0
236
- hash: -4240566048460302950
237
229
  required_rubygems_version: !ruby/object:Gem::Requirement
238
- none: false
239
230
  requirements:
240
- - - ! '>='
231
+ - - '>='
241
232
  - !ruby/object:Gem::Version
242
233
  version: '0'
243
- segments:
244
- - 0
245
- hash: -4240566048460302950
246
234
  requirements: []
247
235
  rubyforge_project:
248
- rubygems_version: 1.8.23
236
+ rubygems_version: 2.0.3
249
237
  signing_key:
250
- specification_version: 3
238
+ specification_version: 4
251
239
  summary: EasyAuth-Password
252
240
  test_files: []