diff --git a/Gemfile b/Gemfile index 93108f21..2037289e 100644 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,7 @@ gem "aws-sdk-inspector2" gem "httparty" gem "ipaddress" gem "rest-client" -gem "rexml", ">= 3.3.3" +gem "rexml", ">= 3.3.6" gem "ruby-limiter" gem "sanitize" gem "strscan" diff --git a/Gemfile.lock b/Gemfile.lock index 50356637..b4cb199b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -92,8 +92,7 @@ GEM netrc (~> 0.8) reverse_markdown (2.1.1) nokogiri - rexml (3.3.5) - strscan + rexml (3.3.8) rspec (3.12.0) rspec-core (~> 3.12.0) rspec-expectations (~> 3.12.0) @@ -186,7 +185,7 @@ DEPENDENCIES pry pry-byebug rest-client - rexml (>= 3.3.3) + rexml (>= 3.3.6) rspec rspec-github rubocop diff --git a/log/vcr_debug.log b/log/vcr_debug.log index b79cb54a..b4170621 100644 --- a/log/vcr_debug.log +++ b/log/vcr_debug.log @@ -3231,14 +3231,8 @@ [Cassette: 'snyk_v2_task_run'] uri (matched): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] [Cassette: 'snyk_v2_task_run'] Found matching interaction for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] at index 0: [200 "{\"jsonapi\":{\"version\":\"1.0\"},\"data\":[{\"type\":\"project\",\"id\":\"abcd5678-1234-efgh-"] [webmock] Identified request type (stubbed_by_vcr) for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] -[webmock] Handling request: [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] (disabled: false) - [Cassette: 'snyk_v2_task_run'] Checking if [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] matches [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29] using [:method, :uri] - [Cassette: 'snyk_v2_task_run'] method (matched): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29] - [Cassette: 'snyk_v2_task_run'] uri (did not match): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29] -[webmock] Identified request type (unhandled) for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] - [Cassette: 'snyk_v2_task_run'] Checking if [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] matches [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] using [:method, :uri] - [Cassette: 'snyk_v2_task_run'] method (matched): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] - [Cassette: 'snyk_v2_task_run'] uri (did not match): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] +[webmock] Handling request: [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-09-08T00:00:00Z&created_before=2024-10-08T00:00:00Z&limit=10&version=2024-04-29] (disabled: false) +[webmock] Identified request type (externally_stubbed) for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-09-08T00:00:00Z&created_before=2024-10-08T00:00:00Z&limit=10&version=2024-04-29] [Cassette: 'snyk_v2_task_run'] Initialized with options: {:record=>:once, :record_on_error=>true, :match_requests_on=>[:method, :uri], :allow_unused_http_interactions=>true, :serialize_with=>:yaml, :persist_with=>:file_system, :persister_options=>{}} [webmock] Handling request: [get http://169.254.169.254/latest/metadata/] (disabled: false) [webmock] Identified request type (externally_stubbed) for [get http://169.254.169.254/latest/metadata/] @@ -3261,14 +3255,8 @@ [Cassette: 'snyk_v2_task_run'] uri (matched): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] [Cassette: 'snyk_v2_task_run'] Found matching interaction for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] at index 0: [200 "{\"jsonapi\":{\"version\":\"1.0\"},\"data\":[{\"type\":\"project\",\"id\":\"abcd5678-1234-efgh-"] [webmock] Identified request type (stubbed_by_vcr) for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] -[webmock] Handling request: [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] (disabled: false) - [Cassette: 'snyk_v2_task_run'] Checking if [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] matches [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29] using [:method, :uri] - [Cassette: 'snyk_v2_task_run'] method (matched): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29] - [Cassette: 'snyk_v2_task_run'] uri (did not match): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29] -[webmock] Identified request type (unhandled) for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] - [Cassette: 'snyk_v2_task_run'] Checking if [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] matches [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] using [:method, :uri] - [Cassette: 'snyk_v2_task_run'] method (matched): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] - [Cassette: 'snyk_v2_task_run'] uri (did not match): current request [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-07-13T00:00:00Z&created_before=2024-08-12T00:00:00Z&limit=10&version=2024-04-29] vs [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/projects?limit=100&version=2024-04-29] +[webmock] Handling request: [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-09-08T00:00:00Z&created_before=2024-10-08T00:00:00Z&limit=10&version=2024-04-29] (disabled: false) +[webmock] Identified request type (externally_stubbed) for [get https://api.eu.snyk.io/rest/orgs/abcd1234-5678-90ef-ghij-klmnopqrstuv/issues?created_after=2024-09-08T00:00:00Z&created_before=2024-10-08T00:00:00Z&limit=10&version=2024-04-29] [webmock] Handling request: [get http://169.254.169.254/latest/metadata/] (disabled: false) [webmock] Identified request type (externally_stubbed) for [get http://169.254.169.254/latest/metadata/] [webmock] Handling request: [get http://169.254.169.254/latest/metadata/] (disabled: false) diff --git a/spec/tasks/connectors/snyk_v2/snyk_v2_stubs.rb b/spec/tasks/connectors/snyk_v2/snyk_v2_stubs.rb index f3801df0..5bb3e8cb 100644 --- a/spec/tasks/connectors/snyk_v2/snyk_v2_stubs.rb +++ b/spec/tasks/connectors/snyk_v2/snyk_v2_stubs.rb @@ -15,7 +15,7 @@ def stub_projects_request end def stub_issues_request - stub_request(:get, Addressable::Template.new("https://api.eu.snyk.io/rest/orgs/{orgId}/issues?created_after=2024-07-14T00:00:00Z&created_before=2024-08-13T00:00:00Z&limit=10&version=2024-04-29")) + stub_request(:get, Addressable::Template.new("https://api.eu.snyk.io/rest/orgs/{orgId}/issues?created_after=2024-09-08T00:00:00Z&created_before=2024-10-08T00:00:00Z&limit=10&version=2024-04-29")) .to_return_json(body: read_fixture_file("issues.json")) end end diff --git a/spec/tasks/connectors/snyk_v2/snyk_v2_task_spec.rb b/spec/tasks/connectors/snyk_v2/snyk_v2_task_spec.rb index 8af04414..c0713039 100644 --- a/spec/tasks/connectors/snyk_v2/snyk_v2_task_spec.rb +++ b/spec/tasks/connectors/snyk_v2/snyk_v2_task_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "rspec_helper" +require "timecop" require_relative "snyk_v2_stubs" RSpec.describe Kenna::Toolkit::SnykV2Task do @@ -13,6 +14,9 @@ let(:options) { { snyk_api_token: '2dfbc991-a5e2-487b-a19c-eeb213bd0c7c', import_type: } } before do + @now = Date.new(2024, 10, 8) + Timecop.freeze(@now) + stub_orgs_request stub_projects_request stub_issues_request @@ -25,7 +29,7 @@ it "creates normalized (non-duplicative) vuln_defs" do VCR.use_cassette('snyk_v2_task_run') do - task.run(options) # EjecuciĆ³n de la tarea dentro del bloque VCR + task.run(options) end expect(task.vuln_defs).to include( diff --git a/tasks/connectors/snyk_v2/snyk_v2_task.rb b/tasks/connectors/snyk_v2/snyk_v2_task.rb index 470ab544..27c02de9 100644 --- a/tasks/connectors/snyk_v2/snyk_v2_task.rb +++ b/tasks/connectors/snyk_v2/snyk_v2_task.rb @@ -20,15 +20,15 @@ def self.metadata default: nil, description: "Snyk API Token" }, { name: "retrieve_from", - type: "date", + type: "integer", required: false, default: 30, - description: "default will be 30 days before today format: YYYY-MM-DD" }, + description: "Default will be 30 days before today, format: Integer" }, { name: "include_license", type: "boolean", required: false, default: false, - description: "retrieve license issues." }, + description: "Retrieve license issues." }, { name: "page_size", type: "integer", required: false,