virustotal_api 0.1.0 → 0.5.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.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +23 -0
  3. data/.github/CODE_OF_CONDUCT.md +46 -0
  4. data/.github/CONTRIBUTING.md +7 -0
  5. data/.github/ISSUE_TEMPLATE.md +15 -0
  6. data/.github/workflows/ruby.yml +26 -0
  7. data/.gitignore +1 -0
  8. data/.rubocop.yml +17 -5
  9. data/CHANGELOG.md +34 -0
  10. data/Gemfile +1 -1
  11. data/README.md +88 -31
  12. data/Rakefile +3 -2
  13. data/lib/virustotal_api.rb +7 -6
  14. data/lib/virustotal_api/analysis.rb +24 -0
  15. data/lib/virustotal_api/base.rb +41 -3
  16. data/lib/virustotal_api/domain.rb +24 -0
  17. data/lib/virustotal_api/exceptions.rb +9 -0
  18. data/lib/virustotal_api/file.rb +56 -0
  19. data/lib/virustotal_api/ip.rb +24 -0
  20. data/lib/virustotal_api/uri.rb +4 -2
  21. data/lib/virustotal_api/url.rb +46 -0
  22. data/lib/virustotal_api/version.rb +4 -2
  23. data/test/analysis_test.rb +23 -0
  24. data/test/base_test.rb +12 -13
  25. data/test/domain_test.rb +32 -0
  26. data/test/exceptions_test.rb +23 -0
  27. data/test/file_test.rb +68 -0
  28. data/test/fixtures/analysis.yml +544 -0
  29. data/test/fixtures/domain.yml +830 -0
  30. data/test/fixtures/file_analyse.yml +52 -0
  31. data/test/fixtures/file_find.yml +1236 -0
  32. data/test/fixtures/file_unauthorized.yml +51 -0
  33. data/test/fixtures/file_upload.yml +54 -0
  34. data/test/fixtures/ip.yml +716 -0
  35. data/test/fixtures/unscanned_url_find.yml +44 -0
  36. data/test/fixtures/url_analyse.yml +52 -0
  37. data/test/fixtures/url_find.yml +599 -0
  38. data/test/{ip_report_test.rb → ip_test.rb} +6 -5
  39. data/test/test_helper.rb +2 -1
  40. data/test/uri_test.rb +3 -2
  41. data/test/url_test.rb +65 -0
  42. data/test/version_test.rb +3 -3
  43. data/virustotal_api.gemspec +16 -13
  44. metadata +113 -77
  45. data/.travis.yml +0 -11
  46. data/lib/virustotal_api/domain_report.rb +0 -35
  47. data/lib/virustotal_api/file_report.rb +0 -36
  48. data/lib/virustotal_api/file_scan.rb +0 -36
  49. data/lib/virustotal_api/ip_report.rb +0 -35
  50. data/lib/virustotal_api/url_report.rb +0 -37
  51. data/test/domain_report_test.rb +0 -31
  52. data/test/file_report_test.rb +0 -34
  53. data/test/file_scan_test.rb +0 -29
  54. data/test/fixtures/domain_report.yml +0 -311
  55. data/test/fixtures/ip_report.yml +0 -1323
  56. data/test/fixtures/report.yml +0 -110
  57. data/test/fixtures/report_not_found.yml +0 -42
  58. data/test/fixtures/request_forbidden.yml +0 -38
  59. data/test/fixtures/scan.yml +0 -49
  60. data/test/fixtures/url_report.yml +0 -95
  61. data/test/url_report_test.rb +0 -39
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require './test/test_helper'
3
4
 
4
5
  class VirustotalAPIIPReportTest < Minitest::Test
@@ -8,15 +9,15 @@ class VirustotalAPIIPReportTest < Minitest::Test
8
9
  end
9
10
 
10
11
  def test_class_exists
11
- assert VirustotalAPI::IPReport
12
+ assert VirustotalAPI::IP
12
13
  end
13
14
 
14
15
  def test_report_response
15
- VCR.use_cassette('ip_report') do
16
- vtip_report = VirustotalAPI::IPReport.find(@ip, @api_key)
16
+ VCR.use_cassette('ip') do
17
+ vtip_report = VirustotalAPI::IP.find(@ip, @api_key)
17
18
 
