tenable-ruby 0.4.0 → 0.5

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 +70 -17
  3. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0ad4945418eed9203a963b29176367b98faa3edd12883d97cc49d8cdc893fba
4
- data.tar.gz: 24c17741e683b65c0c3c2362d7414f099153a7222bad4af37b2f3cb54b99523c
3
+ metadata.gz: 0ffe53830580db35bbb25fa2b418ef6fd4de79d276b65d65689f662270e1ea2e
4
+ data.tar.gz: 2a47587b3045d58b9b05ba186e288068da080ebd7497e129587ed7d8430011dc
5
5
  SHA512:
6
- metadata.gz: 4f1a50612125ce469b30e90ec69bc88b307646a1765841564fd127a539dfd8e1c8004fd82ff9a6d6dec0832e298c756edaa4dc67abd85db54039df0d0ddb627e
7
- data.tar.gz: 9cd6b2b9b3462a0750104aded927326facfe1efe097ac0520a3118baf3b836803c69145600bac9395145f10f5aa70f463170cb43f59d7afd2278fe7edea70bc8
6
+ metadata.gz: 718a5e61e6005ccb0500248309dc985614a37dd9905d45e8fac03d74281b1c61369500e61bba9f29b1a6391c35c17bc873ba0ef0a7c4927f5586197edf202d59
7
+ data.tar.gz: 89f12942cec5d12d0fbaa4775affa2805c362242434b229168fffa09c79d5219cfbc2cdb58e38c560abf11a79506809bb107a6b59dd1cf10dbc948ea151e635c
@@ -526,11 +526,11 @@ module TenableRuby
526
526
 
527
527
  # Performs scan with scan policy provided (uuid of policy or policy name).
528
528
  # 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))
529
+ # (scan_folder is optional - folder where to save the scan (if that folder exists))
530
530
  # (scanner_id is optional - ID of the scanner/cloud scanner you want to run this scan on)
531
531
  #
532
532
  # returns: JSON parsed object with scan info
533
- def scan_quick_policy(policyname, name, opts = {}, foldername = nil, scanner_id = nil)
533
+ def scan_quick_policy(policyname, name, opts = {}, scan_folder = nil, scanner_id = nil)
534
534
  policies = list_policies['policies']
535
535
  if policies.nil?
536
536
  raise TenableRuby::Error::TenableError, "Tenable API request 'list_policies' responded with 'nil'"
@@ -548,16 +548,18 @@ module TenableRuby
548
548
  settings.merge!(opts)
549
549
  settings['name'] = name
550
550
  settings['policy_id'] = policy['id']
551
- unless foldername.nil?
551
+ if scan_folder.is_a?(Integer)
552
+ settings['folder_id'] = scan_folder
553
+ elsif scan_folder.is_a?(String)
552
554
  folders = list_folders['folders']
553
555
  if folders.nil?
554
556
  raise TenableRuby::Error::TenableError, "Tenable API request 'list_folders' responded with 'nil'"
555
557
  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']
558
+ selected_folder = folders.find { |f| f['name'] == scan_folder }
559
+ if selected_folder
560
+ settings['folder_id'] = selected_folder['id']
561
+ else
562
+ raise TenableRuby::Error::TenableError, "Could not find folder with name #{scan_folder}"
561
563
  end
562
564
  end
563
565
  unless scanner_id.nil?
@@ -570,7 +572,12 @@ module TenableRuby
570
572
  #
571
573
  # Reference: https://developer.tenable.com/reference#scans-get-latest-status
572
574
  def scan_status(scan_id)
573
- http_get(:uri => "/scans/#{scan_id}/latest-status", :fields => header)['status']
575
+ response = http_get(:uri => "/scans/#{scan_id}/latest-status", :fields => header)
576
+ if response.is_a?(Hash) and response.has_key?('status')
577
+ response['status']
578
+ else
579
+ raise TenableRuby::Error::TenableError, "Tenable.io did not return a valid status response"
580
+ end
574
581
  end
575
582
 
576
583
  # Parse the scan status command to determine if a scan has finished
@@ -692,6 +699,48 @@ module TenableRuby
692
699
  http_get(:uri => "/container-security/api/v1/reports/by_image_digest?image_digest=#{image_digest}", :fields => header)
693
700
  end
694
701
 
