easy_auth-password 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []