authie 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a723ac0bdb1ef36ed3084611c603fc5e17d3b65a
4
- data.tar.gz: ca93a21ef49d797fd9aa69eb97b596a8f3e5bbd6
3
+ metadata.gz: 0a79a25563e536247558b4b4e0110c54cb0131e6
4
+ data.tar.gz: 8e56f9b73ed4104169852d2bb1f87a3b41853e98
5
5
  SHA512:
6
- metadata.gz: fe7a982ff92db20e736ae166eaefe30398bbd0e5cf2ac863bc1ceef0a4f0d092a1a176cb21b6c06b76aa42d9918eb654f6904bceaa65a1172587d13ac7a6b829
7
- data.tar.gz: 728eb60de7c26c260c55144d4bed89a8794f57b642daefcd5412c79173f2d93a695364281e4a724cacca3e44355706ece8a919799e08f6ed6d660f8c82f3ecee
6
+ metadata.gz: 12d450b4dae3f88855b68f6f0b30c8e445489681e632772c09c33ec98fa2c1326d36ba545bb02f6aa51d8998505ebb10407c57150586e2033c87abd96f0ec8c4
7
+ data.tar.gz: 9873f56ce1b14561c033cfdbf1a3d3282147b2176b1167468ba6638e29db0b64b2f2df238375935c48648df8548dec9f03b1381ebeff5890e52950241eb027d4
@@ -0,0 +1,5 @@
1
+ class AddParentIdToAuthieSessions < ActiveRecord::Migration
2
+ def change
3
+ add_column :authie_sessions, :parent_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,40 @@
1
+ # If you're dealing with your authentication in a middleware and you only have
2
+ # access to your rack environment, this will wrap around rack and make it look
3
+ # close enough to an ActionController to work with Authie
4
+ #
5
+ # Usage:
6
+ #
7
+ # controller = Authie::RackController.new(@env)
8
+ # controller.current_user = user
9
+
10
+ module Authie
11
+ class RackController
12
+
13
+ attr_reader :request
14
+
15
+ def initialize(env)
16
+ @env = env
17
+ @request = ActionDispatch::Request.new(@env)
18
+ set_browser_id
19
+ end
20
+
21
+ def cookies
22
+ @request.cookie_jar
23
+ end
24
+
25
+ # Set a random browser ID for this browser.
26
+ def set_browser_id
27
+ until cookies[:browser_id]
28
+ proposed_browser_id = SecureRandom.uuid
29
+ unless Session.where(:browser_id => proposed_browser_id).exists?
30
+ cookies[:browser_id] = {:value => proposed_browser_id, :expires => 20.years.from_now}
31
+ end
32
+ end
33
+ end
34
+
35
+ def current_user=(user)
36
+ Session.start(self, :user => user)
37
+ end
38
+
39
+ end
40
+ end
@@ -1,25 +1,26 @@
1
1
  module Authie
2
2
  class Session < ActiveRecord::Base
3
-
3
+
4
4
  # Define some errors which may be used
5
5
  class InactiveSession < Error; end
6
6
  class ExpiredSession < Error; end
7
7
  class BrowserMismatch < Error; end
8
-
8
+
9
9
  # Set table name
10
10
  self.table_name = "authie_sessions"
11
-
11
+
12
12
  # Relationships
13
13
  belongs_to :user, :polymorphic => true
14
-
14
+ belongs_to :parent, :class_name => "Authie::Session"
15
+
15
16
  # Scopes
16
17
  scope :active, -> { where(:active => true) }
17
18
  scope :asc, -> { order(:last_activity_at => :desc) }
18
-
19
+
19
20
  # Attributes
20
21
  serialize :data, Hash
21
22
  attr_accessor :controller
22
-
23
+
23
24
  before_create do
24
25
  self.token = SecureRandom.base64(32)
25
26
  if controller
@@ -31,7 +32,7 @@ module Authie
31
32
  before_destroy do
32
33
  cookies.delete(:user_session) if controller
33
34
  end
34
-
35
+
35
36
  # This method should be called each time a user performs an
36
37
  # action while authenticated with this session.
37
38
  def touch!
@@ -40,8 +41,8 @@ module Authie
40
41
  self.last_activity_path = controller.request.path
