ikarus 0.0.1 → 1.0.0

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: f44869f131a6981f7f74ccc2f7f93da7d517e51a
4
- data.tar.gz: 8f7a211c922d6915e68ca5d80312503c340e60fc
3
+ metadata.gz: 7727f4ef9c4d510424246213af313ee1f4fb2fd3
4
+ data.tar.gz: 00bd730f39b0cb7d59b8c47865a598ede68301b0
5
5
  SHA512:
6
- metadata.gz: f69df9443afe2f489df6365239494847ecde0030ddce10ca3d5cb654806069f88fdc2021725544e1993fb32b7ac4623a6e10c11199a0cf974267e1a33dcee4b1
7
- data.tar.gz: 4c28765c4aa4051a4f0f1392751ad63f19ff8acc5c10ffcef1a9a7db3db8857eb21dc778b60d80f878250c1633741689179f533dbf7edf24bf1795273be14d3e
6
+ metadata.gz: bea5e80a05bbcad6ea05cf494a0a5e458d6f282ab0d9f3d7a37a9630a222a82e9efb6931a9fea6211aa6bab7e3807491fd9808dfaba10d9228216c4765d921c6
7
+ data.tar.gz: 798ce5b21d1f53e587b7852ceb99c638489e94f7ee3abf9af55e4adf5ec6e97ac6629c56a6b68f36816108a561908da149304c0b6b278f36c144c10ba00af2f3
@@ -0,0 +1,38 @@
1
+ require 'cgi'
2
+ require 'openssl'
3
+ require 'base64'
4
+
5
+ class Ikarus::Crypt
6
+
7
+ def initialize(token)
8
+ @key256 = token
9
+ end
10
+
11
+ def encrypt(message, url_encode = true)
12
+ cipher = OpenSSL::Cipher.new('aes-128-cbc')
13
+ cipher.encrypt()
14
+ iv = cipher.random_iv
15
+
16
+ cipher = OpenSSL::Cipher.new('aes-256-cbc')
17
+ cipher.encrypt
18
+ cipher.key = @key256
19
+ cipher.iv = iv
20
+ crypt = cipher.update(message)
21
+ crypt << cipher.final
22
+
23
+ encrypted = [Base64.encode64(crypt).strip(), Base64.encode64(iv).strip()].join('|').gsub("\n", '')
24
+ url_encode ? CGI.escape(encrypted) : encrypted
25
+ end
26
+
27
+ def decrypt(encrypted_message)
28
+ tokens = encrypted_message.split('|')
29
+ crypt = Base64.decode64(tokens[0])
30
+ iv = Base64.decode64(tokens[1])
31
+ cipher = OpenSSL::Cipher.new('aes-256-cbc')
32
+ cipher.decrypt()
33
+ cipher.key = @key256
34
+ cipher.iv = iv
35
+ cipher.update(encrypted_message) + cipher.final
36
+ end
37
+
38
+ end
data/lib/ikarus.rb CHANGED
@@ -1,7 +1,86 @@
1
+ require 'rest-client'
2
+ require 'date'
3
+
1
4
  class Ikarus
2
5
 
3
- def self.search
4
- puts 'Buscando...'
6
+ def initialize(username, password, crypt_token, sm)
7
+ @username = username
8
+ @password = password
9
+ @crypt_token = crypt_token
10
+ @sm = sm
11
+ @resolver_url = 'http://newikarusresolver.islogic.com.br'
12
+ # @resolver_url = 'http://localhost:8001'
13
+ end
14
+
15
+ def get_search_urls(search_params, programs_to_search, return_type = 'group_by_trip')
16
+ set_resolver_url_query_string(search_params, programs_to_search, return_type);
17
+ return self.class.do_get_request(@resolver_url);
18
+ end
19
+
20
+ def self.get_result(url)
21
+ result = self.do_get_request(url)
22
+ status = result['status']
23
+ while status != 'done'
24
+ # puts "Status é #{status}, tentando novamente..."
25
+ sleep 1
26
+ result = self.do_get_request(url)
27
+ status = result['status']
28
+ end
29
+ return result['flights']
5
30
  end
6
31
 
32
+
33
+ private
34
+
35
+ def set_resolver_url_query_string(search_params, programs_to_search, return_type)
36
+ data = prepare_data(search_params, programs_to_search)
37
+ encrypted_data = encrypt_search_data(data)
38
+ @resolver_url += "?sm=#{@sm}&return_type=#{return_type}&search=#{encrypted_data}"
39
+ end
40
+
41
+ def prepare_data(search_params, programs_to_search)
42
+ search_params.symbolize_keys!
43
+ data = [ search_params[:tipo],
44
+ search_params[:origem],
45
+ search_params[:destino],
46
+ # date2timestamp(search_params[:data_ida]),
47
+ # date2timestamp(search_params[:data_volta]),
48
+ search_params[:data_ida],
49
+ search_params[:data_volta],
50
+ search_params[:adultos],
51
+ search_params[:criancas],
52
+ search_params[:bebes],
53
+ search_params[:cabine],
54
+ @username,
55
+ @password ]
56
+
57
+ programs_to_search.each do |program, type|
58
+ data << "#{program}:#{type}"
59
+ end
60
+
61
+ return data.join(';')
62
+ end
63
+
64
+ def encrypt_search_data(search_data)
65
+ crypt = Ikarus::Crypt.new(@crypt_token);
66
+ return crypt.encrypt(search_data);
67
+ end
68
+
69
+
70
+ # Helpers
71
+ def self.do_get_request(url, decode_json = true)
72
+ response = RestClient.get(url)
73
+ decode_json ? JSON.parse(response) : result
74
+ rescue => e
75
+ decode_json ? JSON.parse(e.response) : e.response
76
+ end
77
+
78
+ # `date` deve estar no formato yyyy-mm-dd
79
+ def date2timestamp(date)
80
+ Date.parse(date).to_time.to_i
81
+ end
82
+
7
83
  end
84
+
85
+ require 'ikarus/crypt'
86
+ require 'utils/hash'
data/lib/utils/hash.rb ADDED
@@ -0,0 +1,10 @@
1
+ class Hash
2
+
3
+ def symbolize_keys!
4
+ keys.each do |key|
5
+ self[key.to_sym] = delete(key)
6
+ end
7
+ self
8
+ end
9
+
10
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ikarus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pedro Pires
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-29 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2015-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
13
27
  description: Biblioteca ruby para integração com o buscador de voos Ikarus
14
28
  email: ikaruswebservice@gmail.com
15
29
  executables: []
@@ -17,6 +31,8 @@ extensions: []
17
31
  extra_rdoc_files: []
18
32
  files:
19
33
  - lib/ikarus.rb
34
+ - lib/ikarus/crypt.rb
35
+ - lib/utils/hash.rb
20
36
  homepage: http://ikarus.islogic.com.br/
21
37
  licenses:
22
38
  - MIT