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.
Files changed (285) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -21
  3. data/etc/deprecations.json +10 -0
  4. data/etc/plugin_filters.json +8 -0
  5. data/lib/bundles/inspec-compliance/api.rb +1 -1
  6. data/lib/bundles/inspec-compliance/configuration.rb +1 -1
  7. data/lib/bundles/inspec-compliance/http.rb +1 -1
  8. data/lib/bundles/inspec-compliance/support.rb +1 -1
  9. data/lib/bundles/inspec-compliance/target.rb +1 -1
  10. data/lib/bundles/inspec-supermarket.rb +3 -7
  11. data/lib/bundles/inspec-supermarket/api.rb +10 -13
  12. data/lib/bundles/inspec-supermarket/cli.rb +12 -15
  13. data/lib/bundles/inspec-supermarket/target.rb +7 -11
  14. data/lib/fetchers/git.rb +14 -15
  15. data/lib/fetchers/local.rb +6 -10
  16. data/lib/fetchers/mock.rb +3 -5
  17. data/lib/fetchers/url.rb +42 -44
  18. data/lib/inspec.rb +23 -24
  19. data/lib/inspec/archive/tar.rb +2 -6
  20. data/lib/inspec/archive/zip.rb +3 -7
  21. data/lib/inspec/backend.rb +8 -9
  22. data/lib/inspec/base_cli.rb +64 -65
  23. data/lib/inspec/cached_fetcher.rb +2 -3
  24. data/lib/inspec/cli.rb +136 -97
  25. data/lib/inspec/config.rb +71 -61
  26. data/lib/inspec/control_eval_context.rb +22 -18
  27. data/lib/inspec/dependencies/cache.rb +2 -3
  28. data/lib/inspec/dependencies/dependency_set.rb +2 -3
  29. data/lib/inspec/dependencies/lockfile.rb +8 -9
  30. data/lib/inspec/dependencies/requirement.rb +7 -8
  31. data/lib/inspec/dependencies/resolver.rb +5 -7
  32. data/lib/inspec/describe.rb +2 -6
  33. data/lib/inspec/dist.rb +20 -0
  34. data/lib/inspec/dsl.rb +4 -7
  35. data/lib/inspec/dsl_shared.rb +1 -2
  36. data/lib/inspec/env_printer.rb +11 -12
  37. data/lib/inspec/errors.rb +0 -4
  38. data/lib/inspec/exceptions.rb +0 -1
  39. data/lib/inspec/expect.rb +5 -8
  40. data/lib/inspec/fetcher.rb +7 -10
  41. data/lib/inspec/file_provider.rb +24 -24
  42. data/lib/inspec/formatters.rb +3 -3
  43. data/lib/inspec/formatters/base.rb +8 -8
  44. data/lib/inspec/globals.rb +2 -2
  45. data/lib/inspec/impact.rb +5 -7
  46. data/lib/inspec/input_registry.rb +84 -33
  47. data/lib/inspec/library_eval_context.rb +3 -6
  48. data/lib/inspec/log.rb +1 -5
  49. data/lib/inspec/metadata.rb +17 -16
  50. data/lib/inspec/method_source.rb +5 -9
  51. data/lib/inspec/objects.rb +10 -12
  52. data/lib/inspec/objects/control.rb +7 -9
  53. data/lib/inspec/objects/describe.rb +9 -11
  54. data/lib/inspec/objects/each_loop.rb +1 -3
  55. data/lib/inspec/objects/input.rb +24 -26
  56. data/lib/inspec/objects/list.rb +4 -6
  57. data/lib/inspec/objects/or_test.rb +2 -4
  58. data/lib/inspec/objects/ruby_helper.rb +3 -5
  59. data/lib/inspec/objects/tag.rb +0 -2
  60. data/lib/inspec/objects/test.rb +9 -11
  61. data/lib/inspec/objects/value.rb +3 -5
  62. data/lib/inspec/plugin/v1.rb +2 -2
  63. data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
  64. data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
  65. data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
  66. data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
  67. data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
  68. data/lib/inspec/plugin/v1/plugins.rb +15 -19
  69. data/lib/inspec/plugin/v1/registry.rb +0 -4
  70. data/lib/inspec/plugin/v2.rb +8 -8
  71. data/lib/inspec/plugin/v2/activator.rb +1 -1
  72. data/lib/inspec/plugin/v2/config_file.rb +6 -6
  73. data/lib/inspec/plugin/v2/filter.rb +13 -13
  74. data/lib/inspec/plugin/v2/installer.rb +36 -24
  75. data/lib/inspec/plugin/v2/loader.rb +28 -28
  76. data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
  77. data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
  78. data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
  79. data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
  80. data/lib/inspec/plugin/v2/registry.rb +7 -7
  81. data/lib/inspec/polyfill.rb +0 -3
  82. data/lib/inspec/profile.rb +55 -63
  83. data/lib/inspec/profile_context.rb +27 -30
  84. data/lib/inspec/profile_vendor.rb +6 -9
  85. data/lib/inspec/reporters.rb +24 -24
  86. data/lib/inspec/reporters/automate.rb +17 -19
  87. data/lib/inspec/reporters/base.rb +1 -1
  88. data/lib/inspec/reporters/cli.rb +88 -91
  89. data/lib/inspec/reporters/json.rb +2 -4
  90. data/lib/inspec/reporters/json_automate.rb +1 -3
  91. data/lib/inspec/reporters/json_min.rb +1 -3
  92. data/lib/inspec/reporters/junit.rb +26 -28
  93. data/lib/inspec/reporters/yaml.rb +1 -3
  94. data/lib/inspec/require_loader.rb +0 -4
  95. data/lib/inspec/resource.rb +4 -125
  96. data/lib/inspec/resources.rb +121 -0
  97. data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
  98. data/lib/{resources → inspec/resources}/apache.rb +13 -14
  99. data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
  100. data/lib/{resources → inspec/resources}/apt.rb +17 -17
  101. data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
  102. data/lib/{resources → inspec/resources}/auditd.rb +62 -64
  103. data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
  104. data/lib/{resources → inspec/resources}/bash.rb +6 -8
  105. data/lib/{resources → inspec/resources}/bond.rb +15 -14
  106. data/lib/{resources → inspec/resources}/bridge.rb +8 -8
  107. data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
  108. data/lib/{resources → inspec/resources}/command.rb +11 -10
  109. data/lib/{resources → inspec/resources}/cpan.rb +12 -12
  110. data/lib/{resources → inspec/resources}/cran.rb +9 -9
  111. data/lib/{resources → inspec/resources}/crontab.rb +47 -48
  112. data/lib/{resources → inspec/resources}/csv.rb +5 -5
  113. data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
  114. data/lib/{resources → inspec/resources}/directory.rb +5 -7
  115. data/lib/{resources → inspec/resources}/docker.rb +63 -63
  116. data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
  117. data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
  118. data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
  119. data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
  120. data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
  121. data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
  122. data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
  123. data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
  124. data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
  125. data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
  126. data/lib/{resources → inspec/resources}/file.rb +80 -79
  127. data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
  128. data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
  129. data/lib/{resources → inspec/resources}/gem.rb +12 -12
  130. data/lib/{resources → inspec/resources}/groups.rb +28 -27
  131. data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
  132. data/lib/{resources → inspec/resources}/host.rb +31 -29
  133. data/lib/{resources → inspec/resources}/http.rb +24 -24
  134. data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
  135. data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
  136. data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
  137. data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
  138. data/lib/{resources → inspec/resources}/ini.rb +7 -8
  139. data/lib/{resources → inspec/resources}/interface.rb +30 -30
  140. data/lib/{resources → inspec/resources}/iptables.rb +8 -8
  141. data/lib/{resources → inspec/resources}/json.rb +8 -10
  142. data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
  143. data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
  144. data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
  145. data/lib/{resources → inspec/resources}/ksh.rb +6 -8
  146. data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
  147. data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
  148. data/lib/{resources → inspec/resources}/mount.rb +6 -8
  149. data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
  150. data/lib/inspec/resources/mysql.rb +81 -0
  151. data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
  152. data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
  153. data/lib/{resources → inspec/resources}/nginx.rb +16 -17
  154. data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
  155. data/lib/{resources → inspec/resources}/npm.rb +9 -10
  156. data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
  157. data/lib/{resources → inspec/resources}/oneget.rb +8 -8
  158. data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
  159. data/lib/{resources → inspec/resources}/os.rb +6 -8
  160. data/lib/{resources → inspec/resources}/os_env.rb +11 -12
  161. data/lib/{resources → inspec/resources}/package.rb +66 -65
  162. data/lib/{resources → inspec/resources}/packages.rb +13 -13
  163. data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
  164. data/lib/{resources → inspec/resources}/passwd.rb +18 -19
  165. data/lib/{resources → inspec/resources}/pip.rb +19 -19
  166. data/lib/{resources → inspec/resources}/platform.rb +9 -11
  167. data/lib/{resources → inspec/resources}/port.rb +134 -136
  168. data/lib/{resources → inspec/resources}/postgres.rb +40 -32
  169. data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
  170. data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
  171. data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
  172. data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
  173. data/lib/{resources → inspec/resources}/powershell.rb +17 -13
  174. data/lib/{resources → inspec/resources}/processes.rb +29 -29
  175. data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
  176. data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
  177. data/lib/inspec/resources/script.rb +1 -0
  178. data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
  179. data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
  180. data/lib/{resources → inspec/resources}/service.rb +74 -75
  181. data/lib/{resources → inspec/resources}/shadow.rb +44 -45
  182. data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
  183. data/lib/{resources → inspec/resources}/ssl.rb +28 -29
  184. data/lib/inspec/resources/sys_info.rb +30 -0
  185. data/lib/{resources → inspec/resources}/toml.rb +5 -7
  186. data/lib/{resources → inspec/resources}/users.rb +65 -65
  187. data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
  188. data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
  189. data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
  190. data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
  191. data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
  192. data/lib/{resources → inspec/resources}/wmi.rb +7 -8
  193. data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
  194. data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
  195. data/lib/{resources → inspec/resources}/xml.rb +7 -7
  196. data/lib/{resources → inspec/resources}/yaml.rb +5 -6
  197. data/lib/{resources → inspec/resources}/yum.rb +10 -10
  198. data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
  199. data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
  200. data/lib/inspec/rspec_extensions.rb +24 -8
  201. data/lib/inspec/rule.rb +14 -15
  202. data/lib/inspec/runner.rb +28 -28
  203. data/lib/inspec/runner_mock.rb +1 -5
  204. data/lib/inspec/runner_rspec.rb +18 -20
  205. data/lib/inspec/runtime_profile.rb +2 -5
  206. data/lib/inspec/schema.rb +142 -143
  207. data/lib/inspec/secrets.rb +3 -7
  208. data/lib/inspec/secrets/yaml.rb +3 -5
  209. data/lib/inspec/shell.rb +11 -15
  210. data/lib/inspec/shell_detector.rb +6 -7
  211. data/lib/inspec/source_reader.rb +4 -8
  212. data/lib/inspec/ui.rb +33 -39
  213. data/lib/inspec/ui_table_helper.rb +12 -0
  214. data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
  215. data/lib/{utils → inspec/utils}/convert.rb +0 -4
  216. data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
  217. data/lib/inspec/utils/deprecation.rb +6 -0
  218. data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
  219. data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
  220. data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
  221. data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
  222. data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
  223. data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
  224. data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
  225. data/lib/{utils → inspec/utils}/filter.rb +30 -33
  226. data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
  227. data/lib/{utils → inspec/utils}/find_files.rb +9 -12
  228. data/lib/{utils → inspec/utils}/hash.rb +1 -5
  229. data/lib/inspec/utils/json_log.rb +15 -0
  230. data/lib/inspec/utils/latest_version.rb +13 -0
  231. data/lib/{utils → inspec/utils}/modulator.rb +0 -3
  232. data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
  233. data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
  234. data/lib/{utils → inspec/utils}/parser.rb +45 -45
  235. data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
  236. data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
  237. data/lib/{utils → inspec/utils}/spdx.rb +1 -4
  238. data/lib/{utils → inspec/utils}/spdx.txt +0 -0
  239. data/lib/inspec/utils/telemetry.rb +3 -3
  240. data/lib/inspec/utils/telemetry/collector.rb +30 -9
  241. data/lib/inspec/utils/telemetry/data_series.rb +3 -1
  242. data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
  243. data/lib/inspec/version.rb +1 -1
  244. data/lib/matchers/matchers.rb +22 -25
  245. data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
  246. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
  247. data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
  248. data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
  249. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
  250. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
  251. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
  252. data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
  253. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
  254. data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
  255. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
  256. data/lib/plugins/inspec-habitat/Berksfile +2 -2
  257. data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
  258. data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
  259. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
  260. data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
  261. data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
  262. data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
  263. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
  264. data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
  265. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
  266. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
  267. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
  268. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
  269. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
  270. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
  271. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
  272. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
  273. data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
  274. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
  275. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
  276. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
  277. data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
  278. data/lib/source_readers/flat.rb +6 -10
  279. data/lib/source_readers/inspec.rb +8 -12
  280. metadata +139 -140
  281. data/lib/resources/mysql.rb +0 -82
  282. data/lib/resources/sys_info.rb +0 -28
  283. data/lib/utils/deprecation.rb +0 -6
  284. data/lib/utils/json_log.rb +0 -18
  285. data/lib/utils/latest_version.rb +0 -22
