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.
@@ -31,7 +31,7 @@ module Touchpass
31
31
  crypt.padding = 1
32
32
  crypt.update(data) << crypt.final
33
33
  end
34
-
34
+
35
35
  def self.encrypt(data, key)
36
36
  cipher(:encrypt, data, key)
37
37
  end
@@ -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,
@@ -1,3 +1,3 @@
1
1
  module Touchpass
2
- VERSION = "0.0.8.18"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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::DFT_HOSTNAME)
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
34
+ username = "tp#{random_hash[0..12]}"
34
35
  email = "#{username}@geodica.com"
35
36
  password = "#{username}"
36
- new_party = tpclient.register_party(:email => email, :username => username, :password => password)
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
- response = tpclient.register_party(:email => email, :username => username, :password => password)
49
- expect_response_error(response, :username, "can't be blank")
50
- expect_response_error(response, :email, "is invalid")
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)}"
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(:email => email, :username => username, :password => password)
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
64
+ username = "tp#{random_hash[0..12]}"
64
65
  email = ""
65
66
  password = "#{username}"
66
- response = tpclient.register_party(:email => email, :username => username, :password => password)
67
- expect_response_error(response, :email, "can't be blank")
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
73
+ username = "tp#{random_hash[0..12]}"
72
74
  email = "#{username}@geodica.com"
73
75
  password = ""
74
- response = tpclient.register_party(:email => email, :username => username, :password => password)
75
- expect_response_error(response, :password, "can't be blank")
76
- end
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
86
+ username = "tp#{random_hash[0..12]}"
84
87
  email = "#{username}@geodica.com"
85
88
  password = "#{username}"
86
- new_party = tpclient.register_party(:email => email, :username => username, :password => password)
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(:login => username, :password => password)
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.get_party(:id => new_party['id']) # by api_key and id
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
- shown_party2 = tpclient.get_party(:username => new_party['username']) # by api_key and username
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
119
+ username = "tp#{random_hash[0..12]}"
115
120
  email = "#{username}@geodica.com"
116
121
  password = "#{username}"
117
- new_party = tpclient.register_party(:email => email, :username => username, :password => password)
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(:username => new_party['username'], :first_name => username, :last_name => 'Hemplworth')
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(:username => new_party['username'], :email => "#{username}@hemplworth.com")
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
138
+ @username = "tp#{random_hash[0..12]}"
134
139
  @email = "#{@username}@geodica.com"
135
140
  @password = "#{@username}"
136
- @new_party = tpclient.register_party(:email => @email, :username => @username, :password => @password)
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 = Touchpass::Crypt.hash(Touchpass::Crypt.salt) # a random string
147
- messaging_value = Touchpass::Crypt.hash(Touchpass::Crypt.salt) # another random string
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(:username => @new_party['username'],
150
- :app_id => app_id,
151
- :udid => udid,
152
- :name => "#{@username}'s Device",
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(:username => @username)
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(:username => @username, :id => new_device['id'])
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 = Touchpass::Crypt.hash(Touchpass::Crypt.salt) # a random string
183
- messaging_value = Touchpass::Crypt.hash(Touchpass::Crypt.salt) # another random string
184
-
185
- new_device = tpclient.register_device(:username => @new_party['username'],
186
- :app_id => "touchpass_client_spec",
187
- :udid => udid,
188
- :name => "#{@username}'s Device",
189
- :messaging_type => 'apn-development',
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(:username => @new_party['username'],
193
- :id => new_device['id'] )
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(:username => @username, :id => new_device['id'])
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
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(:email => @vp_email, :username => @vp_username, :password => @vp_password)
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#{Touchpass::Crypt.hash(Touchpass::Crypt.salt)[0..12]}"
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(:email => @rp_email, :username => @rp_username, :password => @rp_password)
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 = @vp_client.register_device(:username => @new_vp['username'],
226
- :app_id => "touchpass_client_spec",
227
- :udid => Touchpass::Crypt.hash(Touchpass::Crypt.salt),
228
- :name => "#{@username}'s Device",
229
- :messaging_type => 'apn-development',
230
- :messaging_value => Touchpass::Crypt.hash(Touchpass::Crypt.salt) )
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(:to_party => @new_vp['username'])
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(:username => @vp_username)
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(:id => verification['id'])
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(:id => verification['id'], :device_id => @new_device['id'])
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 since it's already been validated
305
- response = @vp_client.cancel_verification(:id => verification['id'])
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(:id => verification['id'])
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.0.8.18
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-06 00:00:00.000000000 Z
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: