esp_sdk 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -1
- data/Gemfile.lock +1 -1
- data/README.md +2 -11
- data/lib/esp/resources/external_account.rb +10 -0
- data/lib/esp/resources/scan_interval.rb +46 -0
- data/lib/esp/version.rb +1 -1
- data/lib/esp.rb +1 -0
- data/test/esp/resources/external_account_test.rb +11 -0
- data/test/esp/resources/scan_interval_test.rb +124 -0
- data/test/factories/scan_intervals.rb +32 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ba33c6b2844803fe17abc39fd0f2ecfdd3c86c3
|
4
|
+
data.tar.gz: a9f51f6b6e0abd70064f0de21ea5b365b69b2acf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15e6201640405e7dd7031147e38ff2342da257eba8ef8fd1d7a6e556f0eaf5c740c6953a2ab67522135e5cdbf57b6deed910551c302b325543d80890a3972b7b
|
7
|
+
data.tar.gz: 76c3758314ca2ff6121c25305fcb8151197293a3093dd115f9b13eca919b838e995b1027fee46678b5c6ea9f196c25f0115efbdf7b5f83110f7108ac2cd24dbd
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
## 2.
|
1
|
+
## 2.2.0 - 2016-03-2
|
2
|
+
### Added
|
3
|
+
- Added the ESP::ScanInterval object to use the new scan interval endpoint on the API
|
4
|
+
|
5
|
+
## 2.1.0 - 2016-02-10
|
2
6
|
### Added
|
3
7
|
- Implemented searching using `where` on many object.
|
4
8
|
- Add external account script. Run with `esp a`
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -206,7 +206,7 @@ The methods with a `!` suffix update the object, methods without the `!` suffix
|
|
206
206
|
original object.
|
207
207
|
|
208
208
|
```ruby
|
209
|
-
espsdk:004:0> alerts = ESP::Alert.
|
209
|
+
espsdk:004:0> alerts = ESP::Alert.where(report_id: 345)
|
210
210
|
espsdk:004:0> alerts.current_page_number # => "1"
|
211
211
|
espsdk:004:0> page2 = alerts.next_page
|
212
212
|
espsdk:004:0> alerts.current_page_number # => "1"
|
@@ -279,15 +279,6 @@ ESP::Signature.where(name_cont: 'dns')
|
|
279
279
|
#=> will return signatures `where name LIKE '%dns%'`
|
280
280
|
```
|
281
281
|
|
282
|
-
### OR Conditions
|
283
|
-
|
284
|
-
You can also combine predicates for OR queries:
|
285
|
-
|
286
|
-
```ruby
|
287
|
-
ESP::Signature.where(name_or_description_cont: 'dns')
|
288
|
-
#=> will return signatures `where name LIKE '%dns%' or description LIKE '%dns%'`
|
289
|
-
```
|
290
|
-
|
291
282
|
### Conditions on Relationships
|
292
283
|
|
293
284
|
The syntax for queries on an associated relationship is to just append the association name to the attribute:
|
@@ -459,7 +450,7 @@ ESP::Signature.where(identifier_null: 1)
|
|
459
450
|
Lists can also be sorted by adding the `sorts` parameter with the field to sort by to the `filter` parameter.
|
460
451
|
|
461
452
|
```ruby
|
462
|
-
ESP::Signature.where(name_cont: 'dns',
|
453
|
+
ESP::Signature.where(name_cont: 'dns', sorts: 'risk_level desc')
|
463
454
|
#=> will return signatures `where name LIKE '%dns%'` sorted by `risk_level` in descending order.
|
464
455
|
```
|
465
456
|
|
@@ -24,6 +24,16 @@ module ESP
|
|
24
24
|
super
|
25
25
|
end
|
26
26
|
|
27
|
+
# Returns a collection of scan_intervals for the external account
|
28
|
+
#
|
29
|
+
# ==== Example
|
30
|
+
#
|
31
|
+
# external_account = ESP::ExternalAccount.find(345)
|
32
|
+
# scan_intervals = external_account.scan_intervals
|
33
|
+
def scan_intervals
|
34
|
+
ESP::ScanInterval.for_external_account(id)
|
35
|
+
end
|
36
|
+
|
27
37
|
# :singleton-method: where
|
28
38
|
# Return a paginated ExternalAccount list filtered by search parameters
|
29
39
|
#
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ESP
|
2
|
+
class ScanInterval < ESP::Resource
|
3
|
+
##
|
4
|
+
# The external account the scan interval belongs to
|
5
|
+
belongs_to :external_account, class_name: 'ESP::ExternalAccount'
|
6
|
+
|
7
|
+
##
|
8
|
+
# The service the scan interval belongs to
|
9
|
+
belongs_to :service, class_name: 'ESP::Service'
|
10
|
+
|
11
|
+
# Find a Scan Interval by id
|
12
|
+
#
|
13
|
+
# ==== Parameter
|
14
|
+
#
|
15
|
+
# +id+ | Required | The ID of the scan interval to retrieve
|
16
|
+
#
|
17
|
+
# :call-seq:
|
18
|
+
# find(id)
|
19
|
+
def self.find(*arguments)
|
20
|
+
scope = arguments.slice!(0)
|
21
|
+
options = (arguments.slice!(0) || {}).with_indifferent_access
|
22
|
+
# If the first option is a number, we are looking for a specific object.
|
23
|
+
# Otherwise `all` calls this with either nil, or a hash of arguments, and we need
|
24
|
+
# to use our custom finder to use the correct URL
|
25
|
+
return super(scope, options) if scope.is_a?(Numeric) || options[:from].present?
|
26
|
+
params = options.fetch(:params, {}).with_indifferent_access
|
27
|
+
external_account_id = params.delete(:external_account_id)
|
28
|
+
for_external_account(external_account_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns a collection of scan_intervals for the given external_account_id
|
32
|
+
# Convenience method to use instead of ::find since a external_account_id is required to return alerts.
|
33
|
+
#
|
34
|
+
# ==== Parameters
|
35
|
+
#
|
36
|
+
# +external_account_id+ | Required | The ID of the external account to retrieve scan intervals for
|
37
|
+
#
|
38
|
+
# ==== Example
|
39
|
+
# alerts = ESP::ScanInterval.for_external_account(54)
|
40
|
+
def self.for_external_account(external_account_id = nil)
|
41
|
+
fail ArgumentError, "You must supply an external account id." unless external_account_id.present?
|
42
|
+
from = "#{prefix}external_accounts/#{external_account_id}/scan_intervals.json"
|
43
|
+
all(from: from)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/esp/version.rb
CHANGED
data/lib/esp.rb
CHANGED
@@ -92,6 +92,7 @@ module ESP
|
|
92
92
|
autoload :User, File.expand_path(File.dirname(__FILE__) + '/esp/resources/user')
|
93
93
|
autoload :Signature, File.expand_path(File.dirname(__FILE__) + '/esp/resources/signature')
|
94
94
|
autoload :CustomSignature, File.expand_path(File.dirname(__FILE__) + '/esp/resources/custom_signature')
|
95
|
+
autoload :ScanInterval, File.expand_path(File.dirname(__FILE__) + '/esp/resources/scan_interval')
|
95
96
|
autoload :Service, File.expand_path(File.dirname(__FILE__) + '/esp/resources/service')
|
96
97
|
autoload :Alert, File.expand_path(File.dirname(__FILE__) + '/esp/resources/alert')
|
97
98
|
autoload :RawAlert, File.expand_path(File.dirname(__FILE__) + '/esp/resources/raw_alert')
|
@@ -36,6 +36,17 @@ module ESP
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
+
context '#scan_intervals' do
|
40
|
+
should 'call the api for the external_account and the passed in params' do
|
41
|
+
external_account = build(:external_account)
|
42
|
+
stub_request(:get, %r{external_accounts/#{external_account.id}/scan_intervals.json*}).to_return(body: json_list(:scan_interval, 2))
|
43
|
+
|
44
|
+
external_account.scan_intervals
|
45
|
+
|
46
|
+
assert_requested(:get, %r{external_accounts/#{external_account.id}/scan_intervals.json*})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
39
50
|
context '#create' do
|
40
51
|
should "use the external_id in the params if supplied" do
|
41
52
|
stub_request(:post, /external_accounts.json*/).to_return(body: json(:external_account))
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
|
2
|
+
|
3
|
+
module ESP
|
4
|
+
class ScanIntervalTest < ActiveSupport::TestCase
|
5
|
+
context ESP::ScanInterval do
|
6
|
+
context '#external_account' do
|
7
|
+
should 'call the api' do
|
8
|
+
scan_interval = build(:scan_interval, external_account_id: 4)
|
9
|
+
stub_account = stub_request(:get, %r{external_accounts/#{scan_interval.external_account_id}.json*}).to_return(body: json(:external_account))
|
10
|
+
|
11
|
+
scan_interval.external_account
|
12
|
+
|
13
|
+
assert_requested(stub_account)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context '#service' do
|
18
|
+
should 'call the api' do
|
19
|
+
scan_interval = build(:scan_interval, service_id: 4)
|
20
|
+
stub_service = stub_request(:get, %r{services/#{scan_interval.service_id}.json*}).to_return(body: json(:service))
|
21
|
+
|
22
|
+
scan_interval.service
|
23
|
+
|
24
|
+
assert_requested(stub_service)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context '.for_external_account' do
|
29
|
+
should 'throw an error if report_id is not supplied' do
|
30
|
+
error = assert_raises ArgumentError do
|
31
|
+
ESP::ScanInterval.for_external_account
|
32
|
+
end
|
33
|
+
assert_equal 'You must supply an external account id.', error.message
|
34
|
+
end
|
35
|
+
|
36
|
+
should 'call the api and pass params' do
|
37
|
+
stub_request(:get, %r{external_accounts/5/scan_intervals.json*}).to_return(body: json_list(:scan_interval, 2))
|
38
|
+
|
39
|
+
intervals = ESP::ScanInterval.for_external_account(5)
|
40
|
+
|
41
|
+
assert_requested(:get, %r{external_accounts/5/scan_intervals.json*})
|
42
|
+
assert_equal ESP::ScanInterval, intervals.resource_class
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context '.find' do
|
47
|
+
should 'throw an error if external_account_id is not supplied' do
|
48
|
+
error = assert_raises ArgumentError do
|
49
|
+
ESP::ScanInterval.find(:all, params: { id: 3 })
|
50
|
+
end
|
51
|
+
assert_equal 'You must supply an external account id.', error.message
|
52
|
+
end
|
53
|
+
|
54
|
+
should 'call the show api and return an alert if searching by id' do
|
55
|
+
stub_scan_interval = stub_request(:get, %r{scan_intervals/5.json*}).to_return(body: json(:scan_interval))
|
56
|
+
|
57
|
+
scan_interval = ESP::ScanInterval.find(5)
|
58
|
+
|
59
|
+
assert_requested(stub_scan_interval)
|
60
|
+
assert_equal ESP::ScanInterval, scan_interval.class
|
61
|
+
end
|
62
|
+
|
63
|
+
should 'call the api and return scan_intervals when external_account_id is supplied' do
|
64
|
+
stub_scan_interval = stub_request(:get, %r{external_accounts/5/scan_intervals.json*}).to_return(body: json_list(:scan_interval, 2))
|
65
|
+
|
66
|
+
scan_interval = ESP::ScanInterval.find(:all, params: { external_account_id: 5 })
|
67
|
+
|
68
|
+
assert_requested(stub_scan_interval)
|
69
|
+
assert_equal ESP::ScanInterval, scan_interval.resource_class
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'live calls' do
|
74
|
+
setup do
|
75
|
+
skip "Make sure you run the live calls locally to ensure proper integration" if ENV['CI_SERVER']
|
76
|
+
WebMock.allow_net_connect!
|
77
|
+
@external_account = ESP::ExternalAccount.last
|
78
|
+
@service = ESP::Service.last
|
79
|
+
skip "Live DB does not have any external_accounts. Add an external_account and run tests again." if @external_account.blank?
|
80
|
+
skip "Live DB does not have any services. Add an service and run tests again." if @service.blank?
|
81
|
+
end
|
82
|
+
|
83
|
+
teardown do
|
84
|
+
# destroy record incase of failure
|
85
|
+
@scan_interval.destroy rescue nil # rubocop:disable Style/RescueModifier
|
86
|
+
WebMock.disable_net_connect!
|
87
|
+
end
|
88
|
+
|
89
|
+
context '#CRUD' do
|
90
|
+
should 'be able to create, update and destroy' do
|
91
|
+
@scan_interval = ESP::ScanInterval.new(interval: 15, service_id: @service.id, external_account_id: @external_account.id)
|
92
|
+
|
93
|
+
# Create
|
94
|
+
assert_predicate @scan_interval, :new?
|
95
|
+
@scan_interval.save
|
96
|
+
refute_predicate @scan_interval, :new?
|
97
|
+
|
98
|
+
# Update
|
99
|
+
@scan_interval.interval = 30
|
100
|
+
@scan_interval.save
|
101
|
+
assert_nothing_raised do
|
102
|
+
ESP::ScanInterval.find(@scan_interval.id.to_i)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Service Relationship
|
106
|
+
service = @scan_interval.service
|
107
|
+
assert_equal service.id, @service.id
|
108
|
+
|
109
|
+
# External Account Relationship
|
110
|
+
external_account = @scan_interval.external_account
|
111
|
+
assert_equal external_account.id, @external_account.id
|
112
|
+
|
113
|
+
# Destroy
|
114
|
+
@scan_interval.destroy
|
115
|
+
|
116
|
+
assert_raises ActiveResource::ResourceNotFound do
|
117
|
+
ESP::ScanInterval.find(@scan_interval.id.to_i)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :scan_interval, class: 'ESP::ScanInterval' do
|
3
|
+
skip_create
|
4
|
+
|
5
|
+
sequence(:id) { |n| n }
|
6
|
+
type "scan_intervals"
|
7
|
+
interval 15
|
8
|
+
created_at { Time.current }
|
9
|
+
updated_at { Time.current }
|
10
|
+
relationships do
|
11
|
+
{ external_account: {
|
12
|
+
data: {
|
13
|
+
type: "external_accounts",
|
14
|
+
id: "1"
|
15
|
+
},
|
16
|
+
links: {
|
17
|
+
related: "http://localhost:3000/api/v2/external_accounts/1.json"
|
18
|
+
}
|
19
|
+
},
|
20
|
+
service: {
|
21
|
+
data: {
|
22
|
+
type: "services",
|
23
|
+
id: "1"
|
24
|
+
},
|
25
|
+
links: {
|
26
|
+
related: "http://localhost:3000/api/v2/services/1.json"
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: esp_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evident.io
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02
|
11
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -337,6 +337,7 @@ files:
|
|
337
337
|
- lib/esp/resources/region.rb
|
338
338
|
- lib/esp/resources/report.rb
|
339
339
|
- lib/esp/resources/resource.rb
|
340
|
+
- lib/esp/resources/scan_interval.rb
|
340
341
|
- lib/esp/resources/service.rb
|
341
342
|
- lib/esp/resources/signature.rb
|
342
343
|
- lib/esp/resources/stat.rb
|
@@ -372,6 +373,7 @@ files:
|
|
372
373
|
- test/esp/resources/region_test.rb
|
373
374
|
- test/esp/resources/report_test.rb
|
374
375
|
- test/esp/resources/resource_test.rb
|
376
|
+
- test/esp/resources/scan_interval_test.rb
|
375
377
|
- test/esp/resources/service_test.rb
|
376
378
|
- test/esp/resources/signature_test.rb
|
377
379
|
- test/esp/resources/stat_custom_signature_test.rb
|
@@ -399,6 +401,7 @@ files:
|
|
399
401
|
- test/factories/organizations.rb
|
400
402
|
- test/factories/regions.rb
|
401
403
|
- test/factories/reports.rb
|
404
|
+
- test/factories/scan_intervals.rb
|
402
405
|
- test/factories/services.rb
|
403
406
|
- test/factories/signatures.rb
|
404
407
|
- test/factories/stat_custom_signatures.rb
|
@@ -457,6 +460,7 @@ test_files:
|
|
457
460
|
- test/esp/resources/region_test.rb
|
458
461
|
- test/esp/resources/report_test.rb
|
459
462
|
- test/esp/resources/resource_test.rb
|
463
|
+
- test/esp/resources/scan_interval_test.rb
|
460
464
|
- test/esp/resources/service_test.rb
|
461
465
|
- test/esp/resources/signature_test.rb
|
462
466
|
- test/esp/resources/stat_custom_signature_test.rb
|
@@ -484,6 +488,7 @@ test_files:
|
|
484
488
|
- test/factories/organizations.rb
|
485
489
|
- test/factories/regions.rb
|
486
490
|
- test/factories/reports.rb
|
491
|
+
- test/factories/scan_intervals.rb
|
487
492
|
- test/factories/services.rb
|
488
493
|
- test/factories/signatures.rb
|
489
494
|
- test/factories/stat_custom_signatures.rb
|