@@ -1,16 +1,18 @@
1
- # encoding: utf-8
1
+ require "inspec/dist"
2
2
 
3
- require_relative 'api'
3
+ require_relative "api"
4
4
 
5
5
  module InspecPlugins
6
6
  module Compliance
7
7
  class CLI < Inspec.plugin(2, :cli_command)
8
- subcommand_desc 'compliance SUBCOMMAND', 'Chef Compliance commands'
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 'login', 'Log in to a Chef Compliance/Chef Automate SERVER'
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 Chef Automate or a Chef Compliance Server
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: 'Username'
25
+ desc: "Username"
24
26
  option :password, type: :string, required: false,
25
- desc: 'Password (Chef Compliance Only)'
27
+ desc: "Password (#{COMPLIANCE_PRODUCT_NAME} Only)"
26
28
  option :token, type: :string, required: false,
27
- desc: 'Access token'
29
+ desc: "Access token"
28
30
  option :refresh_token, type: :string, required: false,
29
- desc: 'Chef Compliance refresh token (Chef Compliance Only)'
31
+ desc: "#{COMPLIANCE_PRODUCT_NAME} refresh token (#{COMPLIANCE_PRODUCT_NAME} Only)"
30
32
  option :dctoken, type: :string, required: false,
31
- desc: 'Data Collector token (Chef Automate Only)'
33
+ desc: "Data Collector token (#{AUTOMATE_PRODUCT_NAME} Only)"
32
34
  option :ent, type: :string, required: false,
