Class: GtRubySdk::LocalServer
- Inherits:
-
Object
- Object
- GtRubySdk::LocalServer
- Defined in:
- lib/gt_ruby_sdk/local_server.rb
Constant Summary collapse
- TOLERANCE =
4
Class Method Summary collapse
-
.decode(challenge, code_fragment) ⇒ Object
解码随机参数.
-
.decode_offset(number) ⇒ Object
输入的两位的随机数字,解码出偏移量.
- .register ⇒ Object
- .validate(challenge, pin_code, _seccode) ⇒ Object
- .validate_image(ans, bg_image_index, image_grp_index) ⇒ Object
Class Method Details
.decode(challenge, code_fragment) ⇒ Object
解码随机参数
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/gt_ruby_sdk/local_server.rb', line 50 def decode(challenge, code_fragment) return 0 if code_fragment.length > 100 hash = {} duplicated_array = [] numbers = [1, 2, 5, 10, 50] count = 0 challenge.chars.each do |item| next if duplicated_array.include?(item) value = numbers[count % 5] duplicated_array.push(item) count += 1 hash[item] = value end offset = decode_offset(challenge[32..33]) code_fragment.chars.inject(0) { |_acc, elem| +hash[elem] } - offset end |
.decode_offset(number) ⇒ Object
输入的两位的随机数字,解码出偏移量
73 74 75 76 77 78 79 80 81 |
# File 'lib/gt_ruby_sdk/local_server.rb', line 73 def decode_offset(number) number = number[0..1] array = number.codepoints.to_a.map do |codepoint| codepoint > 57 ? (codepoint - 87) : (codepoint - 48) end array[0] * 36 + array[1] end |
.register ⇒ Object
8 9 10 11 12 13 14 15 16 |
# File 'lib/gt_ruby_sdk/local_server.rb', line 8 def register rnd1 = Digest::MD5.hexdigest(Random.rand(100).to_s) rnd2 = Digest::MD5.hexdigest(Random.rand(100).to_s) [ rnd1, rnd2.to_s[0..1] ].join end |
.validate(challenge, pin_code, _seccode) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/gt_ruby_sdk/local_server.rb', line 18 def validate(challenge, pin_code, _seccode) return false if pin_code.blank? code_fragments = pin_code.split('_') ans = decode(challenge, code_fragments[0]) bg_image_index = decode(challenge, code_fragments[1]) image_grp_index = decode(challenge, code_fragments[2]) validate_image(ans, bg_image_index, image_grp_index) end |
.validate_image(ans, bg_image_index, image_grp_index) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/gt_ruby_sdk/local_server.rb', line 30 def validate_image(ans, bg_image_index, image_grp_index) full_bg_name = Digest::MD5.hexdigest(bg_image_index.to_s)[0..8] bg_name = Digest::MD5.hexdigest(image_grp_index.to_s)[10..18] array = 9.times.inject([]) do |collector, i| collector.push( i.odd? ? bg_name[i] : full_bg_name[i] ) end x_decode = array[4..-1].join x_int = x_decode.to_i(16) result = x_int % 200 result = result < 40 ? 40 : result (ans - result).abs < 4 end |