18
19
  # Make sure that the JSON was parsed
19
- assert vtip_report.is_a?(VirustotalAPI::IPReport)
20
+ assert vtip_report.is_a?(VirustotalAPI::IP)
20
21
  assert vtip_report.report.is_a?(Hash)
21
22
  end
22
23
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require './lib/virustotal_api'
3
4
  require 'minitest/autorun'
4
5
  require 'webmock/minitest'
@@ -1,9 +1,10 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require './test/test_helper'
3
4
 
4
5
  class VirustotalAPIVTReportTest < Minitest::Test
5
6
  def test_api_base_uri
6
7
  assert VirustotalAPI::URI.is_a?(String)
7
- assert VirustotalAPI::URI, 'https://www.virustotal.com/vtapi/v2'
8
+ assert_equal 'https://www.virustotal.com/api/v3', VirustotalAPI::URI
8
9
  end
9
10
  end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require './test/test_helper'
4
+
5
+ class VirustotalAPIURLReportTest < Minitest::Test
6
+ def setup
7
+ @unscanned_url = 'http://www.unscanned.com'
8
+ @url = 'http://www.google.com'
9
+ @api_key = 'testapikey'
10
+ end
11
+
12
+ def test_class_exists
13
+ assert VirustotalAPI::URL
14
+ end
15
+
16
+ def test_report_response
17
+ VCR.use_cassette('url_find') do
18
+ vturl_report = VirustotalAPI::URL.find(@url, @api_key)
19
+
20
+ # Make sure that the JSON was parsed
21
+ assert vturl_report.is_a?(VirustotalAPI::URL)
22
+ assert vturl_report.report.is_a?(Hash)
23
+ end
24
+ end
25
+
26
+ def test_find
27
+ VCR.use_cassette('url_find') do
28
+ vturl_report = VirustotalAPI::URL.find(@url, @api_key)
29
+
30
+ assert vturl_report.report_url.is_a?(String)
31
+ end
32
+ end
33
+
34
+ def test_scan_url
35
+ VCR.use_cassette('url_find') do
36
+ vturl_report = VirustotalAPI::URL.find(@url, @api_key)
37
+
38
+ assert vturl_report.id.is_a?(String)
39
+ end
40
+ end
41
+
42
+ def test_scan_unscanned_url
43
+ VCR.use_cassette('unscanned_url_find') do
44
+ vturl_report = VirustotalAPI::URL.find(@unscanned_url, @api_key)
45
+
46
+ assert_nil vturl_report.report
47
+ end
48
+ end
49
+
50
+ def test_analyse
51
+ VCR.use_cassette('url_analyse') do
52
+ vturl_scan = VirustotalAPI::URL.analyse(@url, @api_key)
53
+
54
+ assert vturl_scan.report.is_a?(Hash)
55
+ end
56
+ end
57
+
58
+ def test_analyse_id
59
+ VCR.use_cassette('url_analyse') do
60
+ vturl_scan = VirustotalAPI::URL.analyse(@url, @api_key)
61
+
62
+ assert vturl_scan.id.is_a?(String)
63
+ end
64
+ end
65
+ end
@@ -1,9 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require './test/test_helper'
3
4
 
4
- class VirustotalAPIVTReportTest < Minitest::Test
5
+ class VirustotalAPIVersionTest < Minitest::Test
5
6
  def test_version
6
7
  assert VirustotalAPI::VERSION.is_a?(String)
7
- assert VirustotalAPI::VERSION, '0.1.0'
8
8
  end
9
9
  end
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'virustotal_api/version'
5
6
 
@@ -9,24 +10,26 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['pwelch']
10
11
  spec.email = ['paul@pwelch.net']
11
12
  spec.summary = 'Gem for VirusTotal.com API'
12
- spec.description = 'Gem for VirusTotal.com API'
13
+ spec.description = 'Gem for VirusTotal.com API, supporting API V3'
13
14
  spec.homepage = 'https://github.com/pwelch/virustotal_api'
14
15
  spec.license = 'MIT'
15
16
 
