omniauth-identity 1.1.0 → 1.1.1
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.
- checksums.yaml +7 -0
- data/Gemfile.lock +112 -76
- data/README.markdown +41 -1
- data/lib/omniauth-identity/version.rb +1 -1
- data/lib/omniauth/identity.rb +7 -6
- data/lib/omniauth/identity/model.rb +4 -4
- data/lib/omniauth/identity/models/active_record.rb +3 -3
- data/lib/omniauth/identity/models/couch_potato.rb +31 -0
- data/lib/omniauth/identity/models/data_mapper.rb +2 -2
- data/lib/omniauth/identity/models/mongo_mapper.rb +2 -2
- data/lib/omniauth/identity/models/mongoid.rb +2 -2
- data/lib/omniauth/identity/secure_password.rb +1 -1
- data/lib/omniauth/strategies/identity.rb +34 -17
- data/omniauth-identity.gemspec +1 -0
- data/spec/omniauth/identity/model_spec.rb +8 -2
- data/spec/omniauth/identity/models/active_record_spec.rb +5 -7
- data/spec/omniauth/identity/models/couch_potato_spec.rb +15 -0
- data/spec/omniauth/identity/models/data_mapper_spec.rb +3 -3
- data/spec/omniauth/identity/models/mongo_mapper_spec.rb +4 -3
- data/spec/omniauth/identity/models/mongoid_spec.rb +4 -4
- data/spec/omniauth/strategies/identity_spec.rb +16 -3
- metadata +32 -41
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: f63f80480a42c6089f050cae1a70ebe9195f925d
|
|
4
|
+
data.tar.gz: 3b229b38d48396559ac41f65712c931bc4f76590
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 91cbf121086311eb85cf68345b58eeac85e165ce3119a58bc148ddf470e77050664efc986e40eb2099b7b1f306b7119457445535fa1d1512bae9c975e54fbae2
|
|
7
|
+
data.tar.gz: 729a821aa7e9cf31e847fe1f98e87ac04e2ffb031c45405e3421617edd3ac841412840670bbdb333c806fa9330adde986bbc28bf7ecd60a4aa5e45673d2907b9
|
data/Gemfile.lock
CHANGED
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
omniauth-identity (1.
|
|
4
|
+
omniauth-identity (1.1.1)
|
|
5
5
|
bcrypt-ruby (~> 3.0)
|
|
6
6
|
omniauth (~> 1.0)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: http://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
activemodel (3.2.
|
|
12
|
-
activesupport (= 3.2.
|
|
11
|
+
activemodel (3.2.13)
|
|
12
|
+
activesupport (= 3.2.13)
|
|
13
13
|
builder (~> 3.0.0)
|
|
14
|
-
activerecord (3.2.
|
|
15
|
-
activemodel (= 3.2.
|
|
16
|
-
activesupport (= 3.2.
|
|
17
|
-
arel (~> 3.0.
|
|
14
|
+
activerecord (3.2.13)
|
|
15
|
+
activemodel (= 3.2.13)
|
|
16
|
+
activesupport (= 3.2.13)
|
|
17
|
+
arel (~> 3.0.2)
|
|
18
18
|
tzinfo (~> 0.3.29)
|
|
19
|
-
activesupport (3.2.
|
|
20
|
-
i18n (
|
|
19
|
+
activesupport (3.2.13)
|
|
20
|
+
i18n (= 0.6.1)
|
|
21
21
|
multi_json (~> 1.0)
|
|
22
|
-
addressable (2.
|
|
23
|
-
arel (3.0.
|
|
22
|
+
addressable (2.3.5)
|
|
23
|
+
arel (3.0.2)
|
|
24
24
|
bcrypt-ruby (3.0.1)
|
|
25
|
-
bson (1.
|
|
26
|
-
bson_ext (1.
|
|
27
|
-
bson (
|
|
28
|
-
builder (3.0.
|
|
25
|
+
bson (1.9.0)
|
|
26
|
+
bson_ext (1.9.0)
|
|
27
|
+
bson (~> 1.9.0)
|
|
28
|
+
builder (3.0.4)
|
|
29
|
+
coderay (1.0.9)
|
|
30
|
+
couch_potato (1.0.1)
|
|
31
|
+
activemodel
|
|
32
|
+
couchrest (~> 1.2.0)
|
|
33
|
+
json (~> 1.6)
|
|
34
|
+
couchrest (1.2.0)
|
|
35
|
+
mime-types (~> 1.15)
|
|
36
|
+
multi_json (~> 1.0)
|
|
37
|
+
rest-client (~> 1.6.1)
|
|
29
38
|
datamapper (1.2.0)
|
|
30
39
|
dm-aggregates (~> 1.2.0)
|
|
31
40
|
dm-constraints (~> 1.2.0)
|
|
@@ -36,90 +45,116 @@ GEM
|
|
|
36
45
|
dm-transactions (~> 1.2.0)
|
|
37
46
|
dm-types (~> 1.2.0)
|
|
38
47
|
dm-validations (~> 1.2.0)
|
|
39
|
-
diff-lcs (1.
|
|
48
|
+
diff-lcs (1.2.4)
|
|
40
49
|
dm-aggregates (1.2.0)
|
|
41
50
|
dm-core (~> 1.2.0)
|
|
42
51
|
dm-constraints (1.2.0)
|
|
43
52
|
dm-core (~> 1.2.0)
|
|
44
|
-
dm-core (1.2.
|
|
45
|
-
addressable (~> 2.
|
|
53
|
+
dm-core (1.2.1)
|
|
54
|
+
addressable (~> 2.3)
|
|
46
55
|
dm-migrations (1.2.0)
|
|
47
56
|
dm-core (~> 1.2.0)
|
|
48
|
-
dm-serializer (1.2.
|
|
57
|
+
dm-serializer (1.2.2)
|
|
49
58
|
dm-core (~> 1.2.0)
|
|
50
|
-
fastercsv (~> 1.5
|
|
51
|
-
json (~> 1.6
|
|
52
|
-
json_pure (~> 1.6
|
|
53
|
-
multi_json (~> 1.0
|
|
59
|
+
fastercsv (~> 1.5)
|
|
60
|
+
json (~> 1.6)
|
|
61
|
+
json_pure (~> 1.6)
|
|
62
|
+
multi_json (~> 1.0)
|
|
54
63
|
dm-timestamps (1.2.0)
|
|
55
64
|
dm-core (~> 1.2.0)
|
|
56
65
|
dm-transactions (1.2.0)
|
|
57
66
|
dm-core (~> 1.2.0)
|
|
58
|
-
dm-types (1.2.
|
|
59
|
-
bcrypt-ruby (~> 3.0
|
|
67
|
+
dm-types (1.2.2)
|
|
68
|
+
bcrypt-ruby (~> 3.0)
|
|
60
69
|
dm-core (~> 1.2.0)
|
|
61
|
-
fastercsv (~> 1.5
|
|
62
|
-
json (~> 1.6
|
|
63
|
-
multi_json (~> 1.0
|
|
64
|
-
stringex (~> 1.
|
|
65
|
-
uuidtools (~> 2.1
|
|
70
|
+
fastercsv (~> 1.5)
|
|
71
|
+
json (~> 1.6)
|
|
72
|
+
multi_json (~> 1.0)
|
|
73
|
+
stringex (~> 1.4)
|
|
74
|
+
uuidtools (~> 2.1)
|
|
66
75
|
dm-validations (1.2.0)
|
|
67
76
|
dm-core (~> 1.2.0)
|
|
68
|
-
fastercsv (1.5.
|
|
69
|
-
ffi (1.0
|
|
77
|
+
fastercsv (1.5.5)
|
|
78
|
+
ffi (1.9.0)
|
|
79
|
+
formatador (0.2.4)
|
|
70
80
|
growl (1.0.3)
|
|
71
|
-
guard (1.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
guard-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
guard (1.8.1)
|
|
82
|
+
formatador (>= 0.2.4)
|
|
83
|
+
listen (>= 1.0.0)
|
|
84
|
+
lumberjack (>= 1.0.2)
|
|
85
|
+
pry (>= 0.9.10)
|
|
86
|
+
thor (>= 0.14.6)
|
|
87
|
+
guard-bundler (1.0.0)
|
|
88
|
+
bundler (~> 1.0)
|
|
89
|
+
guard (~> 1.1)
|
|
90
|
+
guard-rspec (3.0.2)
|
|
91
|
+
guard (>= 1.8)
|
|
92
|
+
rspec (~> 2.13)
|
|
93
|
+
hashie (2.0.5)
|
|
94
|
+
i18n (0.6.1)
|
|
95
|
+
json (1.8.0)
|
|
96
|
+
json_pure (1.8.0)
|
|
97
|
+
listen (1.2.2)
|
|
98
|
+
rb-fsevent (>= 0.9.3)
|
|
99
|
+
rb-inotify (>= 0.9)
|
|
100
|
+
rb-kqueue (>= 0.2)
|
|
101
|
+
lumberjack (1.0.4)
|
|
102
|
+
maruku (0.6.1)
|
|
84
103
|
syntax (>= 1.0.0)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
104
|
+
method_source (0.8.1)
|
|
105
|
+
mime-types (1.23)
|
|
106
|
+
mongo (1.9.0)
|
|
107
|
+
bson (~> 1.9.0)
|
|
108
|
+
mongo_mapper (0.12.0)
|
|
88
109
|
activemodel (~> 3.0)
|
|
89
110
|
activesupport (~> 3.0)
|
|
90
|
-
plucky (~> 0.
|
|
91
|
-
mongoid (
|
|
92
|
-
activemodel (~> 3.
|
|
93
|
-
|
|
111
|
+
plucky (~> 0.5.2)
|
|
112
|
+
mongoid (3.1.4)
|
|
113
|
+
activemodel (~> 3.2)
|
|
114
|
+
moped (~> 1.4)
|
|
115
|
+
origin (~> 1.0)
|
|
94
116
|
tzinfo (~> 0.3.22)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
117
|
+
moped (1.5.0)
|
|
118
|
+
multi_json (1.7.7)
|
|
119
|
+
omniauth (1.1.4)
|
|
120
|
+
hashie (>= 1.2, < 3)
|
|
98
121
|
rack
|
|
99
|
-
|
|
122
|
+
origin (1.1.0)
|
|
123
|
+
plucky (0.5.2)
|
|
100
124
|
mongo (~> 1.5)
|
|
101
|
-
|
|
102
|
-
|
|
125
|
+
pry (0.9.12.2)
|
|
126
|
+
coderay (~> 1.0.5)
|
|
127
|
+
method_source (~> 0.8)
|
|
128
|
+
slop (~> 3.4)
|
|
129
|
+
rack (1.5.2)
|
|
130
|
+
rack-test (0.6.2)
|
|
103
131
|
rack (>= 1.0)
|
|
104
|
-
rake (0.9.
|
|
105
|
-
rb-fsevent (0.9.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
rake (0.9.6)
|
|
133
|
+
rb-fsevent (0.9.3)
|
|
134
|
+
rb-inotify (0.9.0)
|
|
135
|
+
ffi (>= 0.5.0)
|
|
136
|
+
rb-kqueue (0.2.0)
|
|
137
|
+
ffi (>= 0.5.0)
|
|
138
|
+
rest-client (1.6.7)
|
|
139
|
+
mime-types (>= 1.16)
|
|
140
|
+
rspec (2.13.0)
|
|
141
|
+
rspec-core (~> 2.13.0)
|
|
142
|
+
rspec-expectations (~> 2.13.0)
|
|
143
|
+
rspec-mocks (~> 2.13.0)
|
|
144
|
+
rspec-core (2.13.1)
|
|
145
|
+
rspec-expectations (2.13.0)
|
|
146
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
|
147
|
+
rspec-mocks (2.13.1)
|
|
148
|
+
simplecov (0.7.1)
|
|
149
|
+
multi_json (~> 1.0)
|
|
150
|
+
simplecov-html (~> 0.7.1)
|
|
151
|
+
simplecov-html (0.7.1)
|
|
152
|
+
slop (3.4.5)
|
|
153
|
+
stringex (1.5.1)
|
|
119
154
|
syntax (1.0.0)
|
|
120
|
-
thor (0.
|
|
121
|
-
tzinfo (0.3.
|
|
122
|
-
uuidtools (2.1.
|
|
155
|
+
thor (0.18.1)
|
|
156
|
+
tzinfo (0.3.37)
|
|
157
|
+
uuidtools (2.1.4)
|
|
123
158
|
|
|
124
159
|
PLATFORMS
|
|
125
160
|
ruby
|
|
@@ -127,6 +162,7 @@ PLATFORMS
|
|
|
127
162
|
DEPENDENCIES
|
|
128
163
|
activerecord (~> 3.1)
|
|
129
164
|
bson_ext
|
|
165
|
+
couch_potato
|
|
130
166
|
datamapper
|
|
131
167
|
growl
|
|
132
168
|
guard
|
data/README.markdown
CHANGED
|
@@ -26,7 +26,7 @@ able to persist the information provided by the user. Luckily for you, there
|
|
|
26
26
|
are pre-built models for popular ORMs that make this dead simple.
|
|
27
27
|
|
|
28
28
|
**Note:** OmniAuth Identity is different from many other user authentication
|
|
29
|
-
systems in that it is *not*
|
|
29
|
+
systems in that it is *not* built to store authentication information in your primary
|
|
30
30
|
`User` model. Instead, the `Identity` model should be **associated** with your
|
|
31
31
|
`User` model giving you maximum flexibility to include other authentication
|
|
32
32
|
strategies such as Facebook, Twitter, etc.
|
|
@@ -93,6 +93,26 @@ class Identity
|
|
|
93
93
|
end
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
+
### CouchPotato
|
|
97
|
+
|
|
98
|
+
Include the `OmniAuth::Identity::Models::CouchPotatoModule` mixin and specify fields that you will need.
|
|
99
|
+
|
|
100
|
+
```ruby
|
|
101
|
+
class Identity
|
|
102
|
+
include CouchPotato::Persistence
|
|
103
|
+
include OmniAuth::Identity::Models::CouchPotatoModule
|
|
104
|
+
|
|
105
|
+
property :email
|
|
106
|
+
property :password_digest
|
|
107
|
+
|
|
108
|
+
def self.where search_hash
|
|
109
|
+
CouchPotato.database.view Identity.by_email(:key => search_hash)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
view :by_email, :key => :email
|
|
113
|
+
end
|
|
114
|
+
```
|
|
115
|
+
|
|
96
116
|
Once you've got an Identity persistence model and the strategy up and
|
|
97
117
|
running, you can point users to `/auth/identity` and it will request
|
|
98
118
|
that they log in or give them the opportunity to sign up for an account.
|
|
@@ -160,3 +180,23 @@ For more information on rack endpoints, check out [this
|
|
|
160
180
|
introduction](http://library.edgecase.com/Rails/2011/01/04/rails-routing-and-rack-endpoints.html)
|
|
161
181
|
and
|
|
162
182
|
[ActionController::Metal](http://rubydoc.info/docs/rails/ActionController/Metal)
|
|
183
|
+
|
|
184
|
+
## Customizing Locate Conditions
|
|
185
|
+
|
|
186
|
+
You can customize the way that matching records are found when authenticating.
|
|
187
|
+
For example, for a site with multiple domains, you may wish to scope the search
|
|
188
|
+
within a particular subdomain. To do so, add :locate_conditions to your config.
|
|
189
|
+
The default value is:
|
|
190
|
+
|
|
191
|
+
```ruby
|
|
192
|
+
:locate_conditions => lambda { |req| { model.auth_key => req['auth_key']} }
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
locate_conditions takes a Proc object, and must return a hash. The resulting hash is used
|
|
196
|
+
as a parameter in the locate method for your ORM. The proc is evaluated in the
|
|
197
|
+
callback context, and has access to the Identity model (using `model`) and receives the request
|
|
198
|
+
object as a parameter. Note that model.auth_key defaults to 'email', but is also configurable.
|
|
199
|
+
|
|
200
|
+
Note: Be careful when customizing locate_conditions. The best way to modify the conditions is
|
|
201
|
+
to copy the default value, and then add to the hash. Removing the default condition will almost
|
|
202
|
+
always break things!
|
data/lib/omniauth/identity.rb
CHANGED
|
@@ -6,13 +6,14 @@ module OmniAuth
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
module Identity
|
|
9
|
-
autoload :Model,
|
|
10
|
-
autoload :SecurePassword,
|
|
9
|
+
autoload :Model, 'omniauth/identity/model'
|
|
10
|
+
autoload :SecurePassword, 'omniauth/identity/secure_password'
|
|
11
11
|
module Models
|
|
12
|
-
autoload :ActiveRecord,
|
|
13
|
-
autoload :MongoMapper,
|
|
14
|
-
autoload :Mongoid,
|
|
15
|
-
autoload :DataMapper,
|
|
12
|
+
autoload :ActiveRecord, 'omniauth/identity/models/active_record'
|
|
13
|
+
autoload :MongoMapper, 'omniauth/identity/models/mongo_mapper'
|
|
14
|
+
autoload :Mongoid, 'omniauth/identity/models/mongoid'
|
|
15
|
+
autoload :DataMapper, 'omniauth/identity/models/data_mapper'
|
|
16
|
+
autoload :CouchPotatoModule, 'omniauth/identity/models/couch_potato'
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
end
|
|
@@ -23,14 +23,14 @@ module OmniAuth
|
|
|
23
23
|
# Authenticate a user with the given key and password.
|
|
24
24
|
#
|
|
25
25
|
# @param [String] key The unique login key provided for a given identity.
|
|
26
|
-
# @param [String] password The presumed password for the identity.
|
|
26
|
+
# @param [String] password The presumed password for the identity.
|
|
27
27
|
# @return [Model] An instance of the identity model class.
|
|
28
|
-
def authenticate(
|
|
29
|
-
instance = locate(
|
|
28
|
+
def authenticate(conditions, password)
|
|
29
|
+
instance = locate(conditions)
|
|
30
30
|
return false unless instance
|
|
31
31
|
instance.authenticate(password)
|
|
32
32
|
end
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
# Used to set or retrieve the method that will be used to get
|
|
35
35
|
# and set the user-supplied authentication key.
|
|
36
36
|
# @return [String] The method name.
|
|
@@ -9,14 +9,14 @@ module OmniAuth
|
|
|
9
9
|
|
|
10
10
|
self.abstract_class = true
|
|
11
11
|
has_secure_password
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
def self.auth_key=(key)
|
|
14
14
|
super
|
|
15
15
|
validates_uniqueness_of key, :case_sensitive => false
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
def self.locate(
|
|
19
|
-
where(
|
|
18
|
+
def self.locate(search_hash)
|
|
19
|
+
where(search_hash).first
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'couch_potato'
|
|
2
|
+
|
|
3
|
+
module OmniAuth
|
|
4
|
+
module Identity
|
|
5
|
+
module Models
|
|
6
|
+
# can not be named CouchPotato since there is a class with that name
|
|
7
|
+
module CouchPotatoModule
|
|
8
|
+
|
|
9
|
+
def self.included(base)
|
|
10
|
+
|
|
11
|
+
base.class_eval do
|
|
12
|
+
|
|
13
|
+
include ::OmniAuth::Identity::Model
|
|
14
|
+
include ::OmniAuth::Identity::SecurePassword
|
|
15
|
+
|
|
16
|
+
has_secure_password
|
|
17
|
+
|
|
18
|
+
def self.auth_key=(key)
|
|
19
|
+
super
|
|
20
|
+
validates_uniqueness_of key, :case_sensitive => false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.locate(search_hash)
|
|
24
|
+
where(search_hash).first
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -68,7 +68,7 @@ module OmniAuth
|
|
|
68
68
|
# Encrypts the password into the password_digest attribute.
|
|
69
69
|
def password=(unencrypted_password)
|
|
70
70
|
@password = unencrypted_password
|
|
71
|
-
|
|
71
|
+
if unencrypted_password && !unencrypted_password.empty?
|
|
72
72
|
self.password_digest = BCrypt::Password.create(unencrypted_password)
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
module OmniAuth
|
|
2
2
|
module Strategies
|
|
3
|
-
# The identity strategy allows you to provide simple internal
|
|
3
|
+
# The identity strategy allows you to provide simple internal
|
|
4
4
|
# user authentication using the same process flow that you
|
|
5
5
|
# use for external OmniAuth providers.
|
|
6
6
|
class Identity
|
|
7
7
|
include OmniAuth::Strategy
|
|
8
8
|
|
|
9
9
|
option :fields, [:name, :email]
|
|
10
|
+
option :on_login, nil
|
|
11
|
+
option :on_registration, nil
|
|
10
12
|
option :on_failed_registration, nil
|
|
13
|
+
option :locate_conditions, lambda{|req| {model.auth_key => req['auth_key']} }
|
|
11
14
|
|
|
12
15
|
def request_phase
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
if options[:on_login]
|
|
17
|
+
options[:on_login].call(self.env)
|
|
18
|
+
else
|
|
19
|
+
OmniAuth::Form.build(
|
|
20
|
+
:title => (options[:title] || "Identity Verification"),
|
|
21
|
+
:url => callback_path
|
|
22
|
+
) do |f|
|
|
23
|
+
f.text_field 'Login', 'auth_key'
|
|
24
|
+
f.password_field 'Password', 'password'
|
|
25
|
+
f.html "<p align='center'><a href='#{registration_path}'>Create an Identity</a></p>"
|
|
26
|
+
end.to_response
|
|
27
|
+
end
|
|
21
28
|
end
|
|
22
29
|
|
|
23
30
|
def callback_phase
|
|
@@ -38,13 +45,17 @@ module OmniAuth
|
|
|
38
45
|
end
|
|
39
46
|
|
|
40
47
|
def registration_form
|
|
41
|
-
|
|
42
|
-
options[:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
if options[:on_registration]
|
|
49
|
+
options[:on_registration].call(self.env)
|
|
50
|
+
else
|
|
51
|
+
OmniAuth::Form.build(:title => 'Register Identity') do |f|
|
|
52
|
+
options[:fields].each do |field|
|
|
53
|
+
f.text_field field.to_s.capitalize, field.to_s
|
|
54
|
+
end
|
|
55
|
+
f.password_field 'Password', 'password'
|
|
56
|
+
f.password_field 'Confirm Password', 'password_confirmation'
|
|
57
|
+
end.to_response
|
|
58
|
+
end
|
|
48
59
|
end
|
|
49
60
|
|
|
50
61
|
def registration_phase
|
|
@@ -75,7 +86,13 @@ module OmniAuth
|
|
|
75
86
|
end
|
|
76
87
|
|
|
77
88
|
def identity
|
|
78
|
-
|
|
89
|
+
if options.locate_conditions.is_a? Proc
|
|
90
|
+
conditions = instance_exec(request, &options.locate_conditions)
|
|
91
|
+
conditions.to_hash
|
|
92
|
+
else
|
|
93
|
+
conditions = options.locate_conditions.to_hash
|
|
94
|
+
end
|
|
95
|
+
@identity ||= model.authenticate(conditions, request['password'] )
|
|
79
96
|
end
|
|
80
97
|
|
|
81
98
|
def model
|
data/omniauth-identity.gemspec
CHANGED
|
@@ -15,6 +15,7 @@ Gem::Specification.new do |gem|
|
|
|
15
15
|
gem.add_development_dependency 'mongo_mapper'
|
|
16
16
|
gem.add_development_dependency 'datamapper'
|
|
17
17
|
gem.add_development_dependency 'bson_ext'
|
|
18
|
+
gem.add_development_dependency 'couch_potato'
|
|
18
19
|
|
|
19
20
|
gem.name = 'omniauth-identity'
|
|
20
21
|
gem.version = OmniAuth::Identity::VERSION
|
|
@@ -15,8 +15,14 @@ describe OmniAuth::Identity::Model do
|
|
|
15
15
|
describe '.authenticate' do
|
|
16
16
|
it 'should call locate and then authenticate' do
|
|
17
17
|
mocked_instance = mock('ExampleModel', :authenticate => 'abbadoo')
|
|
18
|
-
subject.should_receive(:locate).with('example').and_return(mocked_instance)
|
|
19
|
-
subject.authenticate('example','pass').should == 'abbadoo'
|
|
18
|
+
subject.should_receive(:locate).with('email' => 'example').and_return(mocked_instance)
|
|
19
|
+
subject.authenticate({'email' => 'example'},'pass').should == 'abbadoo'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should call locate with additional scopes when provided' do
|
|
23
|
+
mocked_instance = mock('ExampleModel', :authenticate => 'abbadoo')
|
|
24
|
+
subject.should_receive(:locate).with('email' => 'example', 'user_type' => 'admin').and_return(mocked_instance)
|
|
25
|
+
subject.authenticate({'email' => 'example', 'user_type' => 'admin'}, 'pass').should == 'abbadoo'
|
|
20
26
|
end
|
|
21
27
|
|
|
22
28
|
it 'should recover gracefully if locate is nil' do
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe(OmniAuth::Identity::Models::ActiveRecord, :db => true) do
|
|
4
|
-
class TestIdentity < OmniAuth::Identity::Models::ActiveRecord
|
|
5
|
-
auth_key :ham_sandwich
|
|
6
|
-
end
|
|
4
|
+
class TestIdentity < OmniAuth::Identity::Models::ActiveRecord; end
|
|
7
5
|
|
|
8
|
-
it 'should locate
|
|
9
|
-
TestIdentity.should_receive(:where).with('ham_sandwich' => 'open faced').and_return(['wakka'])
|
|
10
|
-
TestIdentity.locate('open faced').should == 'wakka'
|
|
6
|
+
it 'should delegate locate to the where query method' do
|
|
7
|
+
TestIdentity.should_receive(:where).with('ham_sandwich' => 'open faced', 'category' => 'sandwiches').and_return(['wakka'])
|
|
8
|
+
TestIdentity.locate('ham_sandwich' => 'open faced', 'category' => 'sandwiches').should == 'wakka'
|
|
11
9
|
end
|
|
12
|
-
|
|
10
|
+
|
|
13
11
|
it 'should not use STI rules for its table name' do
|
|
14
12
|
TestIdentity.table_name.should == 'test_identities'
|
|
15
13
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe(OmniAuth::Identity::Models::CouchPotatoModule, :db => true) do
|
|
4
|
+
class CouchPotatoTestIdentity
|
|
5
|
+
include CouchPotato::Persistence
|
|
6
|
+
include OmniAuth::Identity::Models::CouchPotatoModule
|
|
7
|
+
auth_key :ham_sandwich
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it 'should delegate locate to the where query method' do
|
|
11
|
+
CouchPotatoTestIdentity.should_receive(:where).with('ham_sandwich' => 'open faced', 'category' => 'sandwiches').and_return(['wakka'])
|
|
12
|
+
CouchPotatoTestIdentity.locate('ham_sandwich' => 'open faced', 'category' => 'sandwiches').should == 'wakka'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -15,8 +15,8 @@ describe(OmniAuth::Identity::Models::DataMapper, :db => true) do
|
|
|
15
15
|
@resource = DataMapperTestIdentity.new
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
it 'should locate
|
|
19
|
-
DataMapperTestIdentity.should_receive(:all).with('ham_sandwich' => 'open faced').and_return(['wakka'])
|
|
20
|
-
DataMapperTestIdentity.locate('open faced').should == 'wakka'
|
|
18
|
+
it 'should delegate locate to the all query method' do
|
|
19
|
+
DataMapperTestIdentity.should_receive(:all).with('ham_sandwich' => 'open faced', 'category' => 'sandwiches').and_return(['wakka'])
|
|
20
|
+
DataMapperTestIdentity.locate('ham_sandwich' => 'open faced', 'category' => 'sandwiches').should == 'wakka'
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -7,8 +7,9 @@ describe(OmniAuth::Identity::Models::MongoMapper, :db => true) do
|
|
|
7
7
|
auth_key :ham_sandwich
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
MongoMapperTestIdentity.
|
|
10
|
+
|
|
11
|
+
it 'should delegate locate to the where query method' do
|
|
12
|
+
MongoMapperTestIdentity.should_receive(:where).with('ham_sandwich' => 'open faced', 'category' => 'sandwiches').and_return(['wakka'])
|
|
13
|
+
MongoMapperTestIdentity.locate('ham_sandwich' => 'open faced', 'category' => 'sandwiches').should == 'wakka'
|
|
13
14
|
end
|
|
14
15
|
end
|
|
@@ -7,11 +7,11 @@ describe(OmniAuth::Identity::Models::Mongoid, :db => true) do
|
|
|
7
7
|
auth_key :ham_sandwich
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
it 'should locate
|
|
11
|
-
MongoidTestIdentity.should_receive(:where).with('ham_sandwich' => 'open faced').and_return(['wakka'])
|
|
12
|
-
MongoidTestIdentity.locate('open faced').should == 'wakka'
|
|
10
|
+
it 'should delegate locate to the where query method' do
|
|
11
|
+
MongoidTestIdentity.should_receive(:where).with('ham_sandwich' => 'open faced', 'category' => 'sandwiches').and_return(['wakka'])
|
|
12
|
+
MongoidTestIdentity.locate('ham_sandwich' => 'open faced', 'category' => 'sandwiches').should == 'wakka'
|
|
13
13
|
end
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
it 'should not use STI rules for its collection name' do
|
|
16
16
|
MongoidTestIdentity.collection.name.should == 'mongoid_test_identities'
|
|
17
17
|
end
|
|
@@ -41,7 +41,8 @@ describe OmniAuth::Strategies::Identity do
|
|
|
41
41
|
|
|
42
42
|
context 'with valid credentials' do
|
|
43
43
|
before do
|
|
44
|
-
MockIdentity.
|
|
44
|
+
MockIdentity.stub('auth_key').and_return('email')
|
|
45
|
+
MockIdentity.should_receive('authenticate').with({'email' => 'john'},'awesome').and_return(user)
|
|
45
46
|
post '/auth/identity/callback', :auth_key => 'john', :password => 'awesome'
|
|
46
47
|
end
|
|
47
48
|
|
|
@@ -60,8 +61,9 @@ describe OmniAuth::Strategies::Identity do
|
|
|
60
61
|
|
|
61
62
|
context 'with invalid credentials' do
|
|
62
63
|
before do
|
|
64
|
+
MockIdentity.stub('auth_key').and_return('email')
|
|
63
65
|
OmniAuth.config.on_failure = lambda{|env| [401, {}, [env['omniauth.error.type'].inspect]]}
|
|
64
|
-
MockIdentity.should_receive(:authenticate).with('wrong','login').and_return(false)
|
|
66
|
+
MockIdentity.should_receive(:authenticate).with({'email' => 'wrong'},'login').and_return(false)
|
|
65
67
|
post '/auth/identity/callback', :auth_key => 'wrong', :password => 'login'
|
|
66
68
|
end
|
|
67
69
|
|
|
@@ -69,6 +71,16 @@ describe OmniAuth::Strategies::Identity do
|
|
|
69
71
|
last_response.body.should == ':invalid_credentials'
|
|
70
72
|
end
|
|
71
73
|
end
|
|
74
|
+
|
|
75
|
+
context 'with auth scopes' do
|
|
76
|
+
|
|
77
|
+
it 'should evaluate and pass through conditions proc' do
|
|
78
|
+
MockIdentity.stub('auth_key').and_return('email')
|
|
79
|
+
set_app!( :locate_conditions => lambda{|req| {model.auth_key => req['auth_key'], 'user_type' => 'admin'} } )
|
|
80
|
+
MockIdentity.should_receive('authenticate').with( {'email' => 'john', 'user_type' => 'admin'}, 'awesome' ).and_return(user)
|
|
81
|
+
post '/auth/identity/callback', :auth_key => 'john', :password => 'awesome'
|
|
82
|
+
end
|
|
83
|
+
end
|
|
72
84
|
end
|
|
73
85
|
|
|
74
86
|
describe '#registration_form' do
|
|
@@ -81,13 +93,14 @@ describe OmniAuth::Strategies::Identity do
|
|
|
81
93
|
describe '#registration_phase' do
|
|
82
94
|
context 'with successful creation' do
|
|
83
95
|
let(:properties){ {
|
|
84
|
-
:name => 'Awesome Dude',
|
|
96
|
+
:name => 'Awesome Dude',
|
|
85
97
|
:email => 'awesome@example.com',
|
|
86
98
|
:password => 'face',
|
|
87
99
|
:password_confirmation => 'face'
|
|
88
100
|
} }
|
|
89
101
|
|
|
90
102
|
before do
|
|
103
|
+
MockIdentity.stub('auth_key').and_return('email')
|
|
91
104
|
m = mock(:uid => 'abc', :name => 'Awesome Dude', :email => 'awesome@example.com', :info => {:name => 'DUUUUDE!'}, :persisted? => true)
|
|
92
105
|
MockIdentity.should_receive(:create).with(properties).and_return(m)
|
|
93
106
|
end
|
metadata
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: omniauth-identity
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.1.1
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Michael Bleigh
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2013-07-04 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: omniauth
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
17
|
- - ~>
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
@@ -22,7 +20,6 @@ dependencies:
|
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
24
|
- - ~>
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
@@ -30,7 +27,6 @@ dependencies:
|
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: bcrypt-ruby
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
31
|
- - ~>
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
@@ -38,7 +34,6 @@ dependencies:
|
|
|
38
34
|
type: :runtime
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
38
|
- - ~>
|
|
44
39
|
- !ruby/object:Gem::Version
|
|
@@ -46,7 +41,6 @@ dependencies:
|
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
|
47
42
|
name: maruku
|
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
44
|
requirements:
|
|
51
45
|
- - ~>
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
@@ -54,7 +48,6 @@ dependencies:
|
|
|
54
48
|
type: :development
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
51
|
requirements:
|
|
59
52
|
- - ~>
|
|
60
53
|
- !ruby/object:Gem::Version
|
|
@@ -62,7 +55,6 @@ dependencies:
|
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
|
63
56
|
name: simplecov
|
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
58
|
requirements:
|
|
67
59
|
- - ~>
|
|
68
60
|
- !ruby/object:Gem::Version
|
|
@@ -70,7 +62,6 @@ dependencies:
|
|
|
70
62
|
type: :development
|
|
71
63
|
prerelease: false
|
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
65
|
requirements:
|
|
75
66
|
- - ~>
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
@@ -78,7 +69,6 @@ dependencies:
|
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
|
79
70
|
name: rack-test
|
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
72
|
requirements:
|
|
83
73
|
- - ~>
|
|
84
74
|
- !ruby/object:Gem::Version
|
|
@@ -86,7 +76,6 @@ dependencies:
|
|
|
86
76
|
type: :development
|
|
87
77
|
prerelease: false
|
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
79
|
requirements:
|
|
91
80
|
- - ~>
|
|
92
81
|
- !ruby/object:Gem::Version
|
|
@@ -94,7 +83,6 @@ dependencies:
|
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
|
95
84
|
name: rake
|
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
|
97
|
-
none: false
|
|
98
86
|
requirements:
|
|
99
87
|
- - ~>
|
|
100
88
|
- !ruby/object:Gem::Version
|
|
@@ -102,7 +90,6 @@ dependencies:
|
|
|
102
90
|
type: :development
|
|
103
91
|
prerelease: false
|
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
-
none: false
|
|
106
93
|
requirements:
|
|
107
94
|
- - ~>
|
|
108
95
|
- !ruby/object:Gem::Version
|
|
@@ -110,7 +97,6 @@ dependencies:
|
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
|
111
98
|
name: rspec
|
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
none: false
|
|
114
100
|
requirements:
|
|
115
101
|
- - ~>
|
|
116
102
|
- !ruby/object:Gem::Version
|
|
@@ -118,7 +104,6 @@ dependencies:
|
|
|
118
104
|
type: :development
|
|
119
105
|
prerelease: false
|
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
none: false
|
|
122
107
|
requirements:
|
|
123
108
|
- - ~>
|
|
124
109
|
- !ruby/object:Gem::Version
|
|
@@ -126,7 +111,6 @@ dependencies:
|
|
|
126
111
|
- !ruby/object:Gem::Dependency
|
|
127
112
|
name: activerecord
|
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
|
129
|
-
none: false
|
|
130
114
|
requirements:
|
|
131
115
|
- - ~>
|
|
132
116
|
- !ruby/object:Gem::Version
|
|
@@ -134,7 +118,6 @@ dependencies:
|
|
|
134
118
|
type: :development
|
|
135
119
|
prerelease: false
|
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
-
none: false
|
|
138
121
|
requirements:
|
|
139
122
|
- - ~>
|
|
140
123
|
- !ruby/object:Gem::Version
|
|
@@ -142,65 +125,71 @@ dependencies:
|
|
|
142
125
|
- !ruby/object:Gem::Dependency
|
|
143
126
|
name: mongoid
|
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
|
145
|
-
none: false
|
|
146
128
|
requirements:
|
|
147
|
-
- -
|
|
129
|
+
- - '>='
|
|
148
130
|
- !ruby/object:Gem::Version
|
|
149
131
|
version: '0'
|
|
150
132
|
type: :development
|
|
151
133
|
prerelease: false
|
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
153
|
-
none: false
|
|
154
135
|
requirements:
|
|
155
|
-
- -
|
|
136
|
+
- - '>='
|
|
156
137
|
- !ruby/object:Gem::Version
|
|
157
138
|
version: '0'
|
|
158
139
|
- !ruby/object:Gem::Dependency
|
|
159
140
|
name: mongo_mapper
|
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
|
161
|
-
none: false
|
|
162
142
|
requirements:
|
|
163
|
-
- -
|
|
143
|
+
- - '>='
|
|
164
144
|
- !ruby/object:Gem::Version
|
|
165
145
|
version: '0'
|
|
166
146
|
type: :development
|
|
167
147
|
prerelease: false
|
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
-
none: false
|
|
170
149
|
requirements:
|
|
171
|
-
- -
|
|
150
|
+
- - '>='
|
|
172
151
|
- !ruby/object:Gem::Version
|
|
173
152
|
version: '0'
|
|
174
153
|
- !ruby/object:Gem::Dependency
|
|
175
154
|
name: datamapper
|
|
176
155
|
requirement: !ruby/object:Gem::Requirement
|
|
177
|
-
none: false
|
|
178
156
|
requirements:
|
|
179
|
-
- -
|
|
157
|
+
- - '>='
|
|
180
158
|
- !ruby/object:Gem::Version
|
|
181
159
|
version: '0'
|
|
182
160
|
type: :development
|
|
183
161
|
prerelease: false
|
|
184
162
|
version_requirements: !ruby/object:Gem::Requirement
|
|
185
|
-
none: false
|
|
186
163
|
requirements:
|
|
187
|
-
- -
|
|
164
|
+
- - '>='
|
|
188
165
|
- !ruby/object:Gem::Version
|
|
189
166
|
version: '0'
|
|
190
167
|
- !ruby/object:Gem::Dependency
|
|
191
168
|
name: bson_ext
|
|
192
169
|
requirement: !ruby/object:Gem::Requirement
|
|
193
|
-
none: false
|
|
194
170
|
requirements:
|
|
195
|
-
- -
|
|
171
|
+
- - '>='
|
|
196
172
|
- !ruby/object:Gem::Version
|
|
197
173
|
version: '0'
|
|
198
174
|
type: :development
|
|
199
175
|
prerelease: false
|
|
200
176
|
version_requirements: !ruby/object:Gem::Requirement
|
|
201
|
-
none: false
|
|
202
177
|
requirements:
|
|
203
|
-
- -
|
|
178
|
+
- - '>='
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '0'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: couch_potato
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - '>='
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '0'
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - '>='
|
|
204
193
|
- !ruby/object:Gem::Version
|
|
205
194
|
version: '0'
|
|
206
195
|
description: Internal authentication handlers for OmniAuth.
|
|
@@ -222,6 +211,7 @@ files:
|
|
|
222
211
|
- lib/omniauth/identity.rb
|
|
223
212
|
- lib/omniauth/identity/model.rb
|
|
224
213
|
- lib/omniauth/identity/models/active_record.rb
|
|
214
|
+
- lib/omniauth/identity/models/couch_potato.rb
|
|
225
215
|
- lib/omniauth/identity/models/data_mapper.rb
|
|
226
216
|
- lib/omniauth/identity/models/mongo_mapper.rb
|
|
227
217
|
- lib/omniauth/identity/models/mongoid.rb
|
|
@@ -230,6 +220,7 @@ files:
|
|
|
230
220
|
- omniauth-identity.gemspec
|
|
231
221
|
- spec/omniauth/identity/model_spec.rb
|
|
232
222
|
- spec/omniauth/identity/models/active_record_spec.rb
|
|
223
|
+
- spec/omniauth/identity/models/couch_potato_spec.rb
|
|
233
224
|
- spec/omniauth/identity/models/data_mapper_spec.rb
|
|
234
225
|
- spec/omniauth/identity/models/mongo_mapper_spec.rb
|
|
235
226
|
- spec/omniauth/identity/models/mongoid_spec.rb
|
|
@@ -238,26 +229,26 @@ files:
|
|
|
238
229
|
- spec/spec_helper.rb
|
|
239
230
|
homepage: http://github.com/intridea/omniauth-identity
|
|
240
231
|
licenses: []
|
|
232
|
+
metadata: {}
|
|
241
233
|
post_install_message:
|
|
242
234
|
rdoc_options: []
|
|
243
235
|
require_paths:
|
|
244
236
|
- lib
|
|
245
237
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
246
|
-
none: false
|
|
247
238
|
requirements:
|
|
248
|
-
- -
|
|
239
|
+
- - '>='
|
|
249
240
|
- !ruby/object:Gem::Version
|
|
250
241
|
version: '0'
|
|
251
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
|
-
none: false
|
|
253
243
|
requirements:
|
|
254
|
-
- -
|
|
244
|
+
- - '>='
|
|
255
245
|
- !ruby/object:Gem::Version
|
|
256
246
|
version: 1.3.6
|
|
257
247
|
requirements: []
|
|
258
248
|
rubyforge_project:
|
|
259
|
-
rubygems_version:
|
|
249
|
+
rubygems_version: 2.0.0
|
|
260
250
|
signing_key:
|
|
261
|
-
specification_version:
|
|
251
|
+
specification_version: 4
|
|
262
252
|
summary: Internal authentication handlers for OmniAuth.
|
|
263
253
|
test_files: []
|
|
254
|
+
has_rdoc:
|