tigre-client 0.2.0 → 0.2.1
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 +10 -2
- data/lib/tigre-client/multipart_with_file.rb +30 -0
- data/lib/tigre-client/occurrence.rb +4 -21
- data/lib/tigre-client/sample.rb +6 -22
- data/lib/tigre-client/url.rb +26 -39
- data/lib/tigre-client/version.rb +1 -1
- data/lib/tigre-client.rb +67 -1
- data/tigre-client.gemspec +2 -0
- metadata +13 -1
data/Gemfile.lock
CHANGED
@@ -1,14 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tigre-client (0.1.
|
4
|
+
tigre-client (0.1.2)
|
5
5
|
curb (~> 0.7.12)
|
6
|
+
faraday (~> 0.6.0)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
9
10
|
specs:
|
10
|
-
|
11
|
+
addressable (2.2.4)
|
12
|
+
curb (0.7.15)
|
11
13
|
diff-lcs (1.1.2)
|
14
|
+
faraday (0.6.0)
|
15
|
+
addressable (~> 2.2.4)
|
16
|
+
multipart-post (~> 1.1.0)
|
17
|
+
rack (< 2, >= 1.1.0)
|
18
|
+
multipart-post (1.1.0)
|
19
|
+
rack (1.2.2)
|
12
20
|
rspec (2.5.0)
|
13
21
|
rspec-core (~> 2.5.0)
|
14
22
|
rspec-expectations (~> 2.5.0)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module Faraday
|
4
|
+
# @private
|
5
|
+
class Request::MultipartWithFile < Faraday::Middleware
|
6
|
+
def call(env)
|
7
|
+
if env[:body].is_a?(Hash)
|
8
|
+
|
9
|
+
env[:body].each do |key, value|
|
10
|
+
if value.is_a?(File)
|
11
|
+
env[:body][key] = Faraday::UploadIO.new(value, mime_type(value), value.path)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
@app.call(env)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def mime_type(file)
|
22
|
+
case file.path
|
23
|
+
when /\.jpe?g/i then 'image/jpeg'
|
24
|
+
when /\.gif$/i then 'image/gif'
|
25
|
+
when /\.png$/i then 'image/png'
|
26
|
+
else 'application/octet-stream'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -5,17 +5,8 @@ module Tigre
|
|
5
5
|
# required params
|
6
6
|
# sha256 - String
|
7
7
|
def self.for_sha(sha256)
|
8
|
-
|
9
|
-
|
10
|
-
raise ArguementError, "Missing sha256 parameter"
|
11
|
-
end
|
12
|
-
|
13
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls/#{sha256}/occurrences")
|
14
|
-
c.multipart_form_post = false
|
15
|
-
c.headers["API-TOKEN"] = Tigre.token
|
16
|
-
|
17
|
-
c.perform
|
18
|
-
return [c.response_code, c.body_str]
|
8
|
+
raise ArguementError, "Missing sha256 parameter" if sha256 == ''
|
9
|
+
Tigre.get_connection("/urls/#{sha256}/occurrences")
|
19
10
|
end
|
20
11
|
|
21
12
|
# return an individual occurrence for a given sha256 URL
|
@@ -23,16 +14,8 @@ module Tigre
|
|
23
14
|
# sha256 - String
|
24
15
|
# occurrence_id - String
|
25
16
|
def self.get(sha256, occurrence_id)
|
26
|
-
if sha256 == '' || occurrence_id == ''
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls/#{sha256}/occurrences/#{occurrence_id}")
|
31
|
-
c.multipart_form_post = false
|
32
|
-
c.headers["API-TOKEN"] = Tigre.token
|
33
|
-
|
34
|
-
c.perform
|
35
|
-
return [c.response_code, c.body_str]
|
17
|
+
raise ArguementError, "Missing sha256 or occurrence_id parameter" if (sha256 == '' || occurrence_id == '')
|
18
|
+
Tigre.get_connection("/urls/#{sha256}/occurrences/#{occurrence_id}")
|
36
19
|
end
|
37
20
|
|
38
21
|
end
|
data/lib/tigre-client/sample.rb
CHANGED
@@ -12,43 +12,27 @@ module Tigre
|
|
12
12
|
raise ArguementError, "File_location or md5 parameter cannot be empty"
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
c.headers["API-TOKEN"] = Tigre.token
|
18
|
-
|
19
|
-
post_data = options.map {|k, v| Curl::PostField.content(k, v.to_s)}
|
20
|
-
post_data << Curl::PostField.file("file", file_location)
|
21
|
-
post_data << Curl::PostField.content("md5", md5)
|
22
|
-
|
23
|
-
c.http_post(*post_data)
|
24
|
-
return [c.response_code, c.body_str]
|
15
|
+
post_data = {:file => File.new(file_location), :md5 => md5}
|
16
|
+
Tigre.post_file_connection('/samples', post_data.merge(options))
|
25
17
|
end
|
26
18
|
|
27
19
|
# required params
|
28
20
|
# md5 - String
|
29
21
|
def self.md5(md5)
|
30
|
-
|
31
|
-
c.headers["API-TOKEN"] = Tigre.token
|
32
|
-
c.perform
|
33
|
-
return [c.response_code, c.body_str]
|
22
|
+
Tigre.get_connection("/samples/md5/#{md5}")
|
34
23
|
end
|
35
24
|
|
36
25
|
# required params
|
37
26
|
# sha1 - String
|
38
27
|
def self.sha1(sha1)
|
39
|
-
|
40
|
-
c.headers["API-TOKEN"] = Tigre.token
|
41
|
-
c.perform
|
42
|
-
return [c.response_code, c.body_str]
|
28
|
+
Tigre.get_connection("/samples/sha1/#{sha1}")
|
43
29
|
end
|
44
30
|
|
45
31
|
# required params
|
46
32
|
# sha256 - String
|
47
33
|
def self.sha256(sha256)
|
48
|
-
|
49
|
-
c.headers["API-TOKEN"] = Tigre.token
|
50
|
-
c.perform
|
51
|
-
return [c.response_code, c.body_str]
|
34
|
+
Tigre.get_connection("/samples/sha256/#{sha256}")
|
52
35
|
end
|
36
|
+
|
53
37
|
end
|
54
38
|
end
|
data/lib/tigre-client/url.rb
CHANGED
@@ -9,30 +9,34 @@ module Tigre
|
|
9
9
|
# options - Hash
|
10
10
|
# :shareable - Boolean, :default => false
|
11
11
|
def self.post(url, options={})
|
12
|
-
|
13
12
|
if url == ''
|
14
13
|
raise ArguementError, "Missing url parameter"
|
15
14
|
end
|
16
|
-
|
17
15
|
unless options[:source_name]
|
18
16
|
raise ArguementError, "Missing source_name parameter"
|
19
17
|
end
|
20
18
|
|
21
19
|
# prepare post data
|
22
|
-
|
20
|
+
post_data = {
|
23
21
|
"url[original_url]" => url,
|
24
22
|
"url[source_name]" => options[:source_name],
|
25
23
|
"url[shareable]" => options[:shareable]
|
26
24
|
}
|
27
|
-
|
28
|
-
|
29
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls")
|
30
|
-
c.multipart_form_post = false
|
31
|
-
c.headers["API-TOKEN"] = Tigre.token
|
25
|
+
Tigre.post_connection('/urls', post_data)
|
26
|
+
end
|
32
27
|
|
33
|
-
|
28
|
+
# required
|
29
|
+
# sha256 - String
|
30
|
+
# options - Hash
|
31
|
+
# :source_name - String
|
32
|
+
def self.update(sha256, params_hash)
|
33
|
+
if sha256 == ''
|
34
|
+
raise ArguementError, "Missing url parameter"
|
35
|
+
end
|
34
36
|
|
35
|
-
|
37
|
+
update_data = params_hash.map { |k, v| {"url[#{k.to_s}]" => v.to_s} }
|
38
|
+
|
39
|
+
Tigre.put_connection("/urls/#{sha256}", update_data )
|
36
40
|
end
|
37
41
|
|
38
42
|
# required params
|
@@ -41,36 +45,28 @@ module Tigre
|
|
41
45
|
if sha256 == ''
|
42
46
|
raise ArguementError, "Missing sha256 parameter"
|
43
47
|
end
|
44
|
-
|
45
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls/#{sha256}")
|
46
|
-
c.headers["API-TOKEN"] = Tigre.token
|
47
|
-
c.perform
|
48
|
-
return [c.response_code, c.body_str]
|
48
|
+
Tigre.get_connection("/urls/#{sha256}")
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
# required params
|
52
52
|
# sha256 - String
|
53
53
|
def self.get_md5(md5)
|
54
54
|
if md5 == ''
|
55
55
|
raise ArguementError, "Missing md5 parameter"
|
56
56
|
end
|
57
|
-
|
58
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls/md5/#{md5}")
|
59
|
-
c.headers["API-TOKEN"] = Tigre.token
|
60
|
-
c.perform
|
61
|
-
return [c.response_code, c.body_str]
|
57
|
+
Tigre.get_connection("/urls/md5/#{md5}")
|
62
58
|
end
|
63
|
-
|
59
|
+
|
60
|
+
# optional params
|
61
|
+
# options - Hash
|
62
|
+
# :page - Integer, :default => 0
|
63
|
+
# :per - Integer, :default => 50
|
64
64
|
def self.index(options={})
|
65
65
|
options[:page] ||= 0
|
66
66
|
options[:per] ||= 50
|
67
|
-
|
68
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls?page=#{options[:page]}&per=#{options[:per]}")
|
69
|
-
c.headers["API-TOKEN"] = Tigre.token
|
70
|
-
c.perform
|
71
|
-
return [c.response_code, c.body_str]
|
67
|
+
Tigre.get_connection("/urls?page=#{options[:page]}&per=#{options[:per]}")
|
72
68
|
end
|
73
|
-
|
69
|
+
|
74
70
|
# required params
|
75
71
|
# options - Hash
|
76
72
|
# :after => Ruby DateTime object OR Integer (epoch time)
|
@@ -89,11 +85,7 @@ module Tigre
|
|
89
85
|
|
90
86
|
options[:page] ||= 0
|
91
87
|
options[:per] ||= 50
|
92
|
-
|
93
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls/daterange?after=#{options[:after]}&before=#{options[:before]}&page=#{options[:page]}&per=#{options[:per]}")
|
94
|
-
c.headers["API-TOKEN"] = Tigre.token
|
95
|
-
c.perform
|
96
|
-
return [c.response_code, c.body_str]
|
88
|
+
Tigre.get_connection("/urls/daterange?after=#{options[:after]}&before=#{options[:before]}&page=#{options[:page]}&per=#{options[:per]}")
|
97
89
|
end
|
98
90
|
|
99
91
|
# required params
|
@@ -116,13 +108,8 @@ module Tigre
|
|
116
108
|
|
117
109
|
options[:page] ||= 0
|
118
110
|
options[:per] ||= 50
|
119
|
-
|
120
|
-
c = Curl::Easy.new("#{Tigre.endpoint}/urls/domains?domain=#{domain}&after=#{options[:after]}&before=#{options[:before]}&page=#{options[:page]}&per=#{options[:per]}")
|
121
|
-
c.headers["API-TOKEN"] = Tigre.token
|
122
|
-
c.perform
|
123
|
-
return [c.response_code, c.body_str]
|
111
|
+
Tigre.get_connection("/urls/domains?domain=#{domain}&after=#{options[:after]}&before=#{options[:before]}&page=#{options[:page]}&per=#{options[:per]}")
|
124
112
|
end
|
125
|
-
|
126
113
|
end
|
127
114
|
|
128
115
|
end
|
data/lib/tigre-client/version.rb
CHANGED
data/lib/tigre-client.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
require 'curb'
|
2
|
+
require 'faraday'
|
3
|
+
|
4
|
+
require 'tigre-client/multipart_with_file'
|
5
|
+
|
2
6
|
require 'tigre-client/occurrence'
|
3
7
|
require 'tigre-client/sample'
|
4
8
|
require 'tigre-client/url'
|
@@ -6,12 +10,74 @@ require 'tigre-client/url'
|
|
6
10
|
module Tigre
|
7
11
|
|
8
12
|
class << self
|
9
|
-
attr_accessor :token, :endpoint
|
13
|
+
attr_accessor :token, :server, :endpoint, :conn
|
10
14
|
|
11
15
|
def configure
|
12
16
|
yield self
|
13
17
|
true
|
14
18
|
end
|
19
|
+
|
20
|
+
def build_get_connection
|
21
|
+
@conn = Faraday.new(:url => "#{Tigre.server}") do |builder|
|
22
|
+
builder.adapter :net_http
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# TODO: do we need two build_post_put ? can we just put
|
27
|
+
# the multipart in the post_put?
|
28
|
+
def build_post_put_connection
|
29
|
+
@conn = Faraday.new(:url => "#{Tigre.server}") do |builder|
|
30
|
+
# builder.request :multipart
|
31
|
+
builder.request :url_encoded
|
32
|
+
builder.adapter :net_http
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def build_file_post_put_connection
|
37
|
+
@conn = Faraday.new(:url => "#{Tigre.server}") do |builder|
|
38
|
+
builder.use Faraday::Request::MultipartWithFile
|
39
|
+
builder.use Faraday::Request::Multipart
|
40
|
+
builder.use Faraday::Request::UrlEncoded
|
41
|
+
builder.adapter :net_http
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_connection(uri_string)
|
46
|
+
build_get_connection
|
47
|
+
response = Tigre.conn.get(Tigre.endpoint + uri_string, 'API-TOKEN' => Tigre.token)
|
48
|
+
[response.status, response.body]
|
49
|
+
end
|
50
|
+
|
51
|
+
def post_connection(uri_string, data)
|
52
|
+
build_post_put_connection
|
53
|
+
response = Tigre.conn.post do |req|
|
54
|
+
req.url Tigre.endpoint + uri_string
|
55
|
+
req.headers['API-TOKEN'] = Tigre.token
|
56
|
+
req.body = data
|
57
|
+
end
|
58
|
+
[response.status, response.body]
|
59
|
+
end
|
60
|
+
|
61
|
+
def post_file_connection(uri_string, data)
|
62
|
+
build_file_post_put_connection
|
63
|
+
response = Tigre.conn.post do |req|
|
64
|
+
req.url Tigre.endpoint + uri_string
|
65
|
+
req.headers['API-TOKEN'] = Tigre.token
|
66
|
+
req.body = data
|
67
|
+
end
|
68
|
+
[response.status, response.body]
|
69
|
+
end
|
70
|
+
|
71
|
+
def put_connection(uri_string, data)
|
72
|
+
build_post_put_connection
|
73
|
+
response = Tigre.conn.put do |req|
|
74
|
+
req.url Tigre.endpoint + uri_string
|
75
|
+
req.headers['API-TOKEN'] = Tigre.token
|
76
|
+
req.body = data
|
77
|
+
end
|
78
|
+
[response.status, response.body]
|
79
|
+
end
|
80
|
+
|
15
81
|
end
|
16
82
|
|
17
83
|
end
|
data/tigre-client.gemspec
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tigre-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Marcio Castilho
|
@@ -36,6 +36,17 @@ dependencies:
|
|
36
36
|
version: 0.7.12
|
37
37
|
type: :runtime
|
38
38
|
version_requirements: *id002
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: faraday
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.6.0
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id003
|
39
50
|
description: Tigre Client API Library
|
40
51
|
email:
|
41
52
|
- marcioc@sunbelt-software.com
|
@@ -53,6 +64,7 @@ files:
|
|
53
64
|
- Gemfile.lock
|
54
65
|
- Rakefile
|
55
66
|
- lib/tigre-client.rb
|
67
|
+
- lib/tigre-client/multipart_with_file.rb
|
56
68
|
- lib/tigre-client/occurrence.rb
|
57
69
|
- lib/tigre-client/sample.rb
|
58
70
|
- lib/tigre-client/url.rb
|