easy_auth 0.1.0 → 0.2.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.
- data/app/helpers/easy_auth_helper.rb +5 -0
- data/app/models/identity.rb +3 -0
- data/lib/easy_auth/controllers/sessions.rb +3 -3
- data/lib/easy_auth/models/account.rb +15 -1
- data/lib/easy_auth/models/identity.rb +21 -1
- data/lib/easy_auth/version.rb +1 -1
- data/lib/easy_auth.rb +38 -9
- data/lib/generators/easy_auth/setup_generator.rb +16 -0
- data/lib/generators/templates/easy_auth/initializer.rb +3 -0
- metadata +23 -6
- data/app/models/easy_auth/identity.rb +0 -3
- data/lib/tasks/easy_auth_tasks.rake +0 -4
@@ -5,6 +5,9 @@ module EasyAuthHelper
|
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
|
+
# Access the current account the users is authenticated with
|
9
|
+
#
|
10
|
+
# @return [Account] instance
|
8
11
|
def current_account
|
9
12
|
if session[:session_token] && session[:account_class]
|
10
13
|
begin
|
@@ -29,11 +32,13 @@ module EasyAuthHelper
|
|
29
32
|
end
|
30
33
|
alias :current_user :current_account
|
31
34
|
|
35
|
+
# Should be used to test if user is authenticated
|
32
36
|
def account_signed_in?
|
33
37
|
current_account
|
34
38
|
end
|
35
39
|
alias :user_signed_in? :account_signed_in?
|
36
40
|
|
41
|
+
# Should be used to test if user is not authenticated
|
37
42
|
def account_not_signed_in?
|
38
43
|
!account_signed_in?
|
39
44
|
end
|
@@ -14,7 +14,7 @@ module EasyAuth::Controllers::Sessions
|
|
14
14
|
end
|
15
15
|
after_successful_sign_in(identity)
|
16
16
|
else
|
17
|
-
@identity = EasyAuth.find_identity_model(
|
17
|
+
@identity = EasyAuth.find_identity_model(params).new(params[params[:identity]])
|
18
18
|
after_failed_sign_in(@identity)
|
19
19
|
end
|
20
20
|
end
|
@@ -73,13 +73,13 @@ module EasyAuth::Controllers::Sessions
|
|
73
73
|
|
74
74
|
def method_missing(method_name, *args)
|
75
75
|
# Swallow exceptions for identity callbacks
|
76
|
-
unless method_name =~ /after_\w+_with_\w+/
|
76
|
+
unless method_name.to_s =~ /after_\w+_with_\w+/
|
77
77
|
super
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
81
|
def set_remember(identity)
|
82
|
-
if identity_attributes = params[ActiveModel::Naming.param_key(EasyAuth.find_identity_model(
|
82
|
+
if identity_attributes = params[ActiveModel::Naming.param_key(EasyAuth.find_identity_model(params).new)]
|
83
83
|
identity.remember = identity_attributes[:remember]
|
84
84
|
end
|
85
85
|
end
|
@@ -5,7 +5,7 @@ module EasyAuth::Models::Account
|
|
5
5
|
|
6
6
|
reverse_included do
|
7
7
|
# Relationships
|
8
|
-
has_many :identities, :class_name => '
|
8
|
+
has_many :identities, :class_name => 'Identity', :as => :account, :dependent => :destroy
|
9
9
|
|
10
10
|
def identity_username_attribute
|
11
11
|
self.send(self.class.identity_username_attribute)
|
@@ -13,6 +13,14 @@ module EasyAuth::Models::Account
|
|
13
13
|
end
|
14
14
|
|
15
15
|
module ClassMethods
|
16
|
+
# Will attempt to find the username attribute
|
17
|
+
#
|
18
|
+
# First will check to see if #identity_username_attribute is already defined in the model.
|
19
|
+
#
|
20
|
+
# If not, will check to see if `username` exists as a column on the record
|
21
|
+
# If not, will check to see if `email` exists as a column on the record
|
22
|
+
#
|
23
|
+
# @return [Symbol]
|
16
24
|
def identity_username_attribute
|
17
25
|
if respond_to?(:super)
|
18
26
|
super
|
@@ -26,11 +34,17 @@ module EasyAuth::Models::Account
|
|
26
34
|
end
|
27
35
|
end
|
28
36
|
|
37
|
+
# Generates a new session token and updates the record
|
38
|
+
#
|
39
|
+
# @return [String]
|
29
40
|
def generate_session_token!
|
30
41
|
self.update_column(:session_token, _generate_token(:session))
|
31
42
|
self.session_token
|
32
43
|
end
|
33
44
|
|
45
|
+
# Used to set the session for the authenticated account
|
46
|
+
#
|
47
|
+
# @param [Rack::Session::Abstract::SessionHash] session controller session
|
34
48
|
def set_session(session)
|
35
49
|
session[:session_token] = generate_session_token!
|
36
50
|
session[:account_class] = self.class.to_s
|
@@ -4,39 +4,59 @@ module EasyAuth::Models::Identity
|
|
4
4
|
|
5
5
|
def self.included(base)
|
6
6
|
base.class_eval do
|
7
|
-
self.table_name = :identities
|
8
7
|
belongs_to :account, :polymorphic => true
|
9
8
|
extend ClassMethods
|
10
9
|
end
|
11
10
|
end
|
12
11
|
|
13
12
|
module ClassMethods
|
13
|
+
# Base authentication method, should be implemented by child identities
|
14
|
+
#
|
15
|
+
# @param [ActionController::Base] controller instance of the controller
|
14
16
|
def authenticate(controller = nil)
|
15
17
|
raise NotImplementedError
|
16
18
|
end
|
17
19
|
|
20
|
+
# Base assumption for new sessions on the controller, will set `@identity` to a new instance of the identity
|
21
|
+
#
|
22
|
+
# @param [ActionController::Base] controller instance of the controller
|
18
23
|
def new_session(controller)
|
19
24
|
controller.instance_variable_set(:@identity, self.new)
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
28
|
+
# Sets the session for the association account
|
29
|
+
#
|
30
|
+
# @param [Rack::Session::Abstract::SessionHash] session controller session
|
23
31
|
def set_account_session(session)
|
24
32
|
account.set_session(session)
|
25
33
|
end
|
26
34
|
|
35
|
+
# Getter for the remember flag
|
27
36
|
def remember
|
28
37
|
@remember
|
29
38
|
end
|
30
39
|
|
40
|
+
# Setter for the remember flag
|
41
|
+
#
|
42
|
+
# @param [Boolean] value
|
31
43
|
def remember=(value)
|
32
44
|
@remember = ::ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
|
33
45
|
end
|
34
46
|
|
47
|
+
# Generates a new remember token and updates it on the identity record
|
48
|
+
#
|
49
|
+
# @return [String]
|
35
50
|
def generate_remember_token!
|
36
51
|
update_column(:remember_token, _generate_token(:remember))
|
37
52
|
remember_token
|
38
53
|
end
|
39
54
|
|
55
|
+
# The time used for remembering how long to stay signed in
|
56
|
+
#
|
57
|
+
# Defaults to 1 year, override in the model to set your own custom remember time
|
58
|
+
#
|
59
|
+
# @return [DateTime]
|
40
60
|
def remember_time
|
41
61
|
1.year
|
42
62
|
end
|
data/lib/easy_auth/version.rb
CHANGED
data/lib/easy_auth.rb
CHANGED
@@ -13,37 +13,66 @@ module EasyAuth
|
|
13
13
|
autoload :Routes
|
14
14
|
autoload :TokenGenerator
|
15
15
|
|
16
|
+
# The top-level model that should be inherited from to build EasyAuth identities
|
17
|
+
#
|
18
|
+
# @return [Class]
|
16
19
|
def self.identity_model
|
17
|
-
|
20
|
+
::Identity
|
18
21
|
end
|
19
22
|
|
23
|
+
# The assumed account class
|
24
|
+
#
|
25
|
+
# @return [Class]
|
20
26
|
def self.account_model
|
21
27
|
User
|
22
28
|
end
|
23
29
|
|
30
|
+
# Main authenticate method to delegate to the proper identity's .authenticate method
|
31
|
+
# Should handle any redirects necessary
|
32
|
+
#
|
33
|
+
# @param [ActionController::Base] controller instance of the controller
|
24
34
|
def self.authenticate(controller)
|
25
|
-
if identity_model = find_identity_model(controller)
|
35
|
+
if identity_model = find_identity_model(controller.params)
|
26
36
|
identity_model.authenticate(controller)
|
27
37
|
end
|
28
38
|
end
|
29
39
|
|
40
|
+
# Main new_session method to delegate to the proper identity's .new_session method
|
41
|
+
# Should handle any redirects necessary
|
42
|
+
#
|
43
|
+
# @param [ActionController::Base] controller instance of the controller
|
30
44
|
def self.new_session(controller)
|
31
|
-
identity_model = find_identity_model(controller)
|
45
|
+
identity_model = find_identity_model(controller.params)
|
32
46
|
identity_model.new_session(controller)
|
33
47
|
end
|
34
48
|
|
49
|
+
# EasyAuth config
|
50
|
+
#
|
51
|
+
# @param [&block] block
|
35
52
|
def self.config(&block)
|
36
53
|
yield self
|
37
54
|
end
|
38
55
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
56
|
+
# Find the proper identity model
|
57
|
+
# Will use params[:identity] to first see if the identity's model method exists:
|
58
|
+
#
|
59
|
+
# i.e. password_identity_model
|
60
|
+
#
|
61
|
+
# If that method doesn't exist, will see if `Identities::#{camelcased_identity_name}` is defined
|
62
|
+
#
|
63
|
+
# If that fails will finally check to see if the camelcased identity name exists in the top-leve namespace
|
64
|
+
#
|
65
|
+
# @param [Hash] params must contain an `identity` key
|
66
|
+
# @return [Class]
|
67
|
+
def self.find_identity_model(params)
|
68
|
+
method_name = "#{params[:identity]}_identity_model"
|
69
|
+
camelcased_identity_name = params[:identity].to_s.camelcase
|
43
70
|
if respond_to?(method_name)
|
44
|
-
send(method_name,
|
71
|
+
send(method_name, params)
|
72
|
+
elsif eval("defined?(Identities::#{camelcased_identity_name})")
|
73
|
+
eval("Identities::#{camelcased_identity_name}")
|
45
74
|
else
|
46
|
-
|
75
|
+
camelcased_identity_name.constantize
|
47
76
|
end
|
48
77
|
end
|
49
78
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module EasyAuth
|
2
|
+
class SetupGenerator < Rails::Generators::Base
|
3
|
+
def copy_initializer
|
4
|
+
source_paths << File.expand_path('../../templates/easy_auth', __FILE__)
|
5
|
+
copy_file 'initializer.rb', 'config/initializers/easy_auth.rb'
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def self.installation_message
|
11
|
+
'Copies initializer into config/initializers'
|
12
|
+
end
|
13
|
+
|
14
|
+
desc installation_message
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_auth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-11-
|
13
|
+
date: 2012-11-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -188,6 +188,22 @@ dependencies:
|
|
188
188
|
- - ! '>='
|
189
189
|
- !ruby/object:Gem::Version
|
190
190
|
version: '0'
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: generator_spec
|
193
|
+
requirement: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
type: :development
|
200
|
+
prerelease: false
|
201
|
+
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
191
207
|
description: EasyAuth
|
192
208
|
email:
|
193
209
|
- brian@dockyard.com
|
@@ -200,7 +216,7 @@ files:
|
|
200
216
|
- app/controllers/authenticated_controller.rb
|
201
217
|
- app/controllers/sessions_controller.rb
|
202
218
|
- app/helpers/easy_auth_helper.rb
|
203
|
-
- app/models/
|
219
|
+
- app/models/identity.rb
|
204
220
|
- config/locales/en.yml
|
205
221
|
- config/routes.rb
|
206
222
|
- db/migrate/20120227014023_create_easy_auth_identities.rb
|
@@ -218,7 +234,8 @@ files:
|
|
218
234
|
- lib/easy_auth/token_generator.rb
|
219
235
|
- lib/easy_auth/version.rb
|
220
236
|
- lib/easy_auth.rb
|
221
|
-
- lib/
|
237
|
+
- lib/generators/easy_auth/setup_generator.rb
|
238
|
+
- lib/generators/templates/easy_auth/initializer.rb
|
222
239
|
- Rakefile
|
223
240
|
- README.md
|
224
241
|
homepage: https://github.com/dockyard/easy_auth
|
@@ -235,7 +252,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
235
252
|
version: '0'
|
236
253
|
segments:
|
237
254
|
- 0
|
238
|
-
hash:
|
255
|
+
hash: 2413348689923643998
|
239
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
257
|
none: false
|
241
258
|
requirements:
|
@@ -244,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
261
|
version: '0'
|
245
262
|
segments:
|
246
263
|
- 0
|
247
|
-
hash:
|
264
|
+
hash: 2413348689923643998
|
248
265
|
requirements: []
|
249
266
|
rubyforge_project:
|
250
267
|
rubygems_version: 1.8.23
|