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 +4 -4
- data/lib/ikarus/crypt.rb +38 -0
- data/lib/ikarus.rb +81 -2
- data/lib/utils/hash.rb +10 -0
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7727f4ef9c4d510424246213af313ee1f4fb2fd3
|
4
|
+
data.tar.gz: 00bd730f39b0cb7d59b8c47865a598ede68301b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bea5e80a05bbcad6ea05cf494a0a5e458d6f282ab0d9f3d7a37a9630a222a82e9efb6931a9fea6211aa6bab7e3807491fd9808dfaba10d9228216c4765d921c6
|
7
|
+
data.tar.gz: 798ce5b21d1f53e587b7852ceb99c638489e94f7ee3abf9af55e4adf5ec6e97ac6629c56a6b68f36816108a561908da149304c0b6b278f36c144c10ba00af2f3
|
data/lib/ikarus/crypt.rb
ADDED
@@ -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
|
4
|
-
|
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
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
|
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-
|
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
|