41
42
  self.save!
42
43
  end
43
-
44
- # Sets the cookie on the associated controller.
44
+
45
+ # Sets the cookie on the associated controller.
45
46
  def set_cookie!
46
47
  cookies[:user_session] = {
47
48
  :value => token,
@@ -50,7 +51,7 @@ module Authie
50
51
  :expires => self.expires_at
51
52
  }
52
53
  end
53
-
54
+
54
55
  # Check the security of the session to ensure it can be used.
55
56
  def check_security!
56
57
  if controller
@@ -58,12 +59,12 @@ module Authie
58
59
  invalidate!
59
60
  raise BrowserMismatch, "Browser ID mismatch"
60
61
  end
61
-
62
+
62
63
  unless self.active?
63
64
  invalidate!
64
65
  raise InactiveSession, "Session is no longer active"
65
66
  end
66
-
67
+
67
68
  if self.expires_at && self.expires_at < Time.now
68
69
  invalidate!
69
70
  raise ExpiredSession, "Persistent session has expired"
@@ -75,7 +76,7 @@ module Authie
75
76
  end
76
77
  end
77
78
  end
78
-
79
+
79
80
  # Allow this session to persist rather than expiring at the end of the
80
81
  # current browser session
81
82
  def persist!
@@ -83,12 +84,18 @@ module Authie
83
84
  self.save!
84
85
  set_cookie!
85
86
  end
86
-
87
+
87
88
  # Is this a persistent session?
88
89
  def persistent?
89
90
  !!expires_at
90
91
  end
91
92
 
93
+ # Activate an old session
94
+ def activate!
95
+ self.active = true
96
+ self.save!
97
+ end
98
+
92
99
  # Mark this session as invalid
93
100
  def invalidate!
94
101
  self.active = false
@@ -97,7 +104,7 @@ module Authie
97
104
  cookies.delete(:user_session)
98
105
  end
99
106
  end
100
-
107
+
101
108
  # Set some additional data in this session
102
109
  def set(key, value)
103
110
  self.data ||= {}
@@ -109,7 +116,7 @@ module Authie
109
116
  def get(key)
110
117
  (self.data ||= {})[key.to_s]
111
118
  end
112
-
119
+
113
120
  # Find a session from the database for the given controller instance.
114
121
  # Returns a session object or :none if no session is found.
115
122
  def self.get_session(controller)
@@ -122,7 +129,7 @@ module Authie
122
129
  :none
123
130
  end
124
131
  end
125
-
132
+
126
133
  # Create a new session and return the newly created session object.
127
134
  # Any other sessions for the browser will be invalidated.
128
135
  def self.start(controller, params = {})
@@ -136,18 +143,18 @@ module Authie
136
143
  session.save
137
144
  session
138
145
  end
139
-
146
+
140
147
  # Cleanup any old sessions.
141
148
  def self.cleanup
142
149
  self.active.where("expires_at IS NULL AND last_activity_at < ?", Authie.config.session_inactivity_timeout.ago).each(&:invalidate!)
143
150
  end
144
-
151
+
145
152
  private
146
-
153
+
147
154
  # Return all cookies on the associated controller
148
155
  def cookies
149
156
  controller.send(:cookies)
150
157
  end
151
-
158
+
152
159
  end
153
160
  end
@@ -1,3 +1,3 @@
1
1
  module Authie
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authie
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-13 00:00:00.000000000 Z
11
+ date: 2015-01-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Rails library for storing user sessions in a backend database
14
14
  email:
@@ -19,11 +19,13 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - db/migrate/20141012174250_create_authie_sessions.rb
21
21
  - db/migrate/20141013115205_add_indexes_to_authie_sessions.rb
22
+ - db/migrate/20150109144120_add_parent_id_to_authie_sessions.rb
22
23
  - lib/authie.rb
23
24
  - lib/authie/config.rb
24
25
  - lib/authie/controller_extension.rb
25
26
  - lib/authie/engine.rb
26
27
  - lib/authie/error.rb
28
+ - lib/authie/rack_controller.rb
27
29
  - lib/authie/session.rb
28
30
  - lib/authie/version.rb
29
31
  homepage: https://github.com/adamcooke/authie