inspec-core 4.3.2 → 4.6.3
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.
- checksums.yaml +4 -4
- data/README.md +37 -21
- data/etc/deprecations.json +10 -0
- data/etc/plugin_filters.json +8 -0
- data/lib/bundles/inspec-compliance/api.rb +1 -1
- data/lib/bundles/inspec-compliance/configuration.rb +1 -1
- data/lib/bundles/inspec-compliance/http.rb +1 -1
- data/lib/bundles/inspec-compliance/support.rb +1 -1
- data/lib/bundles/inspec-compliance/target.rb +1 -1
- data/lib/bundles/inspec-supermarket.rb +3 -7
- data/lib/bundles/inspec-supermarket/api.rb +10 -13
- data/lib/bundles/inspec-supermarket/cli.rb +12 -15
- data/lib/bundles/inspec-supermarket/target.rb +7 -11
- data/lib/fetchers/git.rb +14 -15
- data/lib/fetchers/local.rb +6 -10
- data/lib/fetchers/mock.rb +3 -5
- data/lib/fetchers/url.rb +42 -44
- data/lib/inspec.rb +23 -24
- data/lib/inspec/archive/tar.rb +2 -6
- data/lib/inspec/archive/zip.rb +3 -7
- data/lib/inspec/backend.rb +8 -9
- data/lib/inspec/base_cli.rb +64 -65
- data/lib/inspec/cached_fetcher.rb +2 -3
- data/lib/inspec/cli.rb +136 -97
- data/lib/inspec/config.rb +71 -61
- data/lib/inspec/control_eval_context.rb +22 -18
- data/lib/inspec/dependencies/cache.rb +2 -3
- data/lib/inspec/dependencies/dependency_set.rb +2 -3
- data/lib/inspec/dependencies/lockfile.rb +8 -9
- data/lib/inspec/dependencies/requirement.rb +7 -8
- data/lib/inspec/dependencies/resolver.rb +5 -7
- data/lib/inspec/describe.rb +2 -6
- data/lib/inspec/dist.rb +20 -0
- data/lib/inspec/dsl.rb +4 -7
- data/lib/inspec/dsl_shared.rb +1 -2
- data/lib/inspec/env_printer.rb +11 -12
- data/lib/inspec/errors.rb +0 -4
- data/lib/inspec/exceptions.rb +0 -1
- data/lib/inspec/expect.rb +5 -8
- data/lib/inspec/fetcher.rb +7 -10
- data/lib/inspec/file_provider.rb +24 -24
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +8 -8
- data/lib/inspec/globals.rb +2 -2
- data/lib/inspec/impact.rb +5 -7
- data/lib/inspec/input_registry.rb +84 -33
- data/lib/inspec/library_eval_context.rb +3 -6
- data/lib/inspec/log.rb +1 -5
- data/lib/inspec/metadata.rb +17 -16
- data/lib/inspec/method_source.rb +5 -9
- data/lib/inspec/objects.rb +10 -12
- data/lib/inspec/objects/control.rb +7 -9
- data/lib/inspec/objects/describe.rb +9 -11
- data/lib/inspec/objects/each_loop.rb +1 -3
- data/lib/inspec/objects/input.rb +24 -26
- data/lib/inspec/objects/list.rb +4 -6
- data/lib/inspec/objects/or_test.rb +2 -4
- data/lib/inspec/objects/ruby_helper.rb +3 -5
- data/lib/inspec/objects/tag.rb +0 -2
- data/lib/inspec/objects/test.rb +9 -11
- data/lib/inspec/objects/value.rb +3 -5
- data/lib/inspec/plugin/v1.rb +2 -2
- data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
- data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
- data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
- data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
- data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
- data/lib/inspec/plugin/v1/plugins.rb +15 -19
- data/lib/inspec/plugin/v1/registry.rb +0 -4
- data/lib/inspec/plugin/v2.rb +8 -8
- data/lib/inspec/plugin/v2/activator.rb +1 -1
- data/lib/inspec/plugin/v2/config_file.rb +6 -6
- data/lib/inspec/plugin/v2/filter.rb +13 -13
- data/lib/inspec/plugin/v2/installer.rb +36 -24
- data/lib/inspec/plugin/v2/loader.rb +28 -28
- data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
- data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
- data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
- data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
- data/lib/inspec/plugin/v2/registry.rb +7 -7
- data/lib/inspec/polyfill.rb +0 -3
- data/lib/inspec/profile.rb +55 -63
- data/lib/inspec/profile_context.rb +27 -30
- data/lib/inspec/profile_vendor.rb +6 -9
- data/lib/inspec/reporters.rb +24 -24
- data/lib/inspec/reporters/automate.rb +17 -19
- data/lib/inspec/reporters/base.rb +1 -1
- data/lib/inspec/reporters/cli.rb +88 -91
- data/lib/inspec/reporters/json.rb +2 -4
- data/lib/inspec/reporters/json_automate.rb +1 -3
- data/lib/inspec/reporters/json_min.rb +1 -3
- data/lib/inspec/reporters/junit.rb +26 -28
- data/lib/inspec/reporters/yaml.rb +1 -3
- data/lib/inspec/require_loader.rb +0 -4
- data/lib/inspec/resource.rb +4 -125
- data/lib/inspec/resources.rb +121 -0
- data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
- data/lib/{resources → inspec/resources}/apache.rb +13 -14
- data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
- data/lib/{resources → inspec/resources}/apt.rb +17 -17
- data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
- data/lib/{resources → inspec/resources}/auditd.rb +62 -64
- data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
- data/lib/{resources → inspec/resources}/bash.rb +6 -8
- data/lib/{resources → inspec/resources}/bond.rb +15 -14
- data/lib/{resources → inspec/resources}/bridge.rb +8 -8
- data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
- data/lib/{resources → inspec/resources}/command.rb +11 -10
- data/lib/{resources → inspec/resources}/cpan.rb +12 -12
- data/lib/{resources → inspec/resources}/cran.rb +9 -9
- data/lib/{resources → inspec/resources}/crontab.rb +47 -48
- data/lib/{resources → inspec/resources}/csv.rb +5 -5
- data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
- data/lib/{resources → inspec/resources}/directory.rb +5 -7
- data/lib/{resources → inspec/resources}/docker.rb +63 -63
- data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
- data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
- data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
- data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
- data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
- data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
- data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
- data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
- data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
- data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
- data/lib/{resources → inspec/resources}/file.rb +80 -79
- data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
- data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
- data/lib/{resources → inspec/resources}/gem.rb +12 -12
- data/lib/{resources → inspec/resources}/groups.rb +28 -27
- data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
- data/lib/{resources → inspec/resources}/host.rb +31 -29
- data/lib/{resources → inspec/resources}/http.rb +24 -24
- data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
- data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
- data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
- data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
- data/lib/{resources → inspec/resources}/ini.rb +7 -8
- data/lib/{resources → inspec/resources}/interface.rb +30 -30
- data/lib/{resources → inspec/resources}/iptables.rb +8 -8
- data/lib/{resources → inspec/resources}/json.rb +8 -10
- data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
- data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
- data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
- data/lib/{resources → inspec/resources}/ksh.rb +6 -8
- data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
- data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
- data/lib/{resources → inspec/resources}/mount.rb +6 -8
- data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
- data/lib/inspec/resources/mysql.rb +81 -0
- data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
- data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
- data/lib/{resources → inspec/resources}/nginx.rb +16 -17
- data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
- data/lib/{resources → inspec/resources}/npm.rb +9 -10
- data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
- data/lib/{resources → inspec/resources}/oneget.rb +8 -8
- data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
- data/lib/{resources → inspec/resources}/os.rb +6 -8
- data/lib/{resources → inspec/resources}/os_env.rb +11 -12
- data/lib/{resources → inspec/resources}/package.rb +66 -65
- data/lib/{resources → inspec/resources}/packages.rb +13 -13
- data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
- data/lib/{resources → inspec/resources}/passwd.rb +18 -19
- data/lib/{resources → inspec/resources}/pip.rb +19 -19
- data/lib/{resources → inspec/resources}/platform.rb +9 -11
- data/lib/{resources → inspec/resources}/port.rb +134 -136
- data/lib/{resources → inspec/resources}/postgres.rb +40 -32
- data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
- data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
- data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
- data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
- data/lib/{resources → inspec/resources}/powershell.rb +17 -13
- data/lib/{resources → inspec/resources}/processes.rb +29 -29
- data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
- data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
- data/lib/inspec/resources/script.rb +1 -0
- data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
- data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
- data/lib/{resources → inspec/resources}/service.rb +74 -75
- data/lib/{resources → inspec/resources}/shadow.rb +44 -45
- data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
- data/lib/{resources → inspec/resources}/ssl.rb +28 -29
- data/lib/inspec/resources/sys_info.rb +30 -0
- data/lib/{resources → inspec/resources}/toml.rb +5 -7
- data/lib/{resources → inspec/resources}/users.rb +65 -65
- data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
- data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
- data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
- data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
- data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
- data/lib/{resources → inspec/resources}/wmi.rb +7 -8
- data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
- data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
- data/lib/{resources → inspec/resources}/xml.rb +7 -7
- data/lib/{resources → inspec/resources}/yaml.rb +5 -6
- data/lib/{resources → inspec/resources}/yum.rb +10 -10
- data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
- data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
- data/lib/inspec/rspec_extensions.rb +24 -8
- data/lib/inspec/rule.rb +14 -15
- data/lib/inspec/runner.rb +28 -28
- data/lib/inspec/runner_mock.rb +1 -5
- data/lib/inspec/runner_rspec.rb +18 -20
- data/lib/inspec/runtime_profile.rb +2 -5
- data/lib/inspec/schema.rb +142 -143
- data/lib/inspec/secrets.rb +3 -7
- data/lib/inspec/secrets/yaml.rb +3 -5
- data/lib/inspec/shell.rb +11 -15
- data/lib/inspec/shell_detector.rb +6 -7
- data/lib/inspec/source_reader.rb +4 -8
- data/lib/inspec/ui.rb +33 -39
- data/lib/inspec/ui_table_helper.rb +12 -0
- data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
- data/lib/{utils → inspec/utils}/convert.rb +0 -4
- data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
- data/lib/inspec/utils/deprecation.rb +6 -0
- data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
- data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
- data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
- data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
- data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
- data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
- data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
- data/lib/{utils → inspec/utils}/filter.rb +30 -33
- data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
- data/lib/{utils → inspec/utils}/find_files.rb +9 -12
- data/lib/{utils → inspec/utils}/hash.rb +1 -5
- data/lib/inspec/utils/json_log.rb +15 -0
- data/lib/inspec/utils/latest_version.rb +13 -0
- data/lib/{utils → inspec/utils}/modulator.rb +0 -3
- data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
- data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
- data/lib/{utils → inspec/utils}/parser.rb +45 -45
- data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
- data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
- data/lib/{utils → inspec/utils}/spdx.rb +1 -4
- data/lib/{utils → inspec/utils}/spdx.txt +0 -0
- data/lib/inspec/utils/telemetry.rb +3 -3
- data/lib/inspec/utils/telemetry/collector.rb +30 -9
- data/lib/inspec/utils/telemetry/data_series.rb +3 -1
- data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/matchers/matchers.rb +22 -25
- data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
- data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
- data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
- data/lib/plugins/inspec-habitat/Berksfile +2 -2
- data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
- data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
- data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
- data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
- data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
- data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
- data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
- data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
- data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
- data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
- data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
- data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
- data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
- data/lib/source_readers/flat.rb +6 -10
- data/lib/source_readers/inspec.rb +8 -12
- metadata +139 -140
- data/lib/resources/mysql.rb +0 -82
- data/lib/resources/sys_info.rb +0 -28
- data/lib/utils/deprecation.rb +0 -6
- data/lib/utils/json_log.rb +0 -18
- data/lib/utils/latest_version.rb +0 -22
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
require "inspec/dist"
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative "api"
|
|
4
4
|
|
|
5
5
|
module InspecPlugins
|
|
6
6
|
module Compliance
|
|
7
7
|
class CLI < Inspec.plugin(2, :cli_command)
|
|
8
|
-
|
|
8
|
+
include Inspec::Dist
|
|
9
|
+
|
|
10
|
+
subcommand_desc "compliance SUBCOMMAND", "#{COMPLIANCE_PRODUCT_NAME} commands"
|
|
9
11
|
|
|
10
12
|
# desc "login https://SERVER --insecure --user='USER' --ent='ENTERPRISE' --token='TOKEN'", 'Log in to a Chef Compliance/Chef Automate SERVER'
|
|
11
|
-
desc
|
|
13
|
+
desc "login", "Log in to a #{COMPLIANCE_PRODUCT_NAME}/#{AUTOMATE_PRODUCT_NAME} SERVER"
|
|
12
14
|
long_desc <<-LONGDESC
|
|
13
|
-
`login` allows you to use InSpec with
|
|
15
|
+
`login` allows you to use InSpec with #{AUTOMATE_PRODUCT_NAME} or a #{COMPLIANCE_PRODUCT_NAME} Server
|
|
14
16
|
|
|
15
17
|
You need to a token for communication. More information about token retrieval
|
|
16
18
|
is available at:
|
|
@@ -20,54 +22,54 @@ module InspecPlugins
|
|
|
20
22
|
option :insecure, aliases: :k, type: :boolean,
|
|
21
23
|
desc: 'Explicitly allows InSpec to perform "insecure" SSL connections and transfers'
|
|
22
24
|
option :user, type: :string, required: false,
|
|
23
|
-
desc:
|
|
25
|
+
desc: "Username"
|
|
24
26
|
option :password, type: :string, required: false,
|
|
25
|
-
desc:
|
|
27
|
+
desc: "Password (#{COMPLIANCE_PRODUCT_NAME} Only)"
|
|
26
28
|
option :token, type: :string, required: false,
|
|
27
|
-
desc:
|
|
29
|
+
desc: "Access token"
|
|
28
30
|
option :refresh_token, type: :string, required: false,
|
|
29
|
-
desc:
|
|
31
|
+
desc: "#{COMPLIANCE_PRODUCT_NAME} refresh token (#{COMPLIANCE_PRODUCT_NAME} Only)"
|
|
30
32
|
option :dctoken, type: :string, required: false,
|
|
31
|
-
desc:
|
|
33
|
+
desc: "Data Collector token (#{AUTOMATE_PRODUCT_NAME} Only)"
|
|
32
34
|
option :ent, type: :string, required: false,
|
|
33
|
-
desc:
|
|
35
|
+
desc: "Enterprise for #{AUTOMATE_PRODUCT_NAME} reporting (#{AUTOMATE_PRODUCT_NAME} Only)"
|
|
34
36
|
def login(server)
|
|
35
|
-
options[
|
|
37
|
+
options["server"] = server
|
|
36
38
|
InspecPlugins::Compliance::API.login(options)
|
|
37
39
|
config = InspecPlugins::Compliance::Configuration.new
|
|
38
40
|
puts "Stored configuration for Chef #{config['server_type'].capitalize}: #{config['server']}' with user: '#{config['user']}'"
|
|
39
41
|
end
|
|
40
42
|
|
|
41
|
-
desc
|
|
43
|
+
desc "profiles", "list all available profiles in #{COMPLIANCE_PRODUCT_NAME}"
|
|
42
44
|
option :owner, type: :string, required: false,
|
|
43
|
-
desc:
|
|
45
|
+
desc: "owner whose profiles to list"
|
|
44
46
|
def profiles
|
|
45
47
|
config = InspecPlugins::Compliance::Configuration.new
|
|
46
48
|
return if !loggedin(config)
|
|
47
49
|
|
|
48
50
|
# set owner to config
|
|
49
|
-
config[
|
|
51
|
+
config["owner"] = options["owner"] || config["user"]
|
|
50
52
|
|
|
51
53
|
msg, profiles = InspecPlugins::Compliance::API.profiles(config)
|
|
52
|
-
profiles.sort_by! { |hsh| hsh[
|
|
54
|
+
profiles.sort_by! { |hsh| hsh["title"] }
|
|
53
55
|
if !profiles.empty?
|
|
54
56
|
# iterate over profiles
|
|
55
|
-
headline(
|
|
56
|
-
profiles.each
|
|
57
|
-
owner = profile[
|
|
57
|
+
headline("Available profiles:")
|
|
58
|
+
profiles.each do |profile|
|
|
59
|
+
owner = profile["owner_id"] || profile["owner"]
|
|
58
60
|
li("#{profile['title']} v#{profile['version']} (#{mark_text(owner + '/' + profile['name'])})")
|
|
59
|
-
|
|
61
|
+
end
|
|
60
62
|
else
|
|
61
|
-
puts msg if msg !=
|
|
62
|
-
puts
|
|
63
|
+
puts msg if msg != "success"
|
|
64
|
+
puts "Could not find any profiles"
|
|
63
65
|
exit 1
|
|
64
66
|
end
|
|
65
67
|
rescue InspecPlugins::Compliance::ServerConfigurationMissing
|
|
66
|
-
|
|
68
|
+
$stderr.puts "\nServer configuration information is missing. Please login using `#{EXEC_NAME} compliance login`"
|
|
67
69
|
exit 1
|
|
68
70
|
end
|
|
69
71
|
|
|
70
|
-
desc
|
|
72
|
+
desc "exec PROFILE", "executes a #{COMPLIANCE_PRODUCT_NAME} profile"
|
|
71
73
|
exec_options
|
|
72
74
|
def exec(*tests)
|
|
73
75
|
config = InspecPlugins::Compliance::Configuration.new
|
|
@@ -77,7 +79,7 @@ module InspecPlugins
|
|
|
77
79
|
configure_logger(o)
|
|
78
80
|
|
|
79
81
|
# iterate over tests and add compliance scheme
|
|
80
|
-
tests = tests.map { |t|
|
|
82
|
+
tests = tests.map { |t| "compliance://" + InspecPlugins::Compliance::API.sanitize_profile_name(t) }
|
|
81
83
|
|
|
82
84
|
runner = Inspec::Runner.new(o)
|
|
83
85
|
tests.each { |target| runner.add_target(target) }
|
|
@@ -88,9 +90,9 @@ module InspecPlugins
|
|
|
88
90
|
exit 1
|
|
89
91
|
end
|
|
90
92
|
|
|
91
|
-
desc
|
|
93
|
+
desc "download PROFILE", "downloads a profile from #{COMPLIANCE_PRODUCT_NAME}"
|
|
92
94
|
option :name, type: :string,
|
|
93
|
-
desc:
|
|
95
|
+
desc: "Name of the archive filename (file type will be added)"
|
|
94
96
|
def download(profile_name)
|
|
95
97
|
o = options.dup
|
|
96
98
|
configure_logger(o)
|
|
@@ -105,30 +107,30 @@ module InspecPlugins
|
|
|
105
107
|
fetcher = InspecPlugins::Compliance::Fetcher.resolve(
|
|
106
108
|
{
|
|
107
109
|
compliance: profile_name,
|
|
108
|
-
}
|
|
110
|
+
}
|
|
109
111
|
)
|
|
110
112
|
|
|
111
113
|
# we provide a name, the fetcher adds the extension
|
|
112
|
-
_owner, id = profile_name.split(
|
|
114
|
+
_owner, id = profile_name.split("/")
|
|
113
115
|
file_name = fetcher.fetch(o.name || id)
|
|
114
116
|
puts "Profile stored to #{file_name}"
|
|
115
117
|
else
|
|
116
|
-
puts "Profile #{profile_name} is not available in
|
|
118
|
+
puts "Profile #{profile_name} is not available in #{COMPLIANCE_PRODUCT_NAME}."
|
|
117
119
|
exit 1
|
|
118
120
|
end
|
|
119
121
|
end
|
|
120
122
|
|
|
121
|
-
desc
|
|
123
|
+
desc "upload PATH", "uploads a local profile to #{COMPLIANCE_PRODUCT_NAME}"
|
|
122
124
|
option :overwrite, type: :boolean, default: false,
|
|
123
|
-
desc:
|
|
125
|
+
desc: "Overwrite existing profile on Server."
|
|
124
126
|
option :owner, type: :string, required: false,
|
|
125
|
-
desc:
|
|
127
|
+
desc: "Owner that should own the profile"
|
|
126
128
|
def upload(path) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, PerceivedComplexity, Metrics/CyclomaticComplexity
|
|
127
129
|
config = InspecPlugins::Compliance::Configuration.new
|
|
128
130
|
return if !loggedin(config)
|
|
129
131
|
|
|
130
132
|
# set owner to config
|
|
131
|
-
config[
|
|
133
|
+
config["owner"] = options["owner"] || config["user"]
|
|
132
134
|
|
|
133
135
|
unless File.exist?(path)
|
|
134
136
|
puts "Directory #{path} does not exist."
|
|
@@ -157,14 +159,14 @@ module InspecPlugins
|
|
|
157
159
|
|
|
158
160
|
result = profile.check
|
|
159
161
|
unless result[:summary][:valid]
|
|
160
|
-
error.call(
|
|
162
|
+
error.call("Profile check failed. Please fix the profile before upload.")
|
|
161
163
|
else
|
|
162
|
-
puts(
|
|
164
|
+
puts("Profile is valid")
|
|
163
165
|
end
|
|
164
166
|
|
|
165
167
|
# determine user information
|
|
166
|
-
if (config[
|
|
167
|
-
error.call(
|
|
168
|
+
if (config["token"].nil? && config["refresh_token"].nil?) || config["user"].nil?
|
|
169
|
+
error.call("Please login via `#{EXEC_NAME} compliance login`")
|
|
168
170
|
end
|
|
169
171
|
|
|
170
172
|
# read profile name from inspec.yml
|
|
@@ -175,8 +177,8 @@ module InspecPlugins
|
|
|
175
177
|
|
|
176
178
|
# check that the profile is not uploaded already,
|
|
177
179
|
# confirm upload to the user (overwrite with --force)
|
|
178
|
-
if InspecPlugins::Compliance::API.exist?(config, "#{config['owner']}/#{profile_name}##{profile_version}") && !options[
|
|
179
|
-
error.call(
|
|
180
|
+
if InspecPlugins::Compliance::API.exist?(config, "#{config['owner']}/#{profile_name}##{profile_version}") && !options["overwrite"]
|
|
181
|
+
error.call("Profile exists on the server, use --overwrite")
|
|
180
182
|
end
|
|
181
183
|
|
|
182
184
|
# abort if we found an error
|
|
@@ -189,7 +191,7 @@ module InspecPlugins
|
|
|
189
191
|
generated = false
|
|
190
192
|
if File.directory?(path)
|
|
191
193
|
generated = true
|
|
192
|
-
archive_path = Dir::Tmpname.create([profile_name,
|
|
194
|
+
archive_path = Dir::Tmpname.create([profile_name, ".tar.gz"]) {}
|
|
193
195
|
puts "Generate temporary profile archive at #{archive_path}"
|
|
194
196
|
profile.archive({ output: archive_path, ignore_errors: false, overwrite: true })
|
|
195
197
|
else
|
|
@@ -200,62 +202,62 @@ module InspecPlugins
|
|
|
200
202
|
pname = ERB::Util.url_encode(profile_name)
|
|
201
203
|
|
|
202
204
|
if InspecPlugins::Compliance::API.is_automate_server?(config) || InspecPlugins::Compliance::API.is_automate2_server?(config)
|
|
203
|
-
puts
|
|
205
|
+
puts "Uploading to #{AUTOMATE_PRODUCT_NAME}"
|
|
204
206
|
else
|
|
205
|
-
puts
|
|
207
|
+
puts "Uploading to #{COMPLIANCE_PRODUCT_NAME}"
|
|
206
208
|
end
|
|
207
|
-
success, msg = InspecPlugins::Compliance::API.upload(config, config[
|
|
209
|
+
success, msg = InspecPlugins::Compliance::API.upload(config, config["owner"], pname, archive_path)
|
|
208
210
|
|
|
209
211
|
# delete temp file if it was temporary generated
|
|
210
212
|
File.delete(archive_path) if generated && File.exist?(archive_path)
|
|
211
213
|
|
|
212
214
|
if success
|
|
213
|
-
puts
|
|
215
|
+
puts "Successfully uploaded profile"
|
|
214
216
|
else
|
|
215
|
-
puts
|
|
217
|
+
puts "Error during profile upload:"
|
|
216
218
|
puts msg
|
|
217
219
|
exit 1
|
|
218
220
|
end
|
|
219
221
|
end
|
|
220
222
|
|
|
221
|
-
desc
|
|
223
|
+
desc "version", "displays the version of the #{COMPLIANCE_PRODUCT_NAME} server"
|
|
222
224
|
def version
|
|
223
225
|
config = InspecPlugins::Compliance::Configuration.new
|
|
224
226
|
info = InspecPlugins::Compliance::API.version(config)
|
|
225
|
-
if !info.nil? && info[
|
|
227
|
+
if !info.nil? && info["version"]
|
|
226
228
|
puts "Name: #{info['api']}"
|
|
227
229
|
puts "Version: #{info['version']}"
|
|
228
230
|
else
|
|
229
|
-
puts
|
|
231
|
+
puts "Could not determine server version."
|
|
230
232
|
exit 1
|
|
231
233
|
end
|
|
232
234
|
rescue InspecPlugins::Compliance::ServerConfigurationMissing
|
|
233
|
-
puts "\nServer configuration information is missing. Please login using
|
|
235
|
+
puts "\nServer configuration information is missing. Please login using `#{EXEC_NAME} compliance login`"
|
|
234
236
|
exit 1
|
|
235
237
|
end
|
|
236
238
|
|
|
237
|
-
desc
|
|
239
|
+
desc "logout", "user logout from #{COMPLIANCE_PRODUCT_NAME}"
|
|
238
240
|
def logout
|
|
239
241
|
config = InspecPlugins::Compliance::Configuration.new
|
|
240
|
-
unless config.supported?(:oidc) || config[
|
|
242
|
+
unless config.supported?(:oidc) || config["token"].nil? || config["server_type"] == "automate"
|
|
241
243
|
config = InspecPlugins::Compliance::Configuration.new
|
|
242
244
|
url = "#{config['server']}/logout"
|
|
243
|
-
InspecPlugins::Compliance::HTTP.post(url, config[
|
|
245
|
+
InspecPlugins::Compliance::HTTP.post(url, config["token"], config["insecure"], !config.supported?(:oidc))
|
|
244
246
|
end
|
|
245
247
|
success = config.destroy
|
|
246
248
|
|
|
247
249
|
if success
|
|
248
|
-
puts
|
|
250
|
+
puts "Successfully logged out"
|
|
249
251
|
else
|
|
250
|
-
puts
|
|
252
|
+
puts "Could not log out"
|
|
251
253
|
end
|
|
252
254
|
end
|
|
253
255
|
|
|
254
256
|
private
|
|
255
257
|
|
|
256
258
|
def loggedin(config)
|
|
257
|
-
serverknown = !config[
|
|
258
|
-
puts
|
|
259
|
+
serverknown = !config["server"].nil?
|
|
260
|
+
puts "You need to login first with `#{EXEC_NAME} compliance login`" if !serverknown
|
|
259
261
|
serverknown
|
|
260
262
|
end
|
|
261
263
|
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
require "inspec/globals"
|
|
2
2
|
|
|
3
3
|
module InspecPlugins
|
|
4
4
|
module Compliance
|
|
5
5
|
# stores configuration on local filesystem
|
|
6
6
|
class Configuration
|
|
7
7
|
def initialize
|
|
8
|
-
@config_path = File.join(Inspec.config_dir,
|
|
8
|
+
@config_path = File.join(Inspec.config_dir, "compliance")
|
|
9
9
|
# ensure the directory is available
|
|
10
10
|
unless File.directory?(@config_path)
|
|
11
11
|
FileUtils.mkdir_p(@config_path)
|
|
12
12
|
end
|
|
13
13
|
# set config file path
|
|
14
|
-
@config_file = File.join(@config_path,
|
|
14
|
+
@config_file = File.join(@config_path, "/config.json")
|
|
15
15
|
@config = {}
|
|
16
16
|
|
|
17
17
|
# load the data
|
|
@@ -46,7 +46,7 @@ module InspecPlugins
|
|
|
46
46
|
|
|
47
47
|
# stores a hash to json
|
|
48
48
|
def store
|
|
49
|
-
File.open(@config_file,
|
|
49
|
+
File.open(@config_file, "w") do |f|
|
|
50
50
|
f.chmod(0600)
|
|
51
51
|
f.write(@config.to_json)
|
|
52
52
|
end
|
|
@@ -66,13 +66,13 @@ module InspecPlugins
|
|
|
66
66
|
sup = version_with_support(feature)
|
|
67
67
|
|
|
68
68
|
# we do not know the version, therefore we do not know if its possible to use the feature
|
|
69
|
-
return if self[
|
|
69
|
+
return if self["version"].nil? || self["version"]["version"].nil?
|
|
70
70
|
|
|
71
71
|
if sup.is_a?(Array)
|
|
72
|
-
Gem::Version.new(self[
|
|
73
|
-
Gem::Version.new(self[
|
|
72
|
+
Gem::Version.new(self["version"]["version"]) >= sup[0] &&
|
|
73
|
+
Gem::Version.new(self["version"]["version"]) < sup[1]
|
|
74
74
|
else
|
|
75
|
-
Gem::Version.new(self[
|
|
75
|
+
Gem::Version.new(self["version"]["version"]) >= sup
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
@@ -81,7 +81,7 @@ module InspecPlugins
|
|
|
81
81
|
return if supported?(feature)
|
|
82
82
|
|
|
83
83
|
puts "This feature (#{feature}) is not available for legacy installations."
|
|
84
|
-
puts
|
|
84
|
+
puts "Please upgrade to a recent version of Chef Compliance."
|
|
85
85
|
exit 1
|
|
86
86
|
end
|
|
87
87
|
|
|
@@ -93,9 +93,9 @@ module InspecPlugins
|
|
|
93
93
|
def version_with_support(feature)
|
|
94
94
|
case feature.to_sym
|
|
95
95
|
when :oidc
|
|
96
|
-
Gem::Version.new(
|
|
96
|
+
Gem::Version.new("0.16.19")
|
|
97
97
|
else
|
|
98
|
-
Gem::Version.new(
|
|
98
|
+
Gem::Version.new("0.0.0")
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
end
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require 'net/http/post/multipart'
|
|
5
|
-
require 'uri'
|
|
1
|
+
require "net/http"
|
|
2
|
+
require "net/http/post/multipart"
|
|
3
|
+
require "uri"
|
|
6
4
|
|
|
7
5
|
module InspecPlugins
|
|
8
6
|
module Compliance
|
|
@@ -24,11 +22,11 @@ module InspecPlugins
|
|
|
24
22
|
uri = _parse_url(url)
|
|
25
23
|
req = Net::HTTP::Post.new(uri.path)
|
|
26
24
|
if basic_auth
|
|
27
|
-
req.basic_auth token,
|
|
25
|
+
req.basic_auth token, ""
|
|
28
26
|
else
|
|
29
|
-
req[
|
|
27
|
+
req["Authorization"] = "Bearer #{token}"
|
|
30
28
|
end
|
|
31
|
-
req.form_data={}
|
|
29
|
+
req.form_data = {}
|
|
32
30
|
|
|
33
31
|
send_request(uri, req, insecure)
|
|
34
32
|
end
|
|
@@ -50,7 +48,7 @@ module InspecPlugins
|
|
|
50
48
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
51
49
|
|
|
52
50
|
# set connection flags
|
|
53
|
-
http.use_ssl = (uri.scheme ==
|
|
51
|
+
http.use_ssl = (uri.scheme == "https")
|
|
54
52
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if insecure
|
|
55
53
|
|
|
56
54
|
req = Net::HTTP::Post.new(uri.path)
|
|
@@ -58,13 +56,13 @@ module InspecPlugins
|
|
|
58
56
|
req.add_field(key, value)
|
|
59
57
|
end
|
|
60
58
|
|
|
61
|
-
req.body_stream=File.open(file_path,
|
|
62
|
-
req.add_field(
|
|
63
|
-
req.add_field(
|
|
59
|
+
req.body_stream = File.open(file_path, "rb")
|
|
60
|
+
req.add_field("Content-Length", File.size(file_path))
|
|
61
|
+
req.add_field("Content-Type", "application/x-gzip")
|
|
64
62
|
|
|
65
|
-
boundary =
|
|
66
|
-
req.add_field(
|
|
67
|
-
res=http.request(req)
|
|
63
|
+
boundary = "INSPEC-PROFILE-UPLOAD"
|
|
64
|
+
req.add_field("session", boundary)
|
|
65
|
+
res = http.request(req)
|
|
68
66
|
res
|
|
69
67
|
end
|
|
70
68
|
|
|
@@ -74,11 +72,11 @@ module InspecPlugins
|
|
|
74
72
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
75
73
|
|
|
76
74
|
# set connection flags
|
|
77
|
-
http.use_ssl = (uri.scheme ==
|
|
75
|
+
http.use_ssl = (uri.scheme == "https")
|
|
78
76
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if insecure
|
|
79
77
|
|
|
80
78
|
File.open(file_path) do |tar|
|
|
81
|
-
req = Net::HTTP::Post::Multipart.new(uri,
|
|
79
|
+
req = Net::HTTP::Post::Multipart.new(uri, "file" => UploadIO.new(tar, "application/x-gzip", File.basename(file_path)))
|
|
82
80
|
headers.each do |key, value|
|
|
83
81
|
req.add_field(key, value)
|
|
84
82
|
end
|
|
@@ -90,20 +88,20 @@ module InspecPlugins
|
|
|
90
88
|
# sends a http requests
|
|
91
89
|
def self.send_request(uri, req, insecure)
|
|
92
90
|
opts = {
|
|
93
|
-
use_ssl: uri.scheme ==
|
|
91
|
+
use_ssl: uri.scheme == "https",
|
|
94
92
|
}
|
|
95
93
|
opts[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if insecure
|
|
96
94
|
|
|
97
95
|
raise "Unable to parse URI: #{uri}" if uri.nil? || uri.host.nil?
|
|
98
|
-
res = Net::HTTP.start(uri.host, uri.port, opts)
|
|
96
|
+
res = Net::HTTP.start(uri.host, uri.port, opts) do |http|
|
|
99
97
|
http.request(req)
|
|
100
|
-
|
|
98
|
+
end
|
|
101
99
|
res
|
|
102
100
|
rescue OpenSSL::SSL::SSLError => e
|
|
103
|
-
raise e unless e.message.include?
|
|
101
|
+
raise e unless e.message.include? "certificate verify failed"
|
|
104
102
|
|
|
105
103
|
puts "Error: Failed to connect to #{uri}."
|
|
106
|
-
puts
|
|
104
|
+
puts "If the server uses a self-signed certificate, please re-run the login command with the --insecure option."
|
|
107
105
|
exit 1
|
|
108
106
|
end
|
|
109
107
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
1
|
module InspecPlugins
|
|
4
2
|
module Compliance
|
|
5
3
|
# is a helper that provides information which version of compliance supports
|
|
@@ -11,9 +9,9 @@ module InspecPlugins
|
|
|
11
9
|
def self.version_with_support(feature)
|
|
12
10
|
case feature.to_sym
|
|
13
11
|
when :oidc # open id connect authentication
|
|
14
|
-
Gem::Version.new(
|
|
12
|
+
Gem::Version.new("0.16.19")
|
|
15
13
|
else
|
|
16
|
-
Gem::Version.new(
|
|
14
|
+
Gem::Version.new("0.0.0")
|
|
17
15
|
end
|
|
18
16
|
end
|
|
19
17
|
|