tenable-ruby 0.4.0 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
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: []