33
- desc: 'Enterprise for Chef Automate reporting (Chef Automate Only)'
35
+ desc: "Enterprise for #{AUTOMATE_PRODUCT_NAME} reporting (#{AUTOMATE_PRODUCT_NAME} Only)"
34
36
  def login(server)
35
- options['server'] = server
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 'profiles', 'list all available profiles in Chef Compliance'
43
+ desc "profiles", "list all available profiles in #{COMPLIANCE_PRODUCT_NAME}"
42
44
  option :owner, type: :string, required: false,
43
- desc: 'owner whose profiles to list'
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['owner'] = options['owner'] || config['user']
51
+ config["owner"] = options["owner"] || config["user"]
50
52
 
51
53
  msg, profiles = InspecPlugins::Compliance::API.profiles(config)
52
- profiles.sort_by! { |hsh| hsh['title'] }
54
+ profiles.sort_by! { |hsh| hsh["title"] }
53
55
  if !profiles.empty?
54
56
  # iterate over profiles
55
- headline('Available profiles:')
56
- profiles.each { |profile|
57
- owner = profile['owner_id'] || profile['owner']
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 != 'success'
62
- puts 'Could not find any profiles'
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
- STDERR.puts "\nServer configuration information is missing. Please login using `inspec compliance login`"
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 'exec PROFILE', 'executes a Chef Compliance profile'
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| 'compliance://' + InspecPlugins::Compliance::API.sanitize_profile_name(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 'download PROFILE', 'downloads a profile from Chef Compliance'
93
+ desc "download PROFILE", "downloads a profile from #{COMPLIANCE_PRODUCT_NAME}"
92
94
  option :name, type: :string,
93
- desc: 'Name of the archive filename (file type will be added)'
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 Chef Compliance."
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 'upload PATH', 'uploads a local profile to Chef Compliance'
123
+ desc "upload PATH", "uploads a local profile to #{COMPLIANCE_PRODUCT_NAME}"
122
124
  option :overwrite, type: :boolean, default: false,
123
- desc: 'Overwrite existing profile on Server.'
125
+ desc: "Overwrite existing profile on Server."
124
126
  option :owner, type: :string, required: false,
125
- desc: 'Owner that should own the profile'
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['owner'] = options['owner'] || config['user']
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('Profile check failed. Please fix the profile before upload.')
162
+ error.call("Profile check failed. Please fix the profile before upload.")
161
163
  else
162
- puts('Profile is valid')
164
+ puts("Profile is valid")
163
165
  end
164
166
 
165
167
  # determine user information
166
- if (config['token'].nil? && config['refresh_token'].nil?) || config['user'].nil?
167
- error.call('Please login via `inspec compliance login`')
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['overwrite']
179
- error.call('Profile exists on the server, use --overwrite')
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, '.tar.gz']) {}
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 'Uploading to Chef Automate'
205
+ puts "Uploading to #{AUTOMATE_PRODUCT_NAME}"
204
206
  else
