virustotal_api 0.4.1 → 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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +26 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +12 -5
  5. data/CHANGELOG.md +7 -2
  6. data/README.md +48 -56
  7. data/lib/virustotal_api.rb +5 -7
  8. data/lib/virustotal_api/analysis.rb +24 -0
  9. data/lib/virustotal_api/base.rb +35 -10
  10. data/lib/virustotal_api/domain.rb +24 -0
  11. data/lib/virustotal_api/exceptions.rb +3 -0
  12. data/lib/virustotal_api/file.rb +56 -0
  13. data/lib/virustotal_api/ip.rb +24 -0
  14. data/lib/virustotal_api/uri.rb +2 -1
  15. data/lib/virustotal_api/url.rb +46 -0
  16. data/lib/virustotal_api/version.rb +2 -1
  17. data/test/analysis_test.rb +23 -0
  18. data/test/base_test.rb +8 -28
  19. data/test/domain_test.rb +32 -0
  20. data/test/exceptions_test.rb +14 -0
  21. data/test/file_test.rb +68 -0
  22. data/test/fixtures/analysis.yml +544 -0
  23. data/test/fixtures/domain.yml +830 -0
  24. data/test/fixtures/file_analyse.yml +52 -0
  25. data/test/fixtures/file_find.yml +1236 -0
  26. data/test/fixtures/file_unauthorized.yml +51 -0
  27. data/test/fixtures/file_upload.yml +54 -0
  28. data/test/fixtures/ip.yml +716 -0
  29. data/test/fixtures/unscanned_url_find.yml +44 -0
  30. data/test/fixtures/url_analyse.yml +52 -0
  31. data/test/fixtures/url_find.yml +599 -0
  32. data/test/{ip_report_test.rb → ip_test.rb} +4 -4
  33. data/test/uri_test.rb +1 -1
  34. data/test/url_test.rb +65 -0
  35. data/test/version_test.rb +1 -1
  36. data/virustotal_api.gemspec +10 -8
  37. metadata +86 -70
  38. data/.github/workflows/gem_publish.yml +0 -38
  39. data/lib/virustotal_api/domain_report.rb +0 -36
  40. data/lib/virustotal_api/file_report.rb +0 -37
  41. data/lib/virustotal_api/file_rescan.rb +0 -36
  42. data/lib/virustotal_api/file_scan.rb +0 -38
  43. data/lib/virustotal_api/ip_report.rb +0 -36
  44. data/lib/virustotal_api/url_report.rb +0 -41
  45. data/lib/virustotal_api/url_scan.rb +0 -36
  46. data/test/domain_report_test.rb +0 -32
  47. data/test/file_report_test.rb +0 -36
  48. data/test/file_rescan_test.rb +0 -32
  49. data/test/file_scan_test.rb +0 -30
  50. data/test/fixtures/domain_report.yml +0 -311
  51. data/test/fixtures/ip_report.yml +0 -1323
  52. data/test/fixtures/queue_unscanned_url_report.yml +0 -46
  53. data/test/fixtures/report.yml +0 -110
  54. data/test/fixtures/report_not_found.yml +0 -42
  55. data/test/fixtures/request_forbidden.yml +0 -38
  56. data/test/fixtures/rescan.yml +0 -47
  57. data/test/fixtures/scan.yml +0 -49
  58. data/test/fixtures/unscanned_url_report.yml +0 -43
  59. data/test/fixtures/url_report.yml +0 -95
  60. data/test/fixtures/url_scan.yml +0 -48
  61. data/test/url_report_test.rb +0 -57
  62. data/test/url_scan_test.rb +0 -30
@@ -9,15 +9,15 @@ class VirustotalAPIIPReportTest < Minitest::Test
9
9
  end
10
10
 
11
11
  def test_class_exists
12
- assert VirustotalAPI::IPReport
12
+ assert VirustotalAPI::IP
13
13
  end
14
14
 
15
15
  def test_report_response
16
- VCR.use_cassette('ip_report') do
17
- vtip_report = VirustotalAPI::IPReport.find(@ip, @api_key)
16
+ VCR.use_cassette('ip') do
17
+ vtip_report = VirustotalAPI::IP.find(@ip, @api_key)
18
18
 
19
19
  # Make sure that the JSON was parsed
20
- assert vtip_report.is_a?(VirustotalAPI::IPReport)
20
+ assert vtip_report.is_a?(VirustotalAPI::IP)
21
21
  assert vtip_report.report.is_a?(Hash)
22
22
  end
23
23
  end
@@ -5,6 +5,6 @@ require './test/test_helper'
5
5
  class VirustotalAPIVTReportTest < Minitest::Test
6
6
  def test_api_base_uri
7
7
  assert VirustotalAPI::URI.is_a?(String)
8
- assert VirustotalAPI::URI, 'https://www.virustotal.com/vtapi/v2'
8
+ assert_equal 'https://www.virustotal.com/api/v3', VirustotalAPI::URI
9
9
  end
