touchpass 0.0.8.18 → 0.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.
- data/Gemfile +1 -21
- data/Gemfile.lock +13 -7
- data/bin/touchpass +43 -19
- data/lib/touchpass/client.rb +245 -184
- data/lib/touchpass/crypt.rb +1 -1
- data/lib/touchpass/verification.rb +3 -1
- data/lib/touchpass/version.rb +1 -1
- data/spec/touchpass_client_spec.rb +80 -69
- data/test/claimed_vs_verified_token.rb +29 -0
- data/touchpass.gemspec +9 -0
- metadata +132 -2
data/lib/touchpass/crypt.rb
CHANGED
@@ -113,6 +113,8 @@ module Touchpass
|
|
113
113
|
pub_key_str = device["pub_key"]
|
114
114
|
next unless pub_key_str && pub_key_str.length > 0
|
115
115
|
public_key = Crypt.read_rsa_key(pub_key_str)
|
116
|
+
encrypted_key = nil
|
117
|
+
encrypted_data = nil
|
116
118
|
|
117
119
|
next unless public_key # skip invalid keys
|
118
120
|
|
@@ -126,7 +128,7 @@ module Touchpass
|
|
126
128
|
encrypted_data = Touchpass::Crypt.encrypt(plaintext, key)
|
127
129
|
encrypted_key = public_key.public_encrypt(key)
|
128
130
|
end
|
129
|
-
|
131
|
+
|
130
132
|
# Note: some parts of the server code expect keys here to be strings (not symbols)
|
131
133
|
ret.push( {
|
132
134
|
"device_id" => device_id,
|
data/lib/touchpass/version.rb
CHANGED
@@ -20,8 +20,9 @@ describe "Touchpass Client" do
|
|
20
20
|
tpclient.hostname.should eql(TPC_HOSTNAME)
|
21
21
|
tpclient.debug.should eql(TPC_DEBUG)
|
22
22
|
end
|
23
|
+
|
23
24
|
it "should have a populated value for hostname" do
|
24
|
-
tpclient_default.hostname.should eql(Touchpass::Client::
|
25
|
+
tpclient_default.hostname.should eql(Touchpass::Client::DFT_HOST_DEV)
|
25
26
|
tpclient_default.debug.should eql(Touchpass::Client::DFT_DEBUG)
|
26
27
|
end
|
27
28
|
end
|
@@ -30,10 +31,10 @@ describe "Touchpass Client" do
|
|
30
31
|
context "Register Party" do
|
31
32
|
|
32
33
|
it "should allow a party to register with valid username, email and password" do
|
33
|
-
username = "tp#{
|
34
|
+
username = "tp#{random_hash[0..12]}"
|
34
35
|
email = "#{username}@geodica.com"
|
35
36
|
password = "#{username}"
|
36
|
-
new_party = tpclient.register_party(
|
37
|
+
new_party = tpclient.register_party(username, password, email)
|
37
38
|
new_party['id' ].should_not be nil
|
38
39
|
new_party['username'].should == username
|
39
40
|
new_party['email' ].should == email
|
@@ -45,61 +46,65 @@ describe "Touchpass Client" do
|
|
45
46
|
username = ""
|
46
47
|
email = "#{username}@geodica.com"
|
47
48
|
password = "password"
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
49
|
+
lambda {
|
50
|
+
tpclient.register_party(username, password, email)
|
51
|
+
}.should raise_exception("username required")
|
52
|
+
end
|
52
53
|
|
53
54
|
it "should not allow a party to register with an username > 15" do
|
54
|
-
username = "tp#{
|
55
|
+
username = "tp#{random_hash}"
|
55
56
|
username.length.should be >= 15
|
56
57
|
email = "#{username}@geodica.com"
|
57
58
|
password = "password"
|
58
|
-
new_party = tpclient.register_party(
|
59
|
+
new_party = tpclient.register_party(username, password, email)
|
59
60
|
expect_response_error(new_party, :username, "is too long (maximum is 15 characters)")
|
60
61
|
end
|
61
62
|
|
62
63
|
it "should not allow a party to register with an empty email address" do
|
63
|
-
username = "tp#{
|
64
|
+
username = "tp#{random_hash[0..12]}"
|
64
65
|
email = ""
|
65
66
|
password = "#{username}"
|
66
|
-
|
67
|
-
|
67
|
+
lambda {
|
68
|
+
tpclient.register_party(username, password, email)
|
69
|
+
}.should raise_exception("email required")
|
68
70
|
end
|
69
71
|
|
70
72
|
it "should not allow a party to register with an empty password" do
|
71
|
-
username = "tp#{
|
73
|
+
username = "tp#{random_hash[0..12]}"
|
72
74
|
email = "#{username}@geodica.com"
|
73
75
|
password = ""
|
74
|
-
|
75
|
-
|
76
|
-
|
76
|
+
lambda {
|
77
|
+
tpclient.register_party(username, password, email)
|
78
|
+
}.should raise_exception("password required")
|
79
|
+
end
|
77
80
|
end
|
78
81
|
|
79
82
|
# Check that a new rego provides an API key and that we can use the API key to access info
|
80
83
|
context "Validate api_key for newly registered user" do
|
81
84
|
it "should provide a valid API key that can be used to access the party record" do
|
82
85
|
# create a new party and get that party's api_key
|
83
|
-
username = "tp#{
|
86
|
+
username = "tp#{random_hash[0..12]}"
|
84
87
|
email = "#{username}@geodica.com"
|
85
88
|
password = "#{username}"
|
86
|
-
new_party = tpclient.register_party(
|
89
|
+
new_party = tpclient.register_party(username, password, email)
|
87
90
|
new_party['id' ].should_not be nil
|
88
91
|
new_party['username'].should == username
|
89
92
|
new_party['email' ].should == email
|
90
93
|
new_party['state' ].should == 'created'
|
91
|
-
new_party['api_key' ].should_not be nil
|
94
|
+
new_party['api_key' ].should_not be nil
|
95
|
+
|
92
96
|
# Use the api key to access info for that party
|
93
|
-
authenticated_party = tpclient.authenticate_party(
|
97
|
+
authenticated_party = tpclient.authenticate_party(username, password)
|
94
98
|
authenticated_party['api_key'].should_not be nil
|
95
99
|
authenticated_party['id' ].should_not be nil
|
96
100
|
|
97
|
-
shown_party1 = tpclient.
|
101
|
+
shown_party1 = tpclient.get_party_by_id(new_party['id']) # by id
|
98
102
|
shown_party1['id'].should == new_party['id']
|
99
103
|
shown_party1['username'].should == new_party['username']
|
100
104
|
shown_party1['email'].should == new_party['email']
|
101
105
|
shown_party1['state'].should == new_party['state']
|
102
|
-
|
106
|
+
|
107
|
+
shown_party2 = tpclient.get_party(new_party['username']) # by username
|
103
108
|
shown_party2['id'].should == new_party['id']
|
104
109
|
shown_party2['username'].should == new_party['username']
|
105
110
|
shown_party2['email'].should == new_party['email']
|
@@ -111,18 +116,18 @@ describe "Touchpass Client" do
|
|
111
116
|
context "Make changes to a registered party" do
|
112
117
|
it "should allow changes to be made to a party" do
|
113
118
|
# create a new party and get that party's api_key
|
114
|
-
username = "tp#{
|
119
|
+
username = "tp#{random_hash[0..12]}"
|
115
120
|
email = "#{username}@geodica.com"
|
116
121
|
password = "#{username}"
|
117
|
-
new_party = tpclient.register_party(
|
122
|
+
new_party = tpclient.register_party(username, password, email)
|
118
123
|
new_party['id' ].should_not be nil
|
119
124
|
new_party['api_key' ].should_not be nil
|
120
125
|
# Set the party's first_name and last_name
|
121
|
-
updated_party = tpclient.update_party(
|
126
|
+
updated_party = tpclient.update_party(new_party['username'], :first_name => username, :last_name => 'Hemplworth')
|
122
127
|
updated_party['first_name'].should == username
|
123
128
|
updated_party['last_name'].should == 'Hemplworth'
|
124
129
|
# Set the party's email address
|
125
|
-
updated_party = tpclient.update_party(
|
130
|
+
updated_party = tpclient.update_party(new_party['username'], :email => "#{username}@hemplworth.com")
|
126
131
|
updated_party['email'].should == "#{username}@hemplworth.com"
|
127
132
|
end
|
128
133
|
end
|
@@ -130,10 +135,10 @@ describe "Touchpass Client" do
|
|
130
135
|
# Validate addition of new devices
|
131
136
|
context "Add, get and update a device" do
|
132
137
|
before(:each) do
|
133
|
-
@username = "tp#{
|
138
|
+
@username = "tp#{random_hash[0..12]}"
|
134
139
|
@email = "#{@username}@geodica.com"
|
135
140
|
@password = "#{@username}"
|
136
|
-
@new_party = tpclient.register_party(
|
141
|
+
@new_party = tpclient.register_party(@username, @password, @email)
|
137
142
|
end
|
138
143
|
|
139
144
|
it "should create a new party first" do
|
@@ -143,15 +148,15 @@ describe "Touchpass Client" do
|
|
143
148
|
|
144
149
|
it "should allow for the addition and retrieval of a new device" do
|
145
150
|
# create a new device for this party
|
146
|
-
udid =
|
147
|
-
messaging_value =
|
151
|
+
udid = random_hash # a random string
|
152
|
+
messaging_value = random_hash # random string
|
148
153
|
app_id = "touchpass_client_spec"
|
149
|
-
new_device = tpclient.register_device(
|
150
|
-
|
151
|
-
|
152
|
-
|
154
|
+
new_device = tpclient.register_device(@new_party['username'],
|
155
|
+
udid,
|
156
|
+
"#{@username}'s Device",
|
157
|
+
app_id,
|
153
158
|
:messaging_type => 'apn-development',
|
154
|
-
:messaging_value => messaging_value
|
159
|
+
:messaging_value => messaging_value)
|
155
160
|
|
156
161
|
new_device['id' ].should_not be nil
|
157
162
|
new_device['udid' ].should == udid
|
@@ -160,7 +165,7 @@ describe "Touchpass Client" do
|
|
160
165
|
new_device['pub_key'].should_not be nil
|
161
166
|
|
162
167
|
# retrieve the newly created device
|
163
|
-
retrieved_devices = tpclient.get_devices(
|
168
|
+
retrieved_devices = tpclient.get_devices(@username)
|
164
169
|
retrieved_devices['devices'].should_not be nil
|
165
170
|
retrieved_devices['devices'].size.should_not be 0
|
166
171
|
retrieved_devices['devices'][0].should_not be nil
|
@@ -168,9 +173,9 @@ describe "Touchpass Client" do
|
|
168
173
|
retrieved_devices['devices'][0]['udid' ].should_not be nil
|
169
174
|
retrieved_devices['devices'][0]['name' ].should_not be nil
|
170
175
|
retrieved_devices['devices'][0]['pub_key'].should_not be nil
|
171
|
-
|
176
|
+
|
172
177
|
# retrieve the new device to be retrieved by id
|
173
|
-
retrieved_device = tpclient.get_device(
|
178
|
+
retrieved_device = tpclient.get_device(@username, new_device['id'])
|
174
179
|
retrieved_device.should_not be nil
|
175
180
|
retrieved_device['id' ].should == new_device['id' ]
|
176
181
|
retrieved_device['udid' ].should == new_device['udid' ]
|
@@ -179,25 +184,23 @@ describe "Touchpass Client" do
|
|
179
184
|
end
|
180
185
|
|
181
186
|
it "should allow for removal of a device by id" do
|
182
|
-
udid =
|
183
|
-
messaging_value =
|
184
|
-
|
185
|
-
new_device = tpclient.register_device(
|
186
|
-
|
187
|
-
|
188
|
-
:
|
189
|
-
:
|
190
|
-
:messaging_value => messaging_value )
|
187
|
+
udid = random_hash # a random string
|
188
|
+
messaging_value = random_hash # random string
|
189
|
+
|
190
|
+
new_device = tpclient.register_device(@new_party['username'], udid,
|
191
|
+
"#{@username}'s Device",
|
192
|
+
"touchpass_client_spec",
|
193
|
+
:messaging_type => 'apn-development',
|
194
|
+
:messaging_value => messaging_value)
|
191
195
|
|
192
|
-
remove_device = tpclient.remove_device(
|
193
|
-
|
194
|
-
|
195
|
-
retrieved_devices = tpclient.get_devices(:username => @username)
|
196
|
+
remove_device = tpclient.remove_device(@new_party['username'], new_device['id'])
|
197
|
+
|
198
|
+
retrieved_devices = tpclient.get_devices(@username)
|
196
199
|
|
197
200
|
retrieved_devices['devices'].should_not be nil
|
198
201
|
retrieved_devices['devices'].size.should be 0
|
199
202
|
|
200
|
-
retrieved_device = tpclient.get_device(
|
203
|
+
retrieved_device = tpclient.get_device(@username, new_device['id'])
|
201
204
|
expect_response_error(retrieved_device)
|
202
205
|
end
|
203
206
|
|
@@ -210,24 +213,24 @@ describe "Touchpass Client" do
|
|
210
213
|
@rp_client = Touchpass::Client.new(TPC_HOSTNAME, TPC_DEBUG)
|
211
214
|
|
212
215
|
# create a new verifying party
|
213
|
-
@vp_username = "tp#{
|
216
|
+
@vp_username = "tp#{random_hash[0..12]}"
|
214
217
|
@vp_email = "#{@vp_username}@geodica.com"
|
215
218
|
@vp_password = "#{@vp_username}"
|
216
|
-
@new_vp = @vp_client.register_party(
|
219
|
+
@new_vp = @vp_client.register_party(@vp_username, @vp_password, @vp_email)
|
217
220
|
|
218
221
|
# create a new relying party
|
219
|
-
@rp_username = "rp#{
|
222
|
+
@rp_username = "rp#{random_hash[0..12]}"
|
220
223
|
@rp_email = "#{@rp_username}@geodica.com"
|
221
224
|
@rp_password = "#{@rp_username}"
|
222
|
-
@new_rp = @rp_client.register_party(
|
225
|
+
@new_rp = @rp_client.register_party(@rp_username, @rp_password, @rp_email)
|
223
226
|
|
224
227
|
# add a device to the VP
|
225
|
-
@new_device
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
228
|
+
@new_device= @vp_client.register_device(@new_vp['username'],
|
229
|
+
random_hash,
|
230
|
+
"#{@username}'s Device",
|
231
|
+
"touchpass_client_spec",
|
232
|
+
:messaging_type => 'apn-development',
|
233
|
+
:messaging_value => random_hash)
|
231
234
|
end
|
232
235
|
|
233
236
|
it "should create the new rp and vp to work with" do
|
@@ -245,7 +248,7 @@ describe "Touchpass Client" do
|
|
245
248
|
|
246
249
|
it "should allow for a relying party to create a simple (non-location) verification" do
|
247
250
|
# create the verification as the rp
|
248
|
-
verification = @rp_client.create_verification(
|
251
|
+
verification = @rp_client.create_verification(@new_vp['username'])
|
249
252
|
|
250
253
|
verification.should_not be nil
|
251
254
|
verification['crypted_tokens' ].should_not be nil
|
@@ -268,7 +271,7 @@ describe "Touchpass Client" do
|
|
268
271
|
verification['state' ].should == "created"
|
269
272
|
|
270
273
|
# Get the list of verifications for the vp and make sure that our new one is in it
|
271
|
-
verifications_response = @vp_client.get_verifications(
|
274
|
+
verifications_response = @vp_client.get_verifications(@vp_username)
|
272
275
|
verifications_response.should_not be nil
|
273
276
|
verifications_response.size.should be > 0
|
274
277
|
verifications_response['total_entries'].should == 1
|
@@ -288,7 +291,7 @@ describe "Touchpass Client" do
|
|
288
291
|
end
|
289
292
|
|
290
293
|
# Also check that we can get the specific verification directly
|
291
|
-
got_specific_verification = @vp_client.get_verification(
|
294
|
+
got_specific_verification = @vp_client.get_verification(verification['id'])
|
292
295
|
got_specific_verification.should_not be nil
|
293
296
|
|
294
297
|
got_specific_verification.each_key do |key|
|
@@ -296,18 +299,26 @@ describe "Touchpass Client" do
|
|
296
299
|
end
|
297
300
|
|
298
301
|
# Validate that we can update it so that it is completed
|
299
|
-
updated_verification = @vp_client.update_verification(
|
302
|
+
updated_verification = @vp_client.update_verification(verification['id'],
|
303
|
+
@new_device['id'])
|
300
304
|
|
301
305
|
updated_verification['state' ].should == 'verified'
|
302
306
|
updated_verification['responded_at'].should_not be nil
|
303
307
|
|
304
|
-
# We should *not* be able to canel or reject this verification
|
305
|
-
|
308
|
+
# We should *not* be able to canel or reject this verification
|
309
|
+
# since it's already been validated.
|
310
|
+
response = @vp_client.cancel_verification(verification['id'], @new_device['id'])
|
306
311
|
expect_response_error(response, :base, "Verification has already been responded")
|
307
312
|
|
308
|
-
response = @vp_client.reject_verification(
|
313
|
+
response = @vp_client.reject_verification(verification['id'], @new_device['id'])
|
309
314
|
expect_response_error(response, :base, "Verification has already been responded")
|
310
315
|
end
|
311
316
|
end
|
312
317
|
|
318
|
+
private
|
319
|
+
|
320
|
+
def random_hash
|
321
|
+
Touchpass::Crypt.hash(Touchpass::Crypt.salt)
|
322
|
+
end
|
323
|
+
|
313
324
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
def test_claimed_vs_verified_token
|
2
|
+
|
3
|
+
# Utility for handling key file in ~/.touchpass/certs
|
4
|
+
kfc = Touchpass::KeyFileCreator.new("1")
|
5
|
+
|
6
|
+
# Create the per-verification token
|
7
|
+
token_in = Touchpass::Crypt.salt
|
8
|
+
hashed_token = Touchpass::Crypt.hash(token_in)
|
9
|
+
claimed_token = hashed_token
|
10
|
+
|
11
|
+
# Encrypt the un-hashed token
|
12
|
+
pub_key_str = kfc.public_key_text
|
13
|
+
public_key = Touchpass::Crypt.read_rsa_key(pub_key_str)
|
14
|
+
encrypted_token = Base64.encode64(public_key.public_encrypt(token_in))
|
15
|
+
|
16
|
+
# Decrypt the un-hashed token
|
17
|
+
pem_file = kfc.private_key_path
|
18
|
+
private_key = OpenSSL::PKey::RSA.new(File.read(pem_file))
|
19
|
+
token_out = private_key.private_decrypt(Base64.decode64(encrypted_token))
|
20
|
+
verified_token = Touchpass::Crypt.hash(token_out)
|
21
|
+
|
22
|
+
# Check equivalence
|
23
|
+
puts " token_in: #{token_in}"
|
24
|
+
puts " token_out: #{token_out}"
|
25
|
+
puts " claimed_token: #{claimed_token}"
|
26
|
+
puts "verified_token: #{verified_token}"
|
27
|
+
puts "claimed_token == verified_token: #{claimed_token == verified_token}"
|
28
|
+
|
29
|
+
end
|
data/touchpass.gemspec
CHANGED
@@ -24,4 +24,13 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_dependency("thor", "~> 0.14.6")
|
25
25
|
s.add_dependency("geocoder", "~> 1.1.0")
|
26
26
|
s.add_dependency("xml-simple", "~> 1.1.1")
|
27
|
+
|
28
|
+
s.add_development_dependency 'guard'
|
29
|
+
s.add_development_dependency 'growl'
|
30
|
+
s.add_development_dependency 'guard-rspec'
|
31
|
+
s.add_development_dependency 'rspec'
|
32
|
+
s.add_development_dependency 'rspec-core'
|
33
|
+
s.add_development_dependency 'rspec-mocks'
|
34
|
+
s.add_development_dependency 'rspec-expectations'
|
35
|
+
s.add_development_dependency 'cover_me'
|
27
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: touchpass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
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: 2012-10-
|
12
|
+
date: 2012-10-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -91,6 +91,134 @@ dependencies:
|
|
91
91
|
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: 1.1.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: guard
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: growl
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard-rspec
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rspec
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rspec-core
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rspec-mocks
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: rspec-expectations
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :development
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: cover_me
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ! '>='
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
94
222
|
description: Geodica Touchpass
|
95
223
|
email:
|
96
224
|
- info@geodica.com
|
@@ -153,6 +281,7 @@ files:
|
|
153
281
|
- spec/touchpass_rp_verification_spec.rb
|
154
282
|
- spec/touchpass_spec.rb
|
155
283
|
- spec/touchpass_verification_spec.rb
|
284
|
+
- test/claimed_vs_verified_token.rb
|
156
285
|
- touchpass.gemspec
|
157
286
|
homepage: ''
|
158
287
|
licenses: []
|
@@ -195,4 +324,5 @@ test_files:
|
|
195
324
|
- spec/touchpass_rp_verification_spec.rb
|
196
325
|
- spec/touchpass_spec.rb
|
197
326
|
- spec/touchpass_verification_spec.rb
|
327
|
+
- test/claimed_vs_verified_token.rb
|
198
328
|
has_rdoc:
|