205
- puts 'Uploading to Chef Compliance'
207
+ puts "Uploading to #{COMPLIANCE_PRODUCT_NAME}"
206
208
  end
207
- success, msg = InspecPlugins::Compliance::API.upload(config, config['owner'], pname, archive_path)
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 'Successfully uploaded profile'
215
+ puts "Successfully uploaded profile"
214
216
  else
215
- puts 'Error during profile upload:'
217
+ puts "Error during profile upload:"
216
218
  puts msg
217
219
  exit 1
218
220
  end
219
221
  end
220
222
 
221
- desc 'version', 'displays the version of the Chef Compliance server'
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['version']
227
+ if !info.nil? && info["version"]
226
228
  puts "Name: #{info['api']}"
227
229
  puts "Version: #{info['version']}"
228
230
  else
229
- puts 'Could not determine server version.'
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 `inspec compliance login`"
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 'logout', 'user logout from Chef Compliance'
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['token'].nil? || config['server_type'] == 'automate'
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['token'], config['insecure'], !config.supported?(:oidc))
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 'Successfully logged out'
250
+ puts "Successfully logged out"
249
251
  else
250
- puts 'Could not log out'
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['server'].nil?
258
- puts 'You need to login first with `inspec compliance login`' if !serverknown
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
- # encoding: utf-8
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, 'compliance')
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, '/config.json')
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, 'w') do |f|
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['version'].nil? || self['version']['version'].nil?
69
+ return if self["version"].nil? || self["version"]["version"].nil?
70
70
 
