signet-rails 0.0.5 → 0.0.6
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/lib/signet/rails/builder.rb +47 -9
- data/lib/signet/rails/handler.rb +19 -5
- data/lib/signet/rails/version.rb +1 -1
- metadata +2 -2
data/lib/signet/rails/builder.rb
CHANGED
@@ -28,6 +28,23 @@ module Signet
|
|
28
28
|
combined_options[:persist_attrs] ||= [:refresh_token, :access_token, :expires_in, :issued_at]
|
29
29
|
combined_options[:name] ||= :google
|
30
30
|
|
31
|
+
# is this a login-based OAuth2 adapter? If so, the callback will be used to identify a
|
32
|
+
# user and create one if necessary
|
33
|
+
# Options: :login, :webserver
|
34
|
+
combined_options[:type] = :login
|
35
|
+
|
36
|
+
# name of hash-behaving attribute on our wrapper that contains credentials
|
37
|
+
# keyed by :name
|
38
|
+
# {
|
39
|
+
# "google": {
|
40
|
+
# "uid": "012345676789abcde",
|
41
|
+
# "refresh_token": "my_first_refresh_token",
|
42
|
+
# "access_token": "my_first_access_token",
|
43
|
+
# "expires_in": 123
|
44
|
+
# }
|
45
|
+
# }
|
46
|
+
combined_options[:storage_attr] ||= :signet
|
47
|
+
|
31
48
|
# TODO: see https://developers.google.com/accounts/docs/OAuth2Login#authenticationuriparameters
|
32
49
|
combined_options[:approval_prompt] ||= 'auto'
|
33
50
|
|
@@ -41,29 +58,50 @@ module Signet
|
|
41
58
|
# whether we handle the persistence of the auth callback or simply pass-through
|
42
59
|
combined_options[:handle_auth_callback] ||= true
|
43
60
|
|
44
|
-
#
|
61
|
+
# The following lambda will be used when creating a new client in a factory
|
62
|
+
# to get the persistence object
|
45
63
|
combined_options[:extract_from_env] ||= lambda do |env, client|
|
46
|
-
|
64
|
+
oac = nil
|
47
65
|
session = env['rack.session']
|
48
66
|
if !!session && !!session[:user_id]
|
49
67
|
begin
|
50
68
|
u = User.find(session[:user_id])
|
69
|
+
oac = u.o_auth2_credentials.where(name: combined_options[:name]).first
|
51
70
|
rescue ActiveRecord::RecordNotFound => e
|
52
71
|
end
|
53
72
|
end
|
54
|
-
|
73
|
+
oac
|
55
74
|
end
|
56
75
|
|
57
|
-
#
|
76
|
+
# The following lambda will be used when handling the callback from the oauth server
|
77
|
+
# In this flow we might not yet have established a session... need to handle two
|
78
|
+
# flows, one for login, one not
|
79
|
+
# when on a login auth_callback, how do we get the persistence object from the JWT?
|
58
80
|
combined_options[:extract_by_oauth_id] ||= lambda do |id, client|
|
59
|
-
|
81
|
+
oac = nil
|
60
82
|
begin
|
61
|
-
u =
|
62
|
-
|
63
|
-
|
83
|
+
u = nil
|
84
|
+
if combined_options[:type] == :login
|
85
|
+
u = User.first_or_initialize(uid: id)
|
86
|
+
u.save
|
87
|
+
else
|
88
|
+
session = env['rack.session']
|
89
|
+
if !!session && !!session[:user_id]
|
90
|
+
begin
|
91
|
+
u = User.find(session[:user_id])
|
92
|
+
rescue ActiveRecord::RecordNotFound => e
|
93
|
+
end
|
94
|
+
else
|
95
|
+
raise "Expected to be able to find user in session"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
oac = u.o_auth2_credentials.first_or_initialize(name: combined_options[:name])
|
100
|
+
|
64
101
|
rescue ActiveRecord::RecordNotFound => e
|
65
102
|
end
|
66
|
-
|
103
|
+
|
104
|
+
oac
|
67
105
|
end
|
68
106
|
|
69
107
|
combined_options[:persistence_wrapper] ||= :active_record
|
data/lib/signet/rails/handler.rb
CHANGED
@@ -63,18 +63,32 @@ module Signet
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def persist_token_state wrapper, client
|
66
|
+
if not wrapper.obj.respond_to?(options[:storage_attr])
|
67
|
+
raise "Persistence object does not support the storage attribute #{options[:storage_attr]}"
|
68
|
+
end
|
69
|
+
|
70
|
+
if (store_hash = wrapper.obj.method(options[:storage_attr]).call).nil?
|
71
|
+
store_hash = wrapper.obj.method("#{options[:storage_attr]}=").call({})
|
72
|
+
end
|
73
|
+
|
66
74
|
for i in options[:persist_attrs]
|
67
|
-
if client.respond_to?(i)
|
75
|
+
if client.respond_to?(i)
|
68
76
|
# only transfer the value if it is non-nil
|
69
|
-
|
77
|
+
store_hash[i.to_s] = client.method(i).call unless client.method(i).call.nil?
|
70
78
|
end
|
71
79
|
end
|
72
80
|
end
|
73
81
|
|
74
82
|
def load_token_state wrapper, client
|
75
|
-
|
76
|
-
|
77
|
-
|
83
|
+
if not wrapper.obj.respond_to?(options[:storage_attr])
|
84
|
+
raise "Persistence object does not support the storage attribute #{options[:storage_attr]}"
|
85
|
+
end
|
86
|
+
|
87
|
+
if not (store_hash = wrapper.obj.method(options[:storage_attr]).call).nil?
|
88
|
+
for i in options[:persist_attrs]
|
89
|
+
if client.respond_to?(i.to_s+'=')
|
90
|
+
client.method(i.to_s+'=').call(store_hash[i.to_s])
|
91
|
+
end
|
78
92
|
end
|
79
93
|
end
|
80
94
|
end
|
data/lib/signet/rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: signet-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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-08-
|
12
|
+
date: 2013-08-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|