scottmotte-merb_auth_slice_multisite 0.7.5 → 0.8.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/README.textile +2 -0
- data/VERSION.yml +2 -3
- data/app/controllers/sessions.rb +1 -0
- data/app/views/exceptions/unauthenticated.html.erb +6 -1
- data/lib/merb-auth-remember-me/mixins/authenticated_user.rb +97 -0
- data/lib/merb-auth-remember-me/mixins/authenticated_user/dm_authenticated_user.rb +17 -0
- data/lib/merb-auth-remember-me/strategies/remember_me.rb +12 -0
- data/lib/merb_auth_slice_multisite.rb +21 -4
- metadata +9 -2
data/README.textile
CHANGED
@@ -24,6 +24,7 @@ include Merb::Authentication::Mixins::UserBelongsToSite and then migrate your da
|
|
24
24
|
# in model
|
25
25
|
class User
|
26
26
|
include Merb::Authentication::Mixins::UserBelongsToSite
|
27
|
+
include Merb::Authentication::Mixins::AuthenticatedUser #for remember me functionality
|
27
28
|
end
|
28
29
|
|
29
30
|
|
@@ -32,6 +33,7 @@ Merb::Authentication.user_class.class_eval{
|
|
32
33
|
include Merb::Authentication::Mixins::SaltedUser
|
33
34
|
include Merb::Authentication::Mixins::ActivatedUser
|
34
35
|
include Merb::Authentication::Mixins::UserBelongsToSite # <-- this one
|
36
|
+
include Merb::Authentication::Mixins::AuthenticatedUser # <-- and this one
|
35
37
|
}
|
36
38
|
</code></pre>
|
37
39
|
|
data/VERSION.yml
CHANGED
data/app/controllers/sessions.rb
CHANGED
@@ -11,7 +11,6 @@
|
|
11
11
|
<%= error_messages_for session.authentication %>
|
12
12
|
<form action="<%= slice_url(:merb_auth_slice_multisite, :perform_login) %>" method="post" id="loginForm">
|
13
13
|
<h3>Login</h3>
|
14
|
-
|
15
14
|
<input type="hidden" name="<%= @site_id_param.to_s %>" value="<%= @current_site.id %>" id="<%= @site_id_param.to_s %>">
|
16
15
|
<input type="hidden" name="_method" value="PUT" />
|
17
16
|
|
@@ -27,6 +26,12 @@
|
|
27
26
|
<div id="passwordElement" class="element">
|
28
27
|
<input type="password" name="<%= @password_param.to_s %>" value="" id="<%= @password_param.to_s %>">
|
29
28
|
</div>
|
29
|
+
</div>
|
30
|
+
<div id="remember_meElements" class="elements">
|
31
|
+
<label for="remember_me">Remember me:</label>
|
32
|
+
<div id="remember_meElement" class="element">
|
33
|
+
<input type="checkbox" name="remember_me" value="1" id="remember_me" />
|
34
|
+
</div>
|
30
35
|
</div>
|
31
36
|
<div id="loginActions" class="actions">
|
32
37
|
<div id="loginAction" class="action">
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require "digest/sha1"
|
2
|
+
module Merb
|
3
|
+
class Authentication
|
4
|
+
module Mixins
|
5
|
+
# This mixin provides basic user remember token.
|
6
|
+
#
|
7
|
+
# Added properties:
|
8
|
+
# :remember_token_expires_at, DateTime
|
9
|
+
# :remember_token, String
|
10
|
+
#
|
11
|
+
# To use it simply require it and include it into your user class.
|
12
|
+
#
|
13
|
+
# class User
|
14
|
+
# include Merb::Authentication::Mixins::AuthenticatedUser
|
15
|
+
#
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
module AuthenticatedUser
|
19
|
+
def self.included(base)
|
20
|
+
base.class_eval do
|
21
|
+
include Merb::Authentication::Mixins::AuthenticatedUser::InstanceMethods
|
22
|
+
extend Merb::Authentication::Mixins::AuthenticatedUser::ClassMethods
|
23
|
+
|
24
|
+
path = File.expand_path(File.dirname(__FILE__)) / "authenticated_user"
|
25
|
+
if defined?(DataMapper) && DataMapper::Resource > self
|
26
|
+
require path / "dm_authenticated_user"
|
27
|
+
extend(Merb::Authentication::Mixins::AuthenticatedUser::DMClassMethods)
|
28
|
+
elsif defined?(ActiveRecord) && ancestors.include?(ActiveRecord::Base)
|
29
|
+
require path / "ar_authenticated_user"
|
30
|
+
extend(Merb::Authentication::Mixins::AuthenticatedUser::ARClassMethods)
|
31
|
+
elsif defined?(Sequel) && ancestors.include?(Sequel::Model)
|
32
|
+
require path / "sq_authenticated_user"
|
33
|
+
extend(Merb::Authentication::Mixins::AuthenticatedUser::SQClassMethods)
|
34
|
+
end
|
35
|
+
|
36
|
+
end # base.class_eval
|
37
|
+
end # self.included
|
38
|
+
|
39
|
+
|
40
|
+
module ClassMethods
|
41
|
+
def secure_digest(*args)
|
42
|
+
Digest::SHA1.hexdigest(args.flatten.join('--'))
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create random key.
|
46
|
+
#
|
47
|
+
# ==== Returns
|
48
|
+
# String:: The generated key
|
49
|
+
def make_token
|
50
|
+
secure_digest(Time.now, (1..10).map{ rand.to_s })
|
51
|
+
end
|
52
|
+
end # ClassMethods
|
53
|
+
|
54
|
+
module InstanceMethods
|
55
|
+
def remember_token?
|
56
|
+
(!remember_token.blank?) &&
|
57
|
+
remember_token_expires_at && (Time.now.utc < remember_token_expires_at.utc)
|
58
|
+
end
|
59
|
+
|
60
|
+
# These create and unset the fields required for remembering users between browser closes
|
61
|
+
def remember_me(time = 2.weeks)
|
62
|
+
remember_me_for time
|
63
|
+
end
|
64
|
+
|
65
|
+
def remember_me_for(time)
|
66
|
+
remember_me_until time.from_now.utc
|
67
|
+
end
|
68
|
+
|
69
|
+
def remember_me_until(time)
|
70
|
+
self.remember_token_expires_at = time
|
71
|
+
self.remember_token = self.class.make_token
|
72
|
+
save
|
73
|
+
end
|
74
|
+
|
75
|
+
# refresh token (keeping same expires_at) if it exists
|
76
|
+
def refresh_token
|
77
|
+
if remember_token?
|
78
|
+
self.remember_token = self.class.make_token
|
79
|
+
save
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# Deletes the server-side record of the authentication token. The
|
85
|
+
# client-side (browser cookie) and server-side (this remember_token) must
|
86
|
+
# always be deleted together.
|
87
|
+
#
|
88
|
+
def forget_me
|
89
|
+
self.remember_token_expires_at = nil
|
90
|
+
self.remember_token = nil
|
91
|
+
save
|
92
|
+
end
|
93
|
+
end # InstanceMethods
|
94
|
+
end # AuthenticatedUser
|
95
|
+
end # Mixins
|
96
|
+
end # Authentication
|
97
|
+
end # Merb
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Merb
|
2
|
+
class Authentication
|
3
|
+
module Mixins
|
4
|
+
module AuthenticatedUser
|
5
|
+
module DMClassMethods
|
6
|
+
def self.extended(base)
|
7
|
+
base.class_eval do
|
8
|
+
property :remember_token_expires_at, DateTime
|
9
|
+
property :remember_token, String
|
10
|
+
end # base.class_eval
|
11
|
+
|
12
|
+
end # self.extended
|
13
|
+
end # DMClassMethods
|
14
|
+
end # AuthenticatedUser
|
15
|
+
end # Mixins
|
16
|
+
end # Authentication
|
17
|
+
end #Merb
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Merb::Authentication::Strategies
|
2
|
+
class RememberMeStrategy < Merb::Authentication::Strategy
|
3
|
+
def run!
|
4
|
+
if cookies[:auth_token]
|
5
|
+
user = Merb::Authentication.user_class.first(
|
6
|
+
:conditions => [ "remember_token = ?", cookies[:auth_token] ]
|
7
|
+
)
|
8
|
+
end
|
9
|
+
user && user.remembered? ? user : nil
|
10
|
+
end # run!
|
11
|
+
end # RememberMeStrategy
|
12
|
+
end # Merb::Authentication::Strategies
|
@@ -7,6 +7,7 @@ if defined?(Merb::Plugins)
|
|
7
7
|
dependency 'merb-auth-core'
|
8
8
|
dependency 'merb-auth-more'
|
9
9
|
require(File.expand_path(File.dirname(__FILE__) / "merb_auth_slice_multisite" / "mixins") / "user_belongs_to_site")
|
10
|
+
require(File.expand_path(File.dirname(__FILE__) / "merb-auth-remember-me" / "mixins") / "authenticated_user")
|
10
11
|
|
11
12
|
Merb::Plugins.add_rakefiles "merb_auth_slice_multisite/merbtasks", "merb_auth_slice_multisite/slicetasks", "merb_auth_slice_multisite/spectasks"
|
12
13
|
|
@@ -42,13 +43,29 @@ if defined?(Merb::Plugins)
|
|
42
43
|
# Register the custom strategy so that this slice may utilize it
|
43
44
|
# from http://github.com/wycats/merb/blob/784ac7d71780d1a7cfb9152ba4cb0
|
44
45
|
# e18a990ab7a/merb-auth/merb-auth-more/lib/merb-auth-more.rb
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
merb_auth_more_path = File.expand_path(File.dirname(__FILE__)) / "merb-auth-more" / "strategies" / "multisite"
|
47
|
+
merb_auth_remember_me_path = File.expand_path(File.dirname(__FILE__)) / "merb-auth-remember-me" / "strategies"
|
48
|
+
Merb::Authentication.register(:multisite_password_form, merb_auth_more_path / "multisite_password_form.rb")
|
49
|
+
Merb::Authentication.register(:remember_me, merb_auth_remember_me_path / "remember_me.rb")
|
50
|
+
# activate the strategies
|
49
51
|
::Merb::Authentication.activate!(:multisite_password_form)
|
52
|
+
::Merb::Authentication.activate!(:remember_me)
|
53
|
+
|
54
|
+
Merb::Authentication.after_authentication do |user,request,params|
|
55
|
+
if params[:remember_me] == "1"
|
56
|
+
user.remember_me
|
57
|
+
request.cookies.set_cookie(
|
58
|
+
:auth_token,
|
59
|
+
user.remember_token,
|
60
|
+
:expires => user.remember_token_expires_at.to_time
|
61
|
+
)
|
62
|
+
end
|
63
|
+
user
|
64
|
+
end # Merb::Authentication.after_authentication
|
50
65
|
end
|
51
66
|
|
67
|
+
|
68
|
+
|
52
69
|
|
53
70
|
# from 0.3.2 version of merb_auth_slice_multisite
|
54
71
|
# # Actually check if the user belongs to the site
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scottmotte-merb_auth_slice_multisite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- scottmotte
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
12
|
+
date: 2009-05-03 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -28,6 +28,13 @@ files:
|
|
28
28
|
- lib/merb-auth-more/strategies
|
29
29
|
- lib/merb-auth-more/strategies/multisite
|
30
30
|
- lib/merb-auth-more/strategies/multisite/multisite_password_form.rb
|
31
|
+
- lib/merb-auth-remember-me
|
32
|
+
- lib/merb-auth-remember-me/mixins
|
33
|
+
- lib/merb-auth-remember-me/mixins/authenticated_user
|
34
|
+
- lib/merb-auth-remember-me/mixins/authenticated_user/dm_authenticated_user.rb
|
35
|
+
- lib/merb-auth-remember-me/mixins/authenticated_user.rb
|
36
|
+
- lib/merb-auth-remember-me/strategies
|
37
|
+
- lib/merb-auth-remember-me/strategies/remember_me.rb
|
31
38
|
- lib/merb_auth_slice_multisite
|
32
39
|
- lib/merb_auth_slice_multisite/merbtasks.rb
|
33
40
|
- lib/merb_auth_slice_multisite/mixins
|