vchain_client 1.0.28 → 1.0.29

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c98b88bea6b4a5dc8db9b6efb9c6b74fcabf3ee
4
- data.tar.gz: a93f3af8542151ba9a562980f312a7ed9a000a1b
3
+ metadata.gz: e1f4807b48a4f9413739fa4e70e8893a2983c735
4
+ data.tar.gz: d1c9938626a2eee59176a25805b8c347d14d3024
5
5
  SHA512:
6
- metadata.gz: 04ab0083dab3c2f3eaa16c8ae3064902d000d50105429f2c69665ad5addb79880f0e69c72dde3c9e362c2bcb8c7f35cecdf5289dac99662cdb041fe99e9730e7
7
- data.tar.gz: da8febf81dd61908d400830f1c9a7a818cd84a4591b6d3749a4eee1f7cfd1e4f08aec5c0bb9d5706c2738df32577528f68cbaba99bcee2043c92b31c3915921b
6
+ metadata.gz: d88b075784a56721ee059dd5dd6f326e61088d82bf8e34e41cdf4f9b3a4d4f082625066b29b1725faa34f28d7eada236fb5ebd32dd71edb2c0627b04cabb1480
7
+ data.tar.gz: 883ae1b950241dc09852446011119a43111a937185194efacb0c38a9c703dd3e4a4f1f2170005d7186e1e5416c29a33f7c8ad55c6988d37cde1c38a364dcb2d1
data/lib/vchain_client.rb CHANGED
@@ -26,7 +26,7 @@ module VChainClient
26
26
 
27
27
  DATA_POINT_VERSION = "1"
28
28
 
29
- CLIENT_LIB_VERSION = "1.0.26"
29
+ CLIENT_LIB_VERSION = "1.0.29"
30
30
 
31
31
  @config = nil
32
32
  @log = nil
@@ -138,13 +138,25 @@ module VChainClient
138
138
  def self.get_similar_credential_sets(type)
139
139
  if type == FIELD_TYPE_TRAVEL_DOCUMENT_HASHED
140
140
  output = []
141
+ # given_names
141
142
  output.push(["type", "number", "surname", "birthdate"])
143
+ # surname
142
144
  output.push(["type", "number", "given_names", "birthdate"])
145
+ # number
143
146
  output.push(["type", "given_names", "surname", "birthdate"])
147
+ # birthdate
144
148
  output.push(["type", "number", "given_names", "surname"])
149
+ # given_names + number
150
+ output.push(["type", "surname", "birthdate"])
151
+ # surname + number
152
+ output.push(["type", "given_names", "birthdate"])
153
+ # given_names + birthdate
145
154
  output.push(["type", "number", "surname"])
155
+ # surname + birthdate
146
156
  output.push(["type", "number", "given_names"])
157
+ # given_names + surname
147
158
  output.push(["type", "number", "birthdate"])
159
+
148
160
  return output
149
161
 
150
162
  elsif type == FIELD_TYPE_TEST_DOCUMENT_HASHED
@@ -961,6 +973,21 @@ module VChainClient
961
973
 
962
974
  data_points.each { |data_point|
963
975
 
976
+ if @config.key?("do_not_check") && @config["do_not_check"] == true
977
+
978
+ if !output.key?(data_point["doc_hash"])
979
+ output[data_point["doc_hash"]] = {}
980
+ end
981
+ if !output[data_point["doc_hash"]].key?(data_point["field_hash"])
982
+ output[data_point["doc_hash"]][data_point["field_hash"]] = 0
983
+ end
984
+
985
+ # add weight coming from the data_point
986
+ output[data_point["doc_hash"]][data_point["field_hash"]] += (1 * data_point["weight"].to_f)
987
+
988
+ next
989
+ end
990
+
964
991
  if !data_point.key?("blockchain_reciepts")
965
992
  if @log.error?
966
993
  @log.error("[check] not a valid data point - no blockchain_reciepts key")
@@ -303,90 +303,113 @@ module VChainClient
303
303
  total_response_weight += vector_weight
304
304
  }
305
305
 
