easy_auth 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|