17
+ spec.required_ruby_version = '>= 2.6'
18
+
16
19
  spec.files = `git ls-files -z`.split("\x0")
17
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
22
  spec.require_paths = ['lib']
20
23
 
21
- spec.add_dependency 'rest-client'
22
- spec.add_dependency 'json'
24
+ spec.add_dependency 'json', '~> 2.3', '>= 2.3.1'
25
+ spec.add_dependency 'rest-client', '~> 2.1', '>= 2.1.0'
23
26
 
24
- spec.add_development_dependency 'bundler', '~> 1.7'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'minitest'
27
- spec.add_development_dependency 'vcr'
28
- spec.add_development_dependency 'webmock'
29
- spec.add_development_dependency 'pry'
30
- spec.add_development_dependency 'yard', '~> 0.8'
31
- spec.add_development_dependency 'rubocop'
27
+ spec.add_development_dependency 'bundler', '~> 2.0'
28
+ spec.add_development_dependency 'minitest', '~> 5.14', '>= 5.14.1'
29
+ spec.add_development_dependency 'pry', '~> 0.13.1'
30
+ spec.add_development_dependency 'rake', '~> 12.3'
31
+ spec.add_development_dependency 'rubocop', '~> 0.91'
32
+ spec.add_development_dependency 'vcr', '~> 6.0', '>= 6.0.0'
33
+ spec.add_development_dependency 'webmock', '~> 3.9'
34
+ spec.add_development_dependency 'yard', '~> 0.9'
32
35
  end
metadata CHANGED
@@ -1,201 +1,235 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virustotal_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pwelch
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-26 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rest-client
14
+ name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: '0'
22
+ version: 2.3.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.3'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: '0'
32
+ version: 2.3.1
27
33
  - !ruby/object:Gem::Dependency
28
- name: json
34
+ name: rest-client
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '0'
39
+ version: 2.1.0
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.1'
34
43
  type: :runtime
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
47
  - - ">="
39
48
  - !ruby/object:Gem::Version
40
- version: '0'
49
+ version: 2.1.0
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.1'
41
53
  - !ruby/object:Gem::Dependency
42
54
  name: bundler
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
45
57
  - - "~>"
46
58
  - !ruby/object:Gem::Version
47
- version: '1.7'
59
+ version: '2.0'
48
60
  type: :development
49
61
  prerelease: false
50
62
  version_requirements: !ruby/object:Gem::Requirement
51
63
  requirements:
52
64
  - - "~>"
53
65
  - !ruby/object:Gem::Version
54
- version: '1.7'
66
+ version: '2.0'
55
67
  - !ruby/object:Gem::Dependency
56
- name: rake
68
+ name: minitest
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
71
  - - "~>"
60
72
  - !ruby/object:Gem::Version
61
- version: '10.0'
73
+ version: '5.14'
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 5.14.1
62
77
  type: :development
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
66
81
  - - "~>"
67
82
  - !ruby/object:Gem::Version
68
- version: '10.0'
83
+ version: '5.14'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 5.14.1
69
87
  - !ruby/object:Gem::Dependency
70
- name: minitest
88
+ name: pry
71
89
  requirement: !ruby/object:Gem::Requirement
72
90
  requirements:
73
- - - ">="
91
+ - - "~>"
74
92
  - !ruby/object:Gem::Version
75
- version: '0'
93
+ version: 0.13.1
76
94
  type: :development
77
95
  prerelease: false
78
96
  version_requirements: !ruby/object:Gem::Requirement
79
97
  requirements:
80
- - - ">="
98
+ - - "~>"
81
99
  - !ruby/object:Gem::Version
82
- version: '0'
100
+ version: 0.13.1
83
101
  - !ruby/object:Gem::Dependency
84
- name: vcr
102
+ name: rake
85
103
  requirement: !ruby/object:Gem::Requirement
86
104
  requirements:
87
- - - ">="
105
+ - - "~>"
88
106
  - !ruby/object:Gem::Version
89
- version: '0'
107
+ version: '12.3'
90
108
  type: :development
91
109
  prerelease: false
92
110
  version_requirements: !ruby/object:Gem::Requirement
93
111
  requirements:
94
- - - ">="
112
+ - - "~>"
95
113
  - !ruby/object:Gem::Version