306
+ diff_variants = []
307
+
306
308
  vectors.each { |vector|
307
309
 
308
310
  vector_weight = self.get_vector_weight(vector, sent_type_credentials_fields)
309
311
  vector_probability = (vector_weight / total_response_weight) * 100
310
312
 
311
- if vector_probability > PROBABILITY_THRESHOLD
312
-
313
- compare_document = sent_document.clone
314
- compare_document.delete("names")
313
+ compare_document = sent_document.clone
315
314
 
316
- # let's compare found vector with sent_document
317
- diff_fields = []
318
- validated = {}
315
+ sent_names = compare_document["names"].clone
319
316
 
320
- # flip vector
321
- vector_fliped = {}
322
-
323
- vector.each { |hashed_vector_field, vector_values|
324
- if hashed_vector_field != "names_parts"
325
- vector_fliped[vector_values[1]] = vector_values[2]
326
- end
327
- }
317
+ compare_document.delete("names")
328
318
 
329
- # all fields except of names
330
- compare_document.each { |compare_field, compared_value_hashed|
331
-
332
- compare_field_hashed = Digest::SHA512.hexdigest(compare_field)
319
+ # let's compare found vector with sent_document
320
+ diff_fields = []
321
+ validated = {}
333
322
 
334
- if vector.key?(compare_field_hashed)
335
-
336
- vector_values = vector[compare_field_hashed]
323
+ # flip vector
324
+ vector_fliped = {}
337
325
 
338
- if sent_document[vector_values[1]] != vector_values[0]
339
-
340
- diff_fields.push(compare_field)
341
-
342
- else
326
+ vector.each { |hashed_vector_field, vector_values|
327
+ if hashed_vector_field != "names_parts"
328
+ vector_fliped[vector_values[1]] = vector_values[2]
329
+ end
330
+ }
343
331
 
344
- validated[compare_field] = {
345
- "validations_weight" => vector_values[2]
346
- }
332
+ # all fields except of names
333
+ compare_document.each { |compare_field, compared_value_hashed|
334
+
335
+ compare_field_hashed = Digest::SHA512.hexdigest(compare_field)
347
336
 
348
- end
337
+ if vector.key?(compare_field_hashed)
338
+
339
+ vector_values = vector[compare_field_hashed]
349
340
 
341
+ if sent_document[vector_values[1]] != vector_values[0]
342
+
343
+ diff_fields.push(compare_field)
344
+
350
345
  else
351
346
 
352
347
  validated[compare_field] = {
353
- "validations_weight" => 0
348
+ "validations_weight" => vector_values[2]
354
349
  }
355
350
 
356
351
  end
357
- }
358
352
 
359
- # names
360
-
361
- if vector.key?("names_parts")
362
- if vector["names_parts"].key?("surname")
353
+ else
363
354
 
364
- validated["surname"] = {
365
- "vector_values" => vector["names_parts"]["surname"],
366
- "validations_weight" => vector_fliped["surname"]
367
- }
368
-
369
- else
370
- diff_fields.push("surname")
371
- end
355
+ validated[compare_field] = {
356
+ "validations_weight" => 0
357
+ }
358
+
359
+ end
360
+ }
361
+
362
+ # names
363
+
364
+ surname_matched = false
365
+ given_names_matched = false
366
+
367
+ if vector.key?("names_parts")
368
+ if vector["names_parts"].key?("surname")
369
+
370
+ validated["surname"] = {
371
+ "vector_values" => vector["names_parts"]["surname"],
372
+ "validations_weight" => vector_fliped["surname"]
373
+ }
374
+
375
+ surname_matched = true
376
+
372
377
  else
373
378
  diff_fields.push("surname")
374
379
  end
380
+ else
381
+ diff_fields.push("surname")
382
+ end
375
383
 
376
- if vector.key?("names_parts")
377
- if vector["names_parts"].key?("given_names")
384
+ if vector.key?("names_parts")
385
+ if vector["names_parts"].key?("given_names")
378
386
 
379
- validated["given_names"] = {
380
- "vector_values" => vector["names_parts"]["given_names"],
381
- "validations_weight" => vector_fliped["given_names"]
382
- }
383
-
384
- else
385
- diff_fields.push("given_names")
386
- end
387
+ validated["given_names"] = {
388
+ "vector_values" => vector["names_parts"]["given_names"],
389
+ "validations_weight" => vector_fliped["given_names"]
390
+ }
391
+
392
+ given_names_matched = true
393
+
387
394
  else
388
395
  diff_fields.push("given_names")
389
396
  end
397
+ else
398
+ diff_fields.push("given_names")
399
+ end
400
+
401
+ if surname_matched && given_names_matched
402
+ diff = sent_names - vector["names_parts"]["surname"] - vector["names_parts"]["given_names"]
403
+
404
+ if diff.length > 0
405
+ diff_fields.push("surname")
406
+ diff_fields.push("given_names")
407
+ end
408
+ end
409
+
410
+ if vector_probability > PROBABILITY_THRESHOLD
411
+
412
+ ## COULD MAKE A DECISION
390
413
 
391
414
  if diff_fields.length == 0
392
415
  return {
@@ -402,74 +425,41 @@ module VChainClient
402
425
  "possible_mistakes" => diff_fields,
403
426
  "validations" => validated
404
427
  }
405
-
406
428
  end
407
- }
408
-
409
- # prepare for output
410
-
411
- vectors_fliped = []
412
-
413
- for i in 0..(vectors.length - 1)
414
-
415
- vector_fliped = {}
416
429
 
