vigilion-rails 2.0.0 → 2.2.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
  SHA256:
3
- metadata.gz: 0bf77784d940566822b109c78453d6e5243ac2e56b494b4d312adf1111dc9849
4
- data.tar.gz: 977d2425983190e51677445c79575ffa6b8f7617f6144f88664b2d769ace052a
3
+ metadata.gz: e1f3ee39ebf2b55e3545ba4a2ea9c656e9b48d297e50250342a5a981d4d4aed3
4
+ data.tar.gz: 171c41bb2480b4a084051822bc0116a3e20af7d275e7a4c89c46f6c3eccb0f41
5
5
  SHA512:
6
- metadata.gz: 4e328f50bb9f3189817baa85a3b4613b5f14234c8549cdf74ceb9c2f8da2fec7693a902f52d941c15f448b1e9329921c31b74bd6cd152a16d66ba2c8f0791f78
7
- data.tar.gz: 7c8ba6df3708e9f075da925ca93b33510d2cc3876f8948568cc0fcf1967a5694ef0b3ab4e55ce98c6b29dc524c9a7f160288324c642287c644bac4860309b0c0
6
+ metadata.gz: dc908eb63faff594fa229f73c54ae067591715f4a494f5836666a9fd956f1c328fc5c247fb5a394d20e17d51afc17e3c2ab056b2dc320a1a66bbc9bbb4b79e5e
7
+ data.tar.gz: b0bd0272236fd4fed6be07ab447a1cee92422d6aa17ec6a7988f0b8e32ebf65685428b071aef49e28cce132b5b61781d351af0e653b3f4546b75ab1f1d5b1ffb
@@ -0,0 +1,9 @@
1
+ module VigilionRails
2
+ class ApplicationJob < ActiveJob::Base
3
+ # Automatically retry jobs that encountered a deadlock
4
+ # retry_on ActiveRecord::Deadlocked
5
+
6
+ # Most jobs are safe to ignore if the underlying records are no longer available
7
+ # discard_on ActiveJob::DeserializationError
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module VigilionRails
2
+ class VigilionScanJob < ApplicationJob
3
+ queue_as :default
4
+
5
+ def perform(integration_class, class_name, id, key, column)
6
+ file = class_name.constantize.find(id)
7
+ integration_class.constantize.new.scan key, file, column.to_sym
8
+ end
9
+ end
10
+ end
@@ -7,6 +7,7 @@ module VigilionRails
7
7
  config.integration = :url
8
8
  config.loopback = Rails.env.development? || Rails.env.test?
9
9
  config.loopback_response = 'clean'
10
+ config.active_job = false
10
11
  end
11
12
  end
12
13
  end
@@ -1,3 +1,3 @@
1
1
  module VigilionRails
2
- VERSION = "2.0.0"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -4,6 +4,7 @@ require "vigilion-rails/integrations/local_integration"
4
4
  require "vigilion-rails/configuration"
5
5
 
6
6
  module VigilionRails
7
+ PENDING_STATUS = 'pending'
7
8
 
8
9
  module ActiveRecord
9
10
  def scan_file column, options={}
@@ -20,7 +21,12 @@ module VigilionRails
20
21
 
21
22
  self.class.find(id).on_scan_#{column} status: Vigilion::Configuration.loopback_response
22
23
  else