96
- version: '0'
114
+ version: '12.3'
97
115
  - !ruby/object:Gem::Dependency
98
- name: webmock
116
+ name: rubocop
99
117
  requirement: !ruby/object:Gem::Requirement
100
118
  requirements:
101
- - - ">="
119
+ - - "~>"
102
120
  - !ruby/object:Gem::Version
103
- version: '0'
121
+ version: '0.91'
104
122
  type: :development
105
123
  prerelease: false
106
124
  version_requirements: !ruby/object:Gem::Requirement
107
125
  requirements:
108
- - - ">="
126
+ - - "~>"
109
127
  - !ruby/object:Gem::Version
110
- version: '0'
128
+ version: '0.91'
111
129
  - !ruby/object:Gem::Dependency
112
- name: pry
130
+ name: vcr
113
131
  requirement: !ruby/object:Gem::Requirement
114
132
  requirements:
115
133
  - - ">="
116
134
  - !ruby/object:Gem::Version
117
- version: '0'
135
+ version: 6.0.0
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '6.0'
118
139
  type: :development
119
140
  prerelease: false
120
141
  version_requirements: !ruby/object:Gem::Requirement
121
142
  requirements:
122
143
  - - ">="
123
144
  - !ruby/object:Gem::Version
124
- version: '0'
145
+ version: 6.0.0
146
+ - - "~>"
147
+ - !ruby/object:Gem::Version
148
+ version: '6.0'
125
149
  - !ruby/object:Gem::Dependency
126
- name: yard
150
+ name: webmock
127
151
  requirement: !ruby/object:Gem::Requirement
128
152
  requirements:
129
153
  - - "~>"
130
154
  - !ruby/object:Gem::Version
131
- version: '0.8'
155
+ version: '3.9'
132
156
  type: :development
133
157
  prerelease: false
134
158
  version_requirements: !ruby/object:Gem::Requirement
135
159
  requirements:
136
160
  - - "~>"
137
161
  - !ruby/object:Gem::Version
138
- version: '0.8'
162
+ version: '3.9'
139
163
  - !ruby/object:Gem::Dependency
140
- name: rubocop
164
+ name: yard
141
165
  requirement: !ruby/object:Gem::Requirement
142
166
  requirements:
143
- - - ">="
167
+ - - "~>"
144
168
  - !ruby/object:Gem::Version
145
- version: '0'
169
+ version: '0.9'
146
170
  type: :development
147
171
  prerelease: false
148
172
  version_requirements: !ruby/object:Gem::Requirement
149
173
  requirements:
150
- - - ">="
174
+ - - "~>"
151
175
  - !ruby/object:Gem::Version
152
- version: '0'
153
- description: Gem for VirusTotal.com API
176
+ version: '0.9'
177
+ description: Gem for VirusTotal.com API, supporting API V3
154
178
  email:
155
179
  - paul@pwelch.net
156
180
  executables: []
157
181
  extensions: []
158
182
  extra_rdoc_files: []
159
183
  files:
184
+ - ".circleci/config.yml"
185
+ - ".github/CODE_OF_CONDUCT.md"
186
+ - ".github/CONTRIBUTING.md"
187
+ - ".github/ISSUE_TEMPLATE.md"
188
+ - ".github/workflows/ruby.yml"
160
189
  - ".gitignore"
161
190
  - ".rubocop.yml"
162
- - ".travis.yml"
191
+ - CHANGELOG.md
163
192
  - Gemfile
164
193
  - LICENSE.txt
165
194
  - README.md
166
195
  - Rakefile
167
196
  - lib/virustotal_api.rb
197
+ - lib/virustotal_api/analysis.rb
168
198
  - lib/virustotal_api/base.rb
169
- - lib/virustotal_api/domain_report.rb
170
- - lib/virustotal_api/file_report.rb
171
- - lib/virustotal_api/file_scan.rb
172
- - lib/virustotal_api/ip_report.rb
199
+ - lib/virustotal_api/domain.rb
200
+ - lib/virustotal_api/exceptions.rb
201
+ - lib/virustotal_api/file.rb
202
+ - lib/virustotal_api/ip.rb
173
203
  - lib/virustotal_api/uri.rb