10
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  require './test/test_helper'
4
4
 
5
- class VirustotalAPIVTReportTest < Minitest::Test
5
+ class VirustotalAPIVersionTest < Minitest::Test
6
6
  def test_version
7
7
  assert VirustotalAPI::VERSION.is_a?(String)
8
8
  end
@@ -10,24 +10,26 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['pwelch']
11
11
  spec.email = ['paul@pwelch.net']
12
12
  spec.summary = 'Gem for VirusTotal.com API'
13
- spec.description = 'Gem for VirusTotal.com API'
13
+ spec.description = 'Gem for VirusTotal.com API, supporting API V3'
14
14
  spec.homepage = 'https://github.com/pwelch/virustotal_api'
15
15
  spec.license = 'MIT'
16
16
 
17
+ spec.required_ruby_version = '>= 2.6'
18
+
17
19
  spec.files = `git ls-files -z`.split("\x0")
18
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
22
  spec.require_paths = ['lib']
21
23
 
22
- spec.add_dependency 'json'
23
- spec.add_dependency 'rest-client'
24
+ spec.add_dependency 'json', '~> 2.3', '>= 2.3.1'
25
+ spec.add_dependency 'rest-client', '~> 2.1', '>= 2.1.0'
24
26
 
25
27
  spec.add_development_dependency 'bundler', '~> 2.0'
26
- spec.add_development_dependency 'minitest'
27
- spec.add_development_dependency 'pry'
28
+ spec.add_development_dependency 'minitest', '~> 5.14', '>= 5.14.1'
29
+ spec.add_development_dependency 'pry', '~> 0.13.1'
28
30
  spec.add_development_dependency 'rake', '~> 12.3'
29
- spec.add_development_dependency 'rubocop', '~> 0.71'
30
- spec.add_development_dependency 'vcr'
31
- spec.add_development_dependency 'webmock'
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'
32
34
  spec.add_development_dependency 'yard', '~> 0.9'
33
35
  end
metadata CHANGED
@@ -1,43 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virustotal_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
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: 2019-09-04 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
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
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
@@ -56,30 +68,36 @@ dependencies:
56
68
  name: minitest
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '5.14'
59
74
  - - ">="
60
75
  - !ruby/object:Gem::Version
61
- version: '0'
76
+ version: 5.14.1
62
77
  type: :development
63
78
  prerelease: false
64
79
  version_requirements: !ruby/object:Gem::Requirement
65
80
  requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '5.14'
66
84
  - - ">="
67
85
  - !ruby/object:Gem::Version
68
- version: '0'
86
+ version: 5.14.1
69
87
  - !ruby/object:Gem::Dependency
70
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
102
  name: rake
85
103
  requirement: !ruby/object:Gem::Requirement
@@ -100,42 +118,48 @@ dependencies:
100
118
  requirements:
101
119
  - - "~>"
102
120
  - !ruby/object:Gem::Version
103
- version: '0.71'
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.71'
128
+ version: '0.91'
111
129
  - !ruby/object:Gem::Dependency
112
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
150
  name: webmock
127
151
  requirement: !ruby/object:Gem::Requirement
128
152
  requirements:
129
- - - ">="
153
+ - - "~>"
130
154
  - !ruby/object:Gem::Version
131
- version: '0'
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'
162
+ version: '3.9'
139
163
  - !ruby/object:Gem::Dependency
140
164
  name: yard
141
165
  requirement: !ruby/object:Gem::Requirement
@@ -150,7 +174,7 @@ dependencies:
150
174
  - - "~>"
151
175
  - !ruby/object:Gem::Version
152
176
  version: '0.9'
153
- description: Gem for VirusTotal.com API
177
+ description: Gem for VirusTotal.com API, supporting API V3
154
178
  email:
155
179
  - paul@pwelch.net
156
180
  executables: []
@@ -161,7 +185,7 @@ files:
161
185
  - ".github/CODE_OF_CONDUCT.md"
162
186
  - ".github/CONTRIBUTING.md"
163
187
  - ".github/ISSUE_TEMPLATE.md"
164
- - ".github/workflows/gem_publish.yml"
188
+ - ".github/workflows/ruby.yml"
165
189
  - ".gitignore"
166
190
  - ".rubocop.yml"
167
191
  - CHANGELOG.md
@@ -170,47 +194,42 @@ files:
170
194
  - README.md
171
195
  - Rakefile
172
196
  - lib/virustotal_api.rb
197
+ - lib/virustotal_api/analysis.rb
173
198
  - lib/virustotal_api/base.rb
174
- - lib/virustotal_api/domain_report.rb
199
+ - lib/virustotal_api/domain.rb
175
200
  - lib/virustotal_api/exceptions.rb
176
- - lib/virustotal_api/file_report.rb
177
- - lib/virustotal_api/file_rescan.rb
178
- - lib/virustotal_api/file_scan.rb
179
- - lib/virustotal_api/ip_report.rb
201
+ - lib/virustotal_api/file.rb
202
+ - lib/virustotal_api/ip.rb
180
203
  - lib/virustotal_api/uri.rb
