tenable-ruby 0.4.2 → 0.5.2

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tenable-ruby.rb +49 -20
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a307cd9672be72bc72d8aeee16cf07083250883bd6bb26c38a7e2a6344162b66
4
- data.tar.gz: b415f2321cc7d6e14bb1ec621b33093424c05050fcb8da747beb10f554f236bd
3
+ metadata.gz: 819f8651b369e488bf93369f4ebd57888b78f30d76395252597971ca5d69f06b
4
+ data.tar.gz: 7b77a9e7f582e4a3de408b702c338b21364ca7c149cf0e7b163918a6038625f1
5
5
  SHA512:
6
- metadata.gz: 6ef0ab799275410df467d988583b0dcb8d777aaf018806dd46eac988f0e93b0e1151f9fb18e2c313cf3617b0fb4bc656949c26c572a72aab6b36d87444798881
7
- data.tar.gz: a5f78981f65993467351de830a3e1c76b85477e3efa049746078e78405c06b40c65dd15d7a804340ca0f1dd6d2a5c8b544ce87ad796cce3c688818703b2fcaca
6
+ metadata.gz: c2baf2dd3de8b86fab0f6cb88b97957d29fe638a9ef64b247d085d10ad784f389f2a815d64c9b89073fe06620bbe69cf5b50a47931dc71c2904a2d61d9928ab5
7
+ data.tar.gz: 828494940880467224183077a2b1a535e3173be53b63bb89f7982a415d1961473e8a7ef582a4780dbeda3d6886185c6bd8673f655ff56347abe271ac285dd61a
@@ -307,6 +307,29 @@ module TenableRuby
307
307
  http_put(options)
308
308
  end
309
309
 
310
+ # Unlinks an agent
311
+ #
312
+ # Reference
313
+ # https://developer.tenable.com/reference#agents-delete
314
+ def agent_unlink(scanner_id, agent_id)
315
+ http_delete(:uri => "/scanners/#{scanner_id}/agents/#{agent_id}", :fields => header)
316
+ end
317
+
318
+ # Creates a bulk operation task to unlink agents
319
+ #
320
+ # Reference
321
+ # https://developer.tenable.com/reference#bulk-unlink-agents
322
+ def agent_bulk_unlink(scanner_id, agent_ids)
323
+ http_post(
324
+ :uri => "/scanners/#{scanner_id}/agents/_bulk/unlink",
325
+ :fields => header,
326
+ :body => {
327
+ :items => agent_ids
328
+ },
329
+ :ctype => 'application/json',
330
+ )
331
+ end
332
+
310
333
  # Returns details of the specified asset.
311
334
  #
312
335
  # Reference:
@@ -526,11 +549,11 @@ module TenableRuby
526
549
 
527
550
  # Performs scan with scan policy provided (uuid of policy or policy name).
528
551
  # Name is your scan name and opts is your scan configuration hash
529
- # (foldername is optional - folder where to save the scan (if that folder exists))
552
+ # (scan_folder is optional - folder where to save the scan (if that folder exists))
530
553
  # (scanner_id is optional - ID of the scanner/cloud scanner you want to run this scan on)
531
554
  #
532
555
  # returns: JSON parsed object with scan info
533
- def scan_quick_policy(policyname, name, opts = {}, foldername = nil, scanner_id = nil)
556
+ def scan_quick_policy(policyname, name, opts = {}, scan_folder = nil, scanner_id = nil)
534
557
  policies = list_policies['policies']
535
558
  if policies.nil?
536
559
  raise TenableRuby::Error::TenableError, "Tenable API request 'list_policies' responded with 'nil'"
@@ -548,16 +571,18 @@ module TenableRuby
548
571
  settings.merge!(opts)
549
572
  settings['name'] = name
550
573
  settings['policy_id'] = policy['id']
551
- unless foldername.nil?
574
+ if scan_folder.is_a?(Integer)
575
+ settings['folder_id'] = scan_folder
576
+ elsif scan_folder.is_a?(String)
552
577
  folders = list_folders['folders']