174
- - lib/virustotal_api/url_report.rb
204
+ - lib/virustotal_api/url.rb
175
205
  - lib/virustotal_api/version.rb
206
+ - test/analysis_test.rb
176
207
  - test/base_test.rb
177
- - test/domain_report_test.rb
178
- - test/file_report_test.rb
179
- - test/file_scan_test.rb
180
- - test/fixtures/domain_report.yml
181
- - test/fixtures/ip_report.yml
208
+ - test/domain_test.rb
209
+ - test/exceptions_test.rb
210
+ - test/file_test.rb
211
+ - test/fixtures/analysis.yml
212
+ - test/fixtures/domain.yml
213
+ - test/fixtures/file_analyse.yml
214
+ - test/fixtures/file_find.yml
215
+ - test/fixtures/file_unauthorized.yml
216
+ - test/fixtures/file_upload.yml
217
+ - test/fixtures/ip.yml
182
218
  - test/fixtures/null_file
183
- - test/fixtures/report.yml
184
- - test/fixtures/report_not_found.yml
185
- - test/fixtures/request_forbidden.yml
186
- - test/fixtures/scan.yml
187
- - test/fixtures/url_report.yml
188
- - test/ip_report_test.rb
219
+ - test/fixtures/unscanned_url_find.yml
220
+ - test/fixtures/url_analyse.yml
221
+ - test/fixtures/url_find.yml
222
+ - test/ip_test.rb
189
223
  - test/test_helper.rb
190
224
  - test/uri_test.rb
191
- - test/url_report_test.rb
225
+ - test/url_test.rb
192
226
  - test/version_test.rb
193
227
  - virustotal_api.gemspec
194
228
  homepage: https://github.com/pwelch/virustotal_api
195
229
  licenses:
196
230
  - MIT
197
231
  metadata: {}
198
- post_install_message:
232
+ post_install_message:
199
233
  rdoc_options: []
200
234
  require_paths:
201
235
  - lib
@@ -203,34 +237,36 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
237
  requirements:
204
238
  - - ">="
205
239
  - !ruby/object:Gem::Version
206
- version: '0'
240
+ version: '2.6'
207
241
  required_rubygems_version: !ruby/object:Gem::Requirement
208
242
  requirements:
209
243
  - - ">="
210
244
  - !ruby/object:Gem::Version
211
245
  version: '0'
212
246
  requirements: []
213
- rubyforge_project:
214
- rubygems_version: 2.4.3
215
- signing_key:
247
+ rubygems_version: 3.0.3
248
+ signing_key:
216
249
  specification_version: 4
217
250
  summary: Gem for VirusTotal.com API
218
251
  test_files:
252
+ - test/analysis_test.rb
219
253
  - test/base_test.rb
220
- - test/domain_report_test.rb
221
- - test/file_report_test.rb
222
- - test/file_scan_test.rb
223
- - test/fixtures/domain_report.yml
224
- - test/fixtures/ip_report.yml
254
+ - test/domain_test.rb
255
+ - test/exceptions_test.rb
256
+ - test/file_test.rb
257
+ - test/fixtures/analysis.yml
258
+ - test/fixtures/domain.yml
259
+ - test/fixtures/file_analyse.yml
260
+ - test/fixtures/file_find.yml
261
+ - test/fixtures/file_unauthorized.yml
262
+ - test/fixtures/file_upload.yml
263
+ - test/fixtures/ip.yml
225
264
  - test/fixtures/null_file
226
- - test/fixtures/report.yml
227
- - test/fixtures/report_not_found.yml
228
- - test/fixtures/request_forbidden.yml
229
- - test/fixtures/scan.yml
230
- - test/fixtures/url_report.yml
231
- - test/ip_report_test.rb
265
+ - test/fixtures/unscanned_url_find.yml
266
+ - test/fixtures/url_analyse.yml
267
+ - test/fixtures/url_find.yml
268
+ - test/ip_test.rb
232
269
  - test/test_helper.rb
233
270
  - test/uri_test.rb
234
- - test/url_report_test.rb
271
+ - test/url_test.rb
235
272
  - test/version_test.rb
236
- has_rdoc: