touchpass 0.1.1 → 0.1.2
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.lock +3 -3
- data/bin/touchpass +1 -1
- data/lib/touchpass/client.rb +47 -18
- data/lib/touchpass/verification.rb +21 -1
- data/lib/touchpass/version.rb +1 -1
- data/spec/touchpass_client_spec.rb +15 -10
- metadata +1 -1
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
touchpass (0.0
|
4
|
+
touchpass (0.1.0)
|
5
5
|
geocoder (~> 1.1.0)
|
6
6
|
httparty (~> 0.8.0)
|
7
7
|
json (~> 1.6.5)
|
@@ -18,7 +18,7 @@ GEM
|
|
18
18
|
hashie
|
19
19
|
diff-lcs (1.1.3)
|
20
20
|
ffi (1.0.11)
|
21
|
-
geocoder (1.1.
|
21
|
+
geocoder (1.1.4)
|
22
22
|
growl (1.0.3)
|
23
23
|
guard (1.0.2)
|
24
24
|
ffi (>= 0.5.0)
|
@@ -41,7 +41,7 @@ GEM
|
|
41
41
|
diff-lcs (~> 1.1.3)
|
42
42
|
rspec-mocks (2.10.1)
|
43
43
|
thor (0.14.6)
|
44
|
-
xml-simple (1.1.
|
44
|
+
xml-simple (1.1.2)
|
45
45
|
yamler (0.1.0)
|
46
46
|
|
47
47
|
PLATFORMS
|
data/bin/touchpass
CHANGED
data/lib/touchpass/client.rb
CHANGED
@@ -69,7 +69,7 @@ module Touchpass
|
|
69
69
|
response
|
70
70
|
end
|
71
71
|
|
72
|
-
# Get details for a party
|
72
|
+
# Get details for a party (by party id)
|
73
73
|
def get_party_by_id(party_id, options = {})
|
74
74
|
require_api_key
|
75
75
|
require_param(party_id, "party id")
|
@@ -78,6 +78,7 @@ module Touchpass
|
|
78
78
|
submit_request("get", party_url_id(party_id), http_options)
|
79
79
|
end
|
80
80
|
|
81
|
+
# Get details for a party (by username)
|
81
82
|
def get_party(username, options = {})
|
82
83
|
require_api_key
|
83
84
|
require_param(username, "username")
|
@@ -87,7 +88,7 @@ module Touchpass
|
|
87
88
|
end
|
88
89
|
|
89
90
|
# Update details for a party
|
90
|
-
#
|
91
|
+
# options: :email, :first_name, :last_name, :username
|
91
92
|
def update_party_by_id(party_id, options = {})
|
92
93
|
require_api_key
|
93
94
|
require_param(party_id, "party id")
|
@@ -96,6 +97,8 @@ module Touchpass
|
|
96
97
|
submit_request("put", party_url_id(party_id), http_options)
|
97
98
|
end
|
98
99
|
|
100
|
+
# Update details for a party
|
101
|
+
# options: :email, :first_name, :last_name, :username
|
99
102
|
def update_party(username, options = {})
|
100
103
|
require_api_key
|
101
104
|
require_param(username, "username")
|
@@ -105,7 +108,7 @@ module Touchpass
|
|
105
108
|
end
|
106
109
|
|
107
110
|
# Register a new device for a party
|
108
|
-
#
|
111
|
+
# options: :messaging_type, :messaging_value
|
109
112
|
def register_device(username, udid, name, app_id, options = {})
|
110
113
|
require_api_key
|
111
114
|
require_param(username, "username")
|
@@ -156,7 +159,6 @@ module Touchpass
|
|
156
159
|
end
|
157
160
|
|
158
161
|
# Get all devices for a party
|
159
|
-
# needs: :username
|
160
162
|
def get_devices(username, options = {})
|
161
163
|
require_api_key
|
162
164
|
require_param(username, "username")
|
@@ -174,8 +176,7 @@ module Touchpass
|
|
174
176
|
end
|
175
177
|
end
|
176
178
|
|
177
|
-
# Get details for a specific device
|
178
|
-
# the device cannot be found
|
179
|
+
# Get details for a specific device
|
179
180
|
def get_device(username, device_id, options = {})
|
180
181
|
require_api_key
|
181
182
|
require_param(username, "username")
|
@@ -187,8 +188,8 @@ module Touchpass
|
|
187
188
|
submit_request("get", url, http_options)
|
188
189
|
end
|
189
190
|
|
190
|
-
# Update details of a device
|
191
|
-
#
|
191
|
+
# Update details of a device
|
192
|
+
# options: :name, :messaging_type, :messaging_value, :update_pub_key
|
192
193
|
def update_device(username, device_id, options = {})
|
193
194
|
require_api_key
|
194
195
|
require_param(username, "username")
|
@@ -201,7 +202,7 @@ module Touchpass
|
|
201
202
|
submit_request("put", url, http_options)
|
202
203
|
end
|
203
204
|
|
204
|
-
# Remove device
|
205
|
+
# Remove device
|
205
206
|
def remove_device(username, device_id, options = {})
|
206
207
|
require_api_key
|
207
208
|
require_param(username, "username")
|
@@ -225,7 +226,9 @@ module Touchpass
|
|
225
226
|
# them using each device's public key.
|
226
227
|
http_options = standard_http_options(options)
|
227
228
|
response = submit_request("get", "#{@hostname}/#{to_party}/devices", http_options)
|
228
|
-
|
229
|
+
|
230
|
+
vp_devices = response["devices"] || []
|
231
|
+
raise "VP has no registered devices" if vp_devices.empty?
|
229
232
|
|
230
233
|
# create a verification object
|
231
234
|
options = options.merge(:to_party => to_party)
|
@@ -233,7 +236,10 @@ module Touchpass
|
|
233
236
|
http_options = standard_http_options(options, %W{to_party to_device_id to_app_id})
|
234
237
|
http_options[:body].merge!(verification.http_params)
|
235
238
|
|
236
|
-
submit_request("post", "#{@hostname}/verifications", http_options)
|
239
|
+
response = submit_request("post", "#{@hostname}/verifications", http_options)
|
240
|
+
|
241
|
+
verification.attributes = response
|
242
|
+
verification
|
237
243
|
end
|
238
244
|
|
239
245
|
# Get a page of verifications for a particular party id
|
@@ -267,8 +273,25 @@ module Touchpass
|
|
267
273
|
submit_request("get", url, http_options)
|
268
274
|
end
|
269
275
|
|
276
|
+
# fetch verification until state is not 'created'
|
277
|
+
def poll_verification(verification_id, options = {})
|
278
|
+
http_options = standard_http_options(options)
|
279
|
+
timeout = options[:timeout] || 60 # default poll for 60 seconds
|
280
|
+
sleep_time = 5
|
281
|
+
response = nil
|
282
|
+
|
283
|
+
while timeout > 0
|
284
|
+
response = get_verification(verification_id)
|
285
|
+
break if response['state'] != Verification::STATE_CREATED
|
286
|
+
sleep sleep_time
|
287
|
+
timeout -= sleep_time
|
288
|
+
end
|
289
|
+
|
290
|
+
response
|
291
|
+
end
|
292
|
+
|
270
293
|
# Update Verification
|
271
|
-
#
|
294
|
+
# options: :address
|
272
295
|
def update_verification(verification_id, device_id, options = {})
|
273
296
|
require_api_key
|
274
297
|
require_param(verification_id, "verification id")
|
@@ -318,7 +341,6 @@ module Touchpass
|
|
318
341
|
end
|
319
342
|
|
320
343
|
# Reject a verification
|
321
|
-
# needs: :id
|
322
344
|
def reject_verification(verification_id, device_id, options = {})
|
323
345
|
require_api_key
|
324
346
|
require_param(verification_id, "verification id")
|
@@ -372,9 +394,13 @@ module Touchpass
|
|
372
394
|
msg = ""
|
373
395
|
if response['error']
|
374
396
|
msg = response['error']
|
375
|
-
elsif response['errors'].kind_of(Array)
|
376
|
-
|
377
|
-
|
397
|
+
elsif response['errors'].kind_of?(Array)
|
398
|
+
list = []
|
399
|
+
response['errors'].each do |error|
|
400
|
+
err = error['field'] && error['field'] != 'base' ? error['field'] + " " + error['message'] : error['message']
|
401
|
+
list.push(err) if err
|
402
|
+
end
|
403
|
+
msg = list.join(", ")
|
378
404
|
end
|
379
405
|
msg
|
380
406
|
end
|
@@ -407,7 +433,8 @@ module Touchpass
|
|
407
433
|
raise "#{name} required" unless value && value.to_s.length > 0
|
408
434
|
end
|
409
435
|
|
410
|
-
# Submit the request to the server and process the response (for errors)
|
436
|
+
# Submit the request to the server and process the response (for errors).
|
437
|
+
# raises an exception if errors are received in the response.
|
411
438
|
def submit_request(http_verb, request, options)
|
412
439
|
|
413
440
|
request = request + "." + REQUEST_FORMAT
|
@@ -436,7 +463,9 @@ module Touchpass
|
|
436
463
|
puts "DEBUG: "
|
437
464
|
end
|
438
465
|
|
439
|
-
response.to_hash
|
466
|
+
response = response.to_hash
|
467
|
+
raise error_message(response) if errors?(response)
|
468
|
+
response
|
440
469
|
end
|
441
470
|
|
442
471
|
end # class Touchpass::Client
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module Touchpass
|
2
2
|
class Verification
|
3
3
|
|
4
|
+
STATE_CREATED = 'created'
|
5
|
+
|
4
6
|
attr_reader :crypted_salts, :crypted_tokens, :crypted_messages
|
5
7
|
attr_reader :claimed_token
|
6
8
|
attr_reader :location_verification, :claimed_prp, :resolution
|
9
|
+
attr_accessor :attributes
|
7
10
|
|
8
11
|
def initialize(vp_devices, options = {})
|
9
12
|
|
@@ -13,6 +16,7 @@ module Touchpass
|
|
13
16
|
@claimed_token = hashed_token
|
14
17
|
@vp_devices = vp_devices
|
15
18
|
@crypted_messages = []
|
19
|
+
@attributes = {}
|
16
20
|
|
17
21
|
# Encrypt message using each verifying party's (to_party) device public keys
|
18
22
|
add_message(options[:message]) if !options[:message].nil?
|
@@ -85,7 +89,23 @@ module Touchpass
|
|
85
89
|
|
86
90
|
params
|
87
91
|
end
|
88
|
-
|
92
|
+
|
93
|
+
def [](key)
|
94
|
+
@attributes.kind_of?(Hash) ? @attributes[key] : nil
|
95
|
+
end
|
96
|
+
|
97
|
+
def to_h
|
98
|
+
@attributes
|
99
|
+
end
|
100
|
+
|
101
|
+
def id
|
102
|
+
self['id']
|
103
|
+
end
|
104
|
+
|
105
|
+
def state
|
106
|
+
self['state']
|
107
|
+
end
|
108
|
+
|
89
109
|
private
|
90
110
|
|
91
111
|
def param_hash(values)
|
data/lib/touchpass/version.rb
CHANGED
@@ -56,8 +56,10 @@ describe "Touchpass Client" do
|
|
56
56
|
username.length.should be >= 15
|
57
57
|
email = "#{username}@geodica.com"
|
58
58
|
password = "password"
|
59
|
-
|
60
|
-
|
59
|
+
|
60
|
+
lambda {
|
61
|
+
new_party = tpclient.register_party(username, password, email)
|
62
|
+
}.should raise_exception(/username is too long/)
|
61
63
|
end
|
62
64
|
|
63
65
|
it "should not allow a party to register with an empty email address" do
|
@@ -184,8 +186,8 @@ describe "Touchpass Client" do
|
|
184
186
|
end
|
185
187
|
|
186
188
|
it "should allow for removal of a device by id" do
|
187
|
-
udid
|
188
|
-
messaging_value = random_hash # random string
|
189
|
+
udid = random_hash # a random string
|
190
|
+
messaging_value = random_hash # random string
|
189
191
|
|
190
192
|
new_device = tpclient.register_device(@new_party['username'], udid,
|
191
193
|
"#{@username}'s Device",
|
@@ -200,8 +202,9 @@ describe "Touchpass Client" do
|
|
200
202
|
retrieved_devices['devices'].should_not be nil
|
201
203
|
retrieved_devices['devices'].size.should be 0
|
202
204
|
|
203
|
-
|
204
|
-
|
205
|
+
lambda {
|
206
|
+
retrieved_device = tpclient.get_device(@username, new_device['id'])
|
207
|
+
}.should raise_exception(/Device cannot be found/)
|
205
208
|
end
|
206
209
|
|
207
210
|
end
|
@@ -307,11 +310,13 @@ describe "Touchpass Client" do
|
|
307
310
|
|
308
311
|
# We should *not* be able to canel or reject this verification
|
309
312
|
# since it's already been validated.
|
310
|
-
|
311
|
-
|
313
|
+
lambda {
|
314
|
+
response = @vp_client.cancel_verification(verification['id'], @new_device['id'])
|
315
|
+
}.should raise_exception(/has already been responded/)
|
312
316
|
|
313
|
-
|
314
|
-
|
317
|
+
lambda {
|
318
|
+
response = @vp_client.reject_verification(verification['id'], @new_device['id'])
|
319
|
+
}.should raise_exception(/has already been responded/)
|
315
320
|
end
|
316
321
|
end
|
317
322
|
|