553
578
  if folders.nil?
554
579
  raise TenableRuby::Error::TenableError, "Tenable API request 'list_folders' responded with 'nil'"
555
580
  end
556
- selected_folders = folders.select do |folder|
557
- folder['name'] == foldername
558
- end
559
- unless selected_folders.size == 0
560
- settings['folder_id'] = selected_folders.first['id']
581
+ selected_folder = folders.find { |f| f['name'] == scan_folder }
582
+ if selected_folder
583
+ settings['folder_id'] = selected_folder['id']
584
+ else
585
+ raise TenableRuby::Error::TenableError, "Could not find folder with name #{scan_folder}"
561
586
  end
562
587
  end
563
588
  unless scanner_id.nil?
@@ -701,9 +726,9 @@ module TenableRuby
701
726
  #
702
727
  # Reference:
703
728
  # https://developer.tenable.com/reference#target-groups-create
704
- def create_target_group(name, members, acls: [])
729
+ def create_target_group(name, members, acls: nil)
705
730
  http_post(:uri => "/target-groups", :fields => header,
706
- :body => {:name => name, :members => members, :acls => alcs})
731
+ :data => {:name => name, :members => members, :acls => acls})
707
732
  end
708
733
 
709
734
  # Returns the current target groups.
@@ -726,9 +751,9 @@ module TenableRuby
726
751
  #
727
752
  # Reference:
728
753
  # https://developer.tenable.com/reference#target-groups-edit
729
- def update_target_group(group_id:, name:, members:, acls: nil)
754
+ def update_target_group(group_id, name, members, acls: nil)
730
755
  http_put(:uri => "/target-groups/#{group_id}", :fields => header,
731
- :body => {:name => name, :members => members, :acls => acls})
756
+ :data => {:name => name, :members => members, :acls => acls})
732
757
  end
733
758
 
734
759
  # Deletes a target group.
@@ -846,7 +871,6 @@ module TenableRuby
846
871
  uri = opts[:uri]
847
872
  fields = opts[:fields] || {}
848
873
  raw_content = opts[:raw_content] || false
849
- json = {}
850
874
  tries = @httpretry
851
875
 
852
876
  request = Net::HTTP::Get.new(uri)
@@ -862,11 +886,17 @@ module TenableRuby
862
886
  sleep @httpsleep
863
887
  retry
864
888
  else
865
- return json
889
+ raise TenableRuby::Error::TenableError.new("#{e}: No more retries for http GET '#{opts[:uri]}'")
866
890
  end
867
- rescue URI::InvalidURIError
868
- return json
891
+ rescue URI::InvalidURIError => e
892
+ raise TenableRuby::Error::TenableError.new("#{e}: http GET '#{opts[:uri]}'")
893
+ end
894
+
895
+ if response.code.to_s != "200"
896
+ raise TenableRuby::Error::TenableError.new(response: response),
897
+ "Tenable API request '#{opts[:uri]}' responded with response code #{response.code}"
869
898
  end
899
+
870
900
  if !raw_content
871
901
  parse_json(response.body)
872
902
  else
@@ -901,7 +931,6 @@ module TenableRuby
901
931
  fields = opts[:fields] || {}
902
932
  body = opts[:body]
903
933
  ctype = opts[:ctype]
904
- json = {}
905
934
  tries = @httpretry
906
935
 
907
936
  request = Net::HTTP::Post.new(uri)
@@ -920,10 +949,10 @@ module TenableRuby
920
949
  sleep @httpsleep
921
950
  retry
922
951
  else
923
- return json
952
+ raise TenableRuby::Error::TenableError.new("#{e}: No more retries for http POST '#{opts[:uri]}'")
924
953
  end
925
- rescue URI::InvalidURIError
926
- return json
954
+ rescue URI::InvalidURIError => e
955
+ raise TenableRuby::Error::TenableError.new("#{e}: http POST '#{opts[:uri]}'")
927
956
  end
928
957
 
929
958
  if response.code.to_s != "200"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tenable-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Craston
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-09 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Ruby library for communicating with the tenable.io API.