702
+ # Creates a new target group for the current user.
703
+ #
704
+ # Reference:
705
+ # https://developer.tenable.com/reference#target-groups-create
706
+ def create_target_group(name, members, acls: nil)
707
+ http_post(:uri => "/target-groups", :fields => header,
708
+ :data => {:name => name, :members => members, :acls => acls})
709
+ end
710
+
711
+ # Returns the current target groups.
712
+ #
713
+ # Reference:
714
+ # https://developer.tenable.com/reference#target-groups-list
715
+ def list_target_groups
716
+ http_get(:uri => "/target-groups", :fields => header)
717
+ end
718
+
719
+ # Returns details for the specified target group.
720
+ #
721
+ # Reference:
722
+ # https://developer.tenable.com/reference#target-groups-details
723
+ def get_target_group(group_id)
724
+ http_get(:uri => "/target-groups/#{group_id}", :fields => header)
725
+ end
726
+
727
+ # Updates a target group.
728
+ #
729
+ # Reference:
730
+ # https://developer.tenable.com/reference#target-groups-edit
731
+ def update_target_group(group_id, name, members, acls: nil)
732
+ http_put(:uri => "/target-groups/#{group_id}", :fields => header,
733
+ :data => {:name => name, :members => members, :acls => acls})
734
+ end
735
+
736
+ # Deletes a target group.
737
+ #
738
+ # Reference:
739
+ # https://developer.tenable.com/reference#target-groups-delete
740
+ def delete_target_group(group_id)
741
+ http_delete(:uri => "/target-groups/#{group_id}", :fields => header)
742
+ end
743
+
695
744
  private
696
745
 
697
746
  # Perform HTTP put method with uri, data and fields
@@ -799,7 +848,6 @@ module TenableRuby
799
848
  uri = opts[:uri]
800
849
  fields = opts[:fields] || {}
801
850
  raw_content = opts[:raw_content] || false
802
- json = {}
803
851
  tries = @httpretry
804
852
 
805
853
  request = Net::HTTP::Get.new(uri)
@@ -815,11 +863,17 @@ module TenableRuby
815
863
  sleep @httpsleep
816
864
  retry
817
865
  else
818
- return json
866
+ raise TenableRuby::Error::TenableError.new("#{e}: No more retries for http GET '#{opts[:uri]}'")
819
867
  end
820
- rescue URI::InvalidURIError
821
- return json
868
+ rescue URI::InvalidURIError => e
869
+ raise TenableRuby::Error::TenableError.new("#{e}: http GET '#{opts[:uri]}'")
870
+ end
871
+
872
+ if response.code.to_s != "200"
873
+ raise TenableRuby::Error::TenableError.new(response: response),
874
+ "Tenable API request '#{opts[:uri]}' responded with response code #{response.code}"
822
875
  end
876
+
823
877
  if !raw_content
824
878
  parse_json(response.body)
825
879
  else
@@ -854,7 +908,6 @@ module TenableRuby
854
908
  fields = opts[:fields] || {}
855
909
  body = opts[:body]
856
910
  ctype = opts[:ctype]
857
- json = {}
858
911
  tries = @httpretry
859
912
 
860
913
  request = Net::HTTP::Post.new(uri)
@@ -873,10 +926,10 @@ module TenableRuby
873
926
  sleep @httpsleep
874
927
  retry
875
928
  else
876
- return json
929
+ raise TenableRuby::Error::TenableError.new("#{e}: No more retries for http POST '#{opts[:uri]}'")
877
930
  end
878
- rescue URI::InvalidURIError
879
- return json
931
+ rescue URI::InvalidURIError => e
932
+ raise TenableRuby::Error::TenableError.new("#{e}: http POST '#{opts[:uri]}'")
880
933
  end
881
934
 
882
935
  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.0
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Craston
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-24 00:00:00.000000000 Z
11
+ date: 2020-07-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Ruby library for communicating with the tenable.io API.
@@ -25,7 +25,7 @@ homepage: https://gitlab.com/intruder/tenable-ruby
25
25
  licenses:
26
26
  - MIT
27
27
  metadata: {}
28
- post_install_message:
28
+ post_install_message:
29
29
  rdoc_options: []
30
30
  require_paths:
31
31
  - lib
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
41
  version: '0'
42
42
  requirements: []
43
43
  rubygems_version: 3.0.3
44
- signing_key:
44
+ signing_key:
45
45
  specification_version: 4
46
46
  summary: Ruby library for communicating with the tenable.io API
47
47
  test_files: []