openstax_connect 0.0.3 → 0.0.4
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.
@@ -14,7 +14,7 @@ module OpenStax
|
|
14
14
|
def omniauth_authenticated
|
15
15
|
handle_with(SessionsOmniauthAuthenticated,
|
16
16
|
complete: lambda {
|
17
|
-
|
17
|
+
sign_in(@handler_result.outputs[:connect_user_to_sign_in])
|
18
18
|
redirect_to return_path(true)
|
19
19
|
})
|
20
20
|
end
|
@@ -1,64 +1,30 @@
|
|
1
1
|
class ActionController::Base
|
2
|
-
|
3
|
-
|
2
|
+
|
3
|
+
before_filter {
|
4
|
+
@current_user_manager = OpenStax::Connect::CurrentUserManager.new(request,
|
5
|
+
session,
|
6
|
+
cookies)
|
7
|
+
}
|
4
8
|
|
5
9
|
# Returns the current app user
|
6
10
|
def current_user
|
7
|
-
|
8
|
-
@current_app_user
|
9
|
-
end
|
10
|
-
|
11
|
-
# Quasi "private" method that returns the current connect user, refreshing it if needed
|
12
|
-
def current_connect_user
|
13
|
-
if request.ssl? && cookies.signed[:secure_user_id] != "secure#{session[:user_id]}"
|
14
|
-
sign_out! # hijacked
|
15
|
-
else
|
16
|
-
@current_connect_user ||= OpenStax::Connect::User.anonymous
|
17
|
-
connect_sign_in(OpenStax::Connect::User.where(id: session[:user_id]).first) \
|
18
|
-
if @current_connect_user.is_anonymous? && session[:user_id]
|
19
|
-
end
|
20
|
-
|
21
|
-
@current_connect_user
|
22
|
-
end
|
23
|
-
|
24
|
-
# Sets (signs in) the provided app user.
|
25
|
-
def current_user=(user)
|
26
|
-
self.current_connect_user = OpenStax::Connect.configuration.user_provider.app_user_to_connect_user(user)
|
27
|
-
@current_app_user
|
11
|
+
@current_user_manager.current_user
|
28
12
|
end
|
29
13
|
|
30
|
-
#
|
31
|
-
#
|
32
|
-
def current_connect_user=(user)
|
33
|
-
@current_connect_user = user || OpenStax::Connect::User.anonymous
|
34
|
-
if @current_connect_user.is_anonymous?
|
35
|
-
session[:user_id] = nil
|
36
|
-
cookies.delete(:secure_user_id)
|
37
|
-
else
|
38
|
-
session[:user_id] = @current_connect_user.id
|
39
|
-
cookies.signed[:secure_user_id] = {secure: true, value: "secure#{@current_connect_user.id}"}
|
40
|
-
end
|
41
|
-
@current_app_user = OpenStax::Connect.configuration.user_provider.connect_user_to_app_user(@current_connect_user)
|
42
|
-
@current_connect_user
|
43
|
-
end
|
44
|
-
|
45
|
-
# Signs in the given app user
|
14
|
+
# Signs in the given user; the argument can be either a connect user or
|
15
|
+
# an app user
|
46
16
|
def sign_in(user)
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
def connect_sign_in(user)
|
51
|
-
self.current_connect_user = user
|
17
|
+
@current_user_manager.sign_in(user)
|
52
18
|
end
|
53
19
|
|
54
|
-
# Signs out the user
|
20
|
+
# Signs out the current user
|
55
21
|
def sign_out!
|
56
|
-
|
22
|
+
@current_user_manager.sign_out!
|
57
23
|
end
|
58
24
|
|
59
25
|
# Returns true iff there is a user signed in
|
60
26
|
def signed_in?
|
61
|
-
|
27
|
+
@current_user_manager.signed_in?
|
62
28
|
end
|
63
29
|
|
64
30
|
# Useful in before_filters
|
@@ -68,7 +34,7 @@ class ActionController::Base
|
|
68
34
|
|
69
35
|
protected
|
70
36
|
|
71
|
-
helper_method :current_user, :
|
37
|
+
helper_method :current_user, :signed_in?
|
72
38
|
|
73
39
|
end
|
74
40
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module OpenStax::Connect
|
2
|
+
class CurrentUserManager
|
3
|
+
|
4
|
+
# References:
|
5
|
+
# http://railscasts.com/episodes/356-dangers-of-session-hijacking
|
6
|
+
|
7
|
+
def initialize(request, session, cookies)
|
8
|
+
@request = request
|
9
|
+
@session = session
|
10
|
+
@cookies = cookies
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns the current app user
|
14
|
+
def current_user
|
15
|
+
refresh_current_users if @current_app_user.nil?
|
16
|
+
@current_app_user
|
17
|
+
end
|
18
|
+
|
19
|
+
# Signs in the given user; the argument can be either a connect user or
|
20
|
+
# an app user
|
21
|
+
def sign_in(user)
|
22
|
+
user.is_a?(User) ?
|
23
|
+
self.connect_current_user = user :
|
24
|
+
self.current_user = user
|
25
|
+
end
|
26
|
+
|
27
|
+
# Signs out the user
|
28
|
+
def sign_out!
|
29
|
+
sign_in(OpenStax::Connect::User.anonymous)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns true iff there is a user signed in
|
33
|
+
def signed_in?
|
34
|
+
!connect_current_user.is_anonymous?
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
# Refreshes the current connect user (if needed) and returns it.
|
40
|
+
def connect_current_user
|
41
|
+
refresh_current_users if @connect_current_user.nil?
|
42
|
+
@connect_current_user
|
43
|
+
end
|
44
|
+
|
45
|
+
def refresh_current_users
|
46
|
+
if @request.ssl? && @cookies.signed[:secure_user_id] != "secure#{@session[:user_id]}"
|
47
|
+
sign_out! # hijacked
|
48
|
+
else
|
49
|
+
new_connect_current_user = @connect_current_user || User.anonymous
|
50
|
+
new_connect_current_user = User.where(id: @session[:user_id]).first \
|
51
|
+
if new_connect_current_user.is_anonymous? && @session[:user_id]
|
52
|
+
|
53
|
+
# changes both current and app user
|
54
|
+
self.connect_current_user = new_connect_current_user
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Sets (signs in) the provided app user.
|
59
|
+
def current_user=(user)
|
60
|
+
self.connect_current_user = user_provider.app_user_to_connect_user(user)
|
61
|
+
@current_app_user
|
62
|
+
end
|
63
|
+
|
64
|
+
# Sets the current connect user, updating the session and cookie state, also
|
65
|
+
# updates the cache of the current app user.
|
66
|
+
def connect_current_user=(user)
|
67
|
+
user ||= User.anonymous
|
68
|
+
@connect_current_user ||= User.anonymous
|
69
|
+
|
70
|
+
if user != @connect_current_user
|
71
|
+
@connect_current_user = user
|
72
|
+
@current_app_user = nil # changed connect user so invalidate the app user
|
73
|
+
|
74
|
+
if @connect_current_user.is_anonymous?
|
75
|
+
@session[:user_id] = nil
|
76
|
+
@cookies.delete(:secure_user_id)
|
77
|
+
else
|
78
|
+
@session[:user_id] = @connect_current_user.id
|
79
|
+
@cookies.signed[:secure_user_id] = {secure: true, value: "secure#{@connect_current_user.id}"}
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
@current_app_user ||= user_provider.connect_user_to_app_user(@connect_current_user)
|
84
|
+
@connect_current_user
|
85
|
+
end
|
86
|
+
|
87
|
+
def user_provider
|
88
|
+
OpenStax::Connect.configuration.user_provider
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|
data/lib/openstax_connect.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstax_connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- db/migrate/20130729213800_create_openstax_connect_users.rb
|
164
164
|
- lib/omniauth/strategies/openstax.rb
|
165
165
|
- lib/openstax/connect/action_list.rb
|
166
|
+
- lib/openstax/connect/current_user_manager.rb
|
166
167
|
- lib/openstax/connect/engine.rb
|
167
168
|
- lib/openstax/connect/exceptions.rb
|
168
169
|
- lib/openstax/connect/route_helper.rb
|
@@ -188,7 +189,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
188
189
|
version: '0'
|
189
190
|
segments:
|
190
191
|
- 0
|
191
|
-
hash:
|
192
|
+
hash: 3664854018823148928
|
192
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
194
|
none: false
|
194
195
|
requirements:
|
@@ -197,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
198
|
version: '0'
|
198
199
|
segments:
|
199
200
|
- 0
|
200
|
-
hash:
|
201
|
+
hash: 3664854018823148928
|
201
202
|
requirements: []
|
202
203
|
rubyforge_project:
|
203
204
|
rubygems_version: 1.8.25
|