23
- #{integration_class}.new.scan key, self, :#{column}
24
+ if Vigilion::Configuration.active_job
25
+ ::VigilionRails::VigilionScanJob.set(wait: 60).perform_later(#{integration_class}.to_s, self.class.name, id, key, '#{column}')
26
+ else
27
+ #{integration_class}.new.scan key, self, :#{column}
28
+ end
29
+ self.class.find(id).send('on_scan_#{column}', status: PENDING_STATUS)
24
30
  end
25
31
  @#{column}_old_url = #{column}.url
26
32
  return true
@@ -32,7 +38,7 @@ module VigilionRails
32
38
  end
33
39
 
34
40
  after_initialize :remember_#{column}_url
35
- after_commit :check_scan_#{column}
41
+ after_commit :check_scan_#{column}, on: [:create, :update]
36
42
 
37
43
  def remember_#{column}_url
38
44
  @#{column}_old_url = #{column}.try(:url) unless new_record?
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -24,9 +24,5 @@ module Dummy
24
24
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
25
25
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
26
26
  # config.i18n.default_locale = :de
27
-
28
- # Do not swallow errors in after_commit/after_rollback callbacks.
29
- config.active_record.raise_in_transactional_callbacks = true
30
27
  end
31
28
  end
32
-
@@ -0,0 +1,4 @@
1
+ Vigilion.configure do |config|
2
+ config.access_key_id = 'test'
3
+ config.secret_access_key = 'test'
4
+ end
@@ -0,0 +1,26 @@
1
+ require "vigilion_rails_helper"
2
+
3
+ RSpec.describe VigilionRails::VigilionScanJob do
4
+ disable_loopback
5
+ it "matches with performed job" do
6
+ ActiveJob::Base.queue_adapter = :test
7
+ ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
8
+ document = CarrierwaveDocument.create
9
+ key = { model: document.class.name, column: 'attachment', id: document.id }
10
+
11
+ stub_request(:post, "https://api.vigilion.com/scans").
12
+ with(
13
+ body: "{\"scan\":{\"key\":{\"model\":\"CarrierwaveDocument\",\"column\":\"attachment\",\"id\":1},\"url\":null}}",
14
+ headers: {
15
+ 'Accept'=>'*/*',
16
+ 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
17
+ 'Content-Type'=>'application/json',
18
+ 'User-Agent'=>'Vigilion 1.0.4 (x86_64-darwin19, Ruby 2.7.1)',
19
+ 'X-Api-Key'=>'test'
20
+ }).
21
+ to_return(status: 200, body: "", headers: {})
22
+
23
+ VigilionRails::VigilionScanJob.perform_later("VigilionRails::UrlIntegration", document.class.name, document.id, key, 'attachment')
24
+ expect(VigilionRails::VigilionScanJob).to have_been_performed
25
+ end
26
+ end
@@ -5,9 +5,9 @@ describe VigilionRails::LocalIntegration do
5
5
 
6
6
  describe "#scan" do
7
7
  it "calls vigilion scanner" do
8
- document = CarrierwaveDocument.new
8
+ document = CarrierwaveDocument.create
9
9
  expect(Vigilion).to receive(:scan_path)
10
10
  document.scan_attachment!
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,6 +1,8 @@
1
1
  require "vigilion_rails_helper"
2
2
 
3
3
  describe VigilionRails do
4
+ include ActiveJob::TestHelper
5
+
4
6
  describe "#clean?" do
5
7
  context "without scan results" do
6
8
  it "is not clean" do
@@ -32,7 +34,7 @@ describe VigilionRails do
32
34
  disable_loopback
33
35
 
34
36
  it "calls vigilion scanner" do
35
- document = AgnosticDocument.new
37
+ document = AgnosticDocument.create
36
38
  expect(Vigilion).to receive(:scan_url)
37
39
  document.scan_attachment!
38
40
  end
@@ -119,4 +121,36 @@ describe VigilionRails do
119
121
  end
120
122
  end
121
123
  end
124
+
125
+ describe "#active_job" do
126
+ before do
127
+ Vigilion::Configuration.loopback = false
128
+ Vigilion::Configuration.active_job = true
129
+ Vigilion::Configuration.integration = :url
130
+ end
131
+
132
+ it "enqueues a job" do
133
+ document = AgnosticDocument.create
134
+ expect {
135
+ document.scan_attachment!
136
+ }.to have_enqueued_job(::VigilionRails::VigilionScanJob)
137
+ end
138
+
139
+ it 'calls proper integration' do
140
+ document = AgnosticDocument.create
141
+ key = { model: document.class.name, column: 'attachment', id: document.id }.to_json
142
+ expect_any_instance_of(
143
+ ::VigilionRails::UrlIntegration
144
+ ).to receive(:scan).with(key, document, :attachment)
145
+ perform_enqueued_jobs do
146
+ document.scan_attachment!
147
+ end
148
+ end
149
+
150
+ it 'sets default status' do
151
+ document = AgnosticDocument.create
152
+ document.scan_attachment!
153
+ expect(document.reload.attachment_scan_results).to eq "pending"
154
+ end
155
+ end
122
156
  end
@@ -4,8 +4,10 @@ require 'spec_helper'
4
4
  require File.expand_path('../dummy/config/environment', __FILE__)
5
5
  require 'rspec/rails'
6
6
  require 'helper_methods'
7
+ require 'webmock/rspec'
7
8
 
8
9
  ActiveRecord::Migration.maintain_test_schema!
10
+ ActiveJob::Base.queue_adapter = :test
9
11
 
10
12
  RSpec.configure do |config|
11
13
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vigilion-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bit Zesty Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-22 00:00:00.000000000 Z
11
+ date: 2023-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0
19
+ version: 6.0.3.7
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.2.0
26
+ version: 6.0.3.7
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: vigilion
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: Rails engine for Vigilion Anti-Virus & Malware file scanning service.
84
98
  email:
85
99
  - help@vigilion.com
@@ -90,6 +104,8 @@ files:
90
104
  - MIT-LICENSE
91
105
  - Rakefile
92
106
  - app/controllers/vigilion/vigilion_controller.rb
107
+ - app/jobs/vigilion_rails/application_job.rb
108
+ - app/jobs/vigilion_rails/vigilion_scan_job.rb
93
109
  - config/routes.rb
94
110
  - lib/generators/vigilion/install_generator.rb
95
111
  - lib/generators/vigilion/scan/USAGE
@@ -104,6 +120,7 @@ files:
104
120
  - lib/vigilion-rails/version.rb
105
121
  - spec/dummy/README.rdoc
106
122
  - spec/dummy/Rakefile
123
+ - spec/dummy/app/assets/config/manifest.js
107
124
  - spec/dummy/app/assets/javascripts/application.js
108
125
  - spec/dummy/app/assets/stylesheets/application.css
109
126
  - spec/dummy/app/controllers/application_controller.rb
@@ -133,6 +150,7 @@ files:
133
150
  - spec/dummy/config/initializers/inflections.rb
134
151
  - spec/dummy/config/initializers/mime_types.rb
135
152
  - spec/dummy/config/initializers/session_store.rb
153
+ - spec/dummy/config/initializers/vigilion.rb
136
154
  - spec/dummy/config/initializers/wrap_parameters.rb
137
155
  - spec/dummy/config/locales/en.yml
138
156
  - spec/dummy/config/routes.rb
@@ -147,6 +165,7 @@ files:
147
165
  - spec/dummy/public/500.html
148
166
  - spec/dummy/public/favicon.ico
149
167
  - spec/helper_methods.rb
168
+ - spec/jobs/vigilion_rails/vigilion_scan_job_spec.rb
150
169
  - spec/lib/integrations/local_integration_spec.rb
151
170
  - spec/lib/vigilion_rails_spec.rb
152
171
  - spec/routing/vigilion_routing_spec.rb
@@ -171,59 +190,61 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
190
  - !ruby/object:Gem::Version
172
191
  version: '0'
173
192
  requirements: []
174
- rubyforge_project:
175
- rubygems_version: 2.7.6
193
+ rubygems_version: 3.0.3.1
176
194
  signing_key:
177
195
  specification_version: 4
178
196
  summary: Rails engine for Vigilion Anti-Virus & Malware file scanning service.
179
197
  test_files:
198
+ - spec/routing/vigilion_routing_spec.rb
199
+ - spec/helper_methods.rb
200
+ - spec/lib/vigilion_rails_spec.rb
201
+ - spec/lib/integrations/local_integration_spec.rb
180
202
  - spec/vigilion_rails_helper.rb
181
- - spec/spec_helper.rb
182
- - spec/dummy/app/uploaders/attachment_uploader.rb
183
- - spec/dummy/app/models/carrierwave_document.rb
184
- - spec/dummy/app/models/agnostic_document.rb
185
- - spec/dummy/app/models/paperclip_document.rb
186
- - spec/dummy/app/models/dragonfly_document.rb
187
- - spec/dummy/app/controllers/application_controller.rb
188
- - spec/dummy/app/views/layouts/application.html.erb
189
- - spec/dummy/app/assets/javascripts/application.js
190
- - spec/dummy/app/assets/stylesheets/application.css
191
- - spec/dummy/app/helpers/application_helper.rb
192
- - spec/dummy/bin/rake
203
+ - spec/dummy/Rakefile
204
+ - spec/dummy/README.rdoc
193
205
  - spec/dummy/bin/setup
206
+ - spec/dummy/bin/rake
194
207
  - spec/dummy/bin/bundle
195
208
  - spec/dummy/bin/rails
196
- - spec/dummy/config/secrets.yml
197
- - spec/dummy/config/routes.rb
198
- - spec/dummy/config/locales/en.yml
199
- - spec/dummy/config/environments/production.rb
200
- - spec/dummy/config/environments/development.rb
201
- - spec/dummy/config/environments/test.rb
202
- - spec/dummy/config/environment.rb
203
209
  - spec/dummy/config/application.rb
204
- - spec/dummy/config/database.yml
205
210
  - spec/dummy/config/boot.rb
206
- - spec/dummy/config/initializers/backtrace_silencers.rb
211
+ - spec/dummy/config/secrets.yml
212
+ - spec/dummy/config/locales/en.yml
213
+ - spec/dummy/config/initializers/vigilion.rb
207
214
  - spec/dummy/config/initializers/mime_types.rb
208
- - spec/dummy/config/initializers/filter_parameter_logging.rb
209
- - spec/dummy/config/initializers/session_store.rb
210
215
  - spec/dummy/config/initializers/wrap_parameters.rb
216
+ - spec/dummy/config/initializers/inflections.rb
217
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
211
218
  - spec/dummy/config/initializers/assets.rb
219
+ - spec/dummy/config/initializers/backtrace_silencers.rb
220
+ - spec/dummy/config/initializers/session_store.rb
212
221
  - spec/dummy/config/initializers/cookies_serializer.rb
213
- - spec/dummy/config/initializers/inflections.rb
222
+ - spec/dummy/config/database.yml
223
+ - spec/dummy/config/routes.rb
224
+ - spec/dummy/config/environments/production.rb
225
+ - spec/dummy/config/environments/development.rb
226
+ - spec/dummy/config/environments/test.rb
227
+ - spec/dummy/config/environment.rb
228
+ - spec/dummy/app/views/layouts/application.html.erb
229
+ - spec/dummy/app/assets/javascripts/application.js
230
+ - spec/dummy/app/assets/config/manifest.js
231
+ - spec/dummy/app/assets/stylesheets/application.css
232
+ - spec/dummy/app/models/dragonfly_document.rb
233
+ - spec/dummy/app/models/carrierwave_document.rb
234
+ - spec/dummy/app/models/agnostic_document.rb
235
+ - spec/dummy/app/models/paperclip_document.rb
236
+ - spec/dummy/app/controllers/application_controller.rb
237
+ - spec/dummy/app/uploaders/attachment_uploader.rb
238
+ - spec/dummy/app/helpers/application_helper.rb
214
239
  - spec/dummy/config.ru
215
- - spec/dummy/Rakefile
216
- - spec/dummy/public/favicon.ico
217
- - spec/dummy/public/422.html
218
- - spec/dummy/public/500.html
219
- - spec/dummy/public/404.html
220
240
  - spec/dummy/db/schema.rb
221
241
  - spec/dummy/db/migrate/20150616144235_create_dragonfly_documents.rb
222
- - spec/dummy/db/migrate/20150616144544_create_agnostic_documents.rb
223
242
  - spec/dummy/db/migrate/20150616144227_create_paperclip_documents.rb
243
+ - spec/dummy/db/migrate/20150616144544_create_agnostic_documents.rb
224
244
  - spec/dummy/db/migrate/20150616144220_create_carrierwave_documents.rb
225
- - spec/dummy/README.rdoc
226
- - spec/helper_methods.rb
227
- - spec/lib/vigilion_rails_spec.rb
228
- - spec/lib/integrations/local_integration_spec.rb
229
- - spec/routing/vigilion_routing_spec.rb
245
+ - spec/dummy/public/404.html
246
+ - spec/dummy/public/500.html
247
+ - spec/dummy/public/favicon.ico
248
+ - spec/dummy/public/422.html
249
+ - spec/spec_helper.rb
250
+ - spec/jobs/vigilion_rails/vigilion_scan_job_spec.rb