181
- - lib/virustotal_api/url_report.rb
182
- - lib/virustotal_api/url_scan.rb
204
+ - lib/virustotal_api/url.rb
183
205
  - lib/virustotal_api/version.rb
206
+ - test/analysis_test.rb
184
207
  - test/base_test.rb
185
- - test/domain_report_test.rb
208
+ - test/domain_test.rb
186
209
  - test/exceptions_test.rb
187
- - test/file_report_test.rb
188
- - test/file_rescan_test.rb
189
- - test/file_scan_test.rb
190
- - test/fixtures/domain_report.yml
191
- - test/fixtures/ip_report.yml
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
192
218
  - test/fixtures/null_file
193
- - test/fixtures/queue_unscanned_url_report.yml
194
- - test/fixtures/report.yml
195
- - test/fixtures/report_not_found.yml
196
- - test/fixtures/request_forbidden.yml
197
- - test/fixtures/rescan.yml
198
- - test/fixtures/scan.yml
199
- - test/fixtures/unscanned_url_report.yml
200
- - test/fixtures/url_report.yml
201
- - test/fixtures/url_scan.yml
202
- - 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
203
223
  - test/test_helper.rb
204
224
  - test/uri_test.rb
205
- - test/url_report_test.rb
206
- - test/url_scan_test.rb
225
+ - test/url_test.rb
207
226
  - test/version_test.rb
208
227
  - virustotal_api.gemspec
209
228
  homepage: https://github.com/pwelch/virustotal_api
210
229
  licenses:
211
230
  - MIT
212
231
  metadata: {}
213
- post_install_message:
232
+ post_install_message:
214
233
  rdoc_options: []
215
234
  require_paths:
216
235
  - lib
@@ -218,39 +237,36 @@ required_ruby_version: !ruby/object:Gem::Requirement
218
237
  requirements:
219
238
  - - ">="
220
239
  - !ruby/object:Gem::Version
221
- version: '0'
240
+ version: '2.6'
222
241
  required_rubygems_version: !ruby/object:Gem::Requirement
223
242
  requirements:
224
243
  - - ">="
225
244
  - !ruby/object:Gem::Version
226
245
  version: '0'
227
246
  requirements: []
228
- rubygems_version: 3.0.2
229
- signing_key:
247
+ rubygems_version: 3.0.3
248
+ signing_key:
230
249
  specification_version: 4
231
250
  summary: Gem for VirusTotal.com API
232
251
  test_files:
252
+ - test/analysis_test.rb
233
253
  - test/base_test.rb
234
- - test/domain_report_test.rb
254
+ - test/domain_test.rb
235
255
  - test/exceptions_test.rb
236
- - test/file_report_test.rb
237
- - test/file_rescan_test.rb
238
- - test/file_scan_test.rb
239
- - test/fixtures/domain_report.yml
240
- - test/fixtures/ip_report.yml
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
241
264
  - test/fixtures/null_file
242
- - test/fixtures/queue_unscanned_url_report.yml
243
- - test/fixtures/report.yml
244
- - test/fixtures/report_not_found.yml
245
- - test/fixtures/request_forbidden.yml
246
- - test/fixtures/rescan.yml
247
- - test/fixtures/scan.yml
248
- - test/fixtures/unscanned_url_report.yml
249
- - test/fixtures/url_report.yml
250
- - test/fixtures/url_scan.yml
251
- - 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
252
269
  - test/test_helper.rb
253
270
  - test/uri_test.rb
254
- - test/url_report_test.rb
255
- - test/url_scan_test.rb
271
+ - test/url_test.rb
256
272
  - test/version_test.rb
@@ -1,38 +0,0 @@
1
- name: Ruby Gem
2
-
3
- on: release
4
-
5
- jobs:
6
- build:
7
- name: Build + Publish
8
- runs-on: ubuntu-latest
9
-
10
- steps:
11
- - uses: actions/checkout@master
12
- - name: Set up Ruby 2.6
13
- uses: actions/setup-ruby@v1
14
- with:
15
- version: 2.6.x
16
-
17
- - name: Publish to GPR
18
- run: |
19
- mkdir -p $HOME/.gem
20
- touch $HOME/.gem/credentials
21
- chmod 0600 $HOME/.gem/credentials
22
- printf -- "---\n:github: Bearer ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
23
- gem build *.gemspec
24
- gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
25
- env:
26
- GEM_HOST_API_KEY: ${{secrets.GITHUB_TOKEN}}
27
- OWNER: username
28
-
29
- - name: Publish to RubyGems
30
- run: |
31
- mkdir -p $HOME/.gem
32
- touch $HOME/.gem/credentials
33
- chmod 0600 $HOME/.gem/credentials
34
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
35
- gem build *.gemspec
36
- gem push *.gem
37
- env:
38
- GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}