417
- vectors[i].each { |hashed_vector_field, vector_values|
430
+ diff_variants.push(diff_fields)
431
+ }
418
432
 
419
- if hashed_vector_field != "names_parts"
420
- val = "same"
421
- if sent_document[vector_values[1]] != vector_values[0]
422
- val = "different"
423
- end
424
- vector_fliped[vector_values[1]] = [val, vector_values[2]]
425
- else
426
- vector_fliped[hashed_vector_field] = vector_values
427
- end
428
- }
433
+ ## ANALYSE DIFF_VARIANTS
434
+ all_the_same = true
429
435
 
430
- vector_raw_surname = ""
431
- if vector_fliped.key?("names_parts")
432
- if vector_fliped["names_parts"].key?("surname")
433
- sep = ""
434
- vector_fliped["names_parts"]["surname"].each { |surname_part|
435
- vector_raw_surname += sep + surname_part
436
- sep = " "
437
- }
438
- else
439
- vector_raw_surname = "different"
440
- end
441
- else
442
- vector_raw_surname = "different"
443
- end
436
+ prev_diff_fields = nil
444
437
 
445
- vector_raw_given_names = ""
446
- if vector_fliped.key?("names_parts")
447
- if vector_fliped["names_parts"].key?("given_names")
448
- sep = ""
449
- vector_fliped["names_parts"]["given_names"].each { |given_names_part|
450
- vector_raw_given_names += sep + given_names_part
451
- sep = " "
452
- }
453
- else
454
- vector_raw_given_names = "different"
438
+ diff_variants.each { |diff_fields|
439
+ if prev_diff_fields != nil
440
+ if prev_diff_fields.uniq.sort != diff_fields.uniq.sort
441
+ all_the_same = false
442
+ break
455
443
  end
456
- else
457
- vector_raw_given_names = "different"
458
444
  end
459
445
 
460
- vector_fliped["surname"] = [vector_raw_surname, vector_fliped["surname"][1]]
461
- vector_fliped["given_names"] = [vector_raw_given_names, vector_fliped["given_names"][1]]
462
-
463
- vector_fliped.delete("names_parts")
464
-
465
- vectors_fliped.push(vector_fliped)
446
+ prev_diff_fields = diff_fields
447
+ }
466
448
 
449
+ if all_the_same
450
+ return {
451
+ "decision_made" => true,
452
+ "decision" => "POSSIBLE_MISTAKES",
453
+ "possible_mistakes" => prev_diff_fields
454
+ }
467
455
  end
468
456
 
469
457
  return {
470
- "decision_made" => false,
471
- "vectors" => vectors_fliped
458
+ "decision_made" => true,
459
+ "decision" => "POSSIBLE_MISTAKES",
460
+ "possible_mistakes" => diff_variants
472
461
  }
462
+
473
463
  end
474
464
 
475
465
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vchain_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.28
4
+ version: 1.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksandr Gorelik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-22 00:00:00.000000000 Z
11
+ date: 2017-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: log4r