71
71
  if sup.is_a?(Array)
72
- Gem::Version.new(self['version']['version']) >= sup[0] &&
73
- Gem::Version.new(self['version']['version']) < sup[1]
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['version']['version']) >= sup
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 'Please upgrade to a recent version of Chef Compliance.'
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('0.16.19')
96
+ Gem::Version.new("0.16.19")
97
97
  else
98
- Gem::Version.new('0.0.0')
98
+ Gem::Version.new("0.0.0")
99
99
  end
100
100
  end
101
101
  end
@@ -1,8 +1,6 @@
1
- # encoding: utf-8
2
-
3
- require 'net/http'
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['Authorization'] = "Bearer #{token}"
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 == 'https')
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, 'rb')
62
- req.add_field('Content-Length', File.size(file_path))
63
- req.add_field('Content-Type', 'application/x-gzip')
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 = 'INSPEC-PROFILE-UPLOAD'
66
- req.add_field('session', boundary)
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 == 'https')
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, 'file' => UploadIO.new(tar, 'application/x-gzip', File.basename(file_path)))
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 == 'https',
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) { |http|
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? 'certificate verify failed'
101
+ raise e unless e.message.include? "certificate verify failed"
104
102
 
105
103
  puts "Error: Failed to connect to #{uri}."
106
- puts 'If the server uses a self-signed certificate, please re-run the login command with the --insecure option.'
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('0.16.19')
12
+ Gem::Version.new("0.16.19")
15
13
  else
16
- Gem::Version.new('0.0.0')
14
+ Gem::Version.new("0.0.0")
17
15
  end
18
16
  end
19
17