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 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
@@ -1,4 +1,3 @@
1
- ---
2
1
  :major: 0
3
- :minor: 7
4
- :patch: 5
2
+ :minor: 8
3
+ :patch: 0
@@ -17,6 +17,7 @@ class MerbAuthSliceMultisite::Sessions < MerbAuthSliceMultisite::Application
17
17
 
18
18
  def destroy
19
19
  "Add an after filter to do stuff after logout"
20
+ cookies.delete :auth_token
20
21
  end
21
22
 
22
23
 
@@ -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
- basic_path = File.expand_path(File.dirname(__FILE__)) / "merb-auth-more" / "strategies" / "multisite"
46
- Merb::Authentication.register(:multisite_password_form, basic_path / "multisite_password_form.rb")
47
-
48
- # activate the strategy
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.7.5
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-02 00:00:00 -07:00
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