class InspecPlugins::Compliance::Configuration

stores configuration on local filesystem

Public Class Methods

new() click to toggle source
# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 7
def initialize
  @config_path = File.join(Inspec.config_dir, "compliance")
  # ensure the directory is available
  unless File.directory?(@config_path)
    FileUtils.mkdir_p(@config_path)
  end
  # set config file path
  @config_file = File.join(@config_path, "/config.json")
  @config = {}

  # load the data
  get
end

Public Instance Methods

[](key) click to toggle source

direct access to config

# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 22
def [](key)
  @config[key]
end
[]=(key, value) click to toggle source
# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 26
def []=(key, value)
  @config[key] = value
end
clean() click to toggle source
# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 34
def clean
  @config = {}
end
destroy() click to toggle source

deletes data

# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 56
def destroy
  if File.exist?(@config_file)
    File.delete(@config_file)
  else
    true
  end
end
get() click to toggle source

return the json data

# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 39
def get
  if File.exist?(@config_file)
    file = File.read(@config_file)
    @config = JSON.parse(file)
  end
  @config
end
key?(key) click to toggle source
# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 30
def key?(key)
  @config.key?(key)
end
legacy_check!(feature) click to toggle source

exit 1 if the version of compliance that we're working with doesn't support odic

# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 80
def legacy_check!(feature)
  return if supported?(feature)

  puts "This feature (#{feature}) is not available for legacy installations."
  puts "Please upgrade to a recent version of Chef Compliance."
  exit 1
end
store() click to toggle source

stores a hash to json

# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 48
def store
  File.open(@config_file, "w") do |f|
    f.chmod(0600)
    f.write(@config.to_json)
  end
end
supported?(feature) click to toggle source

return if the (stored) api version does not support a certain feature

# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 65
def supported?(feature)
  sup = version_with_support(feature)

  # we do not know the version, therefore we do not know if its possible to use the feature
  return if self["version"].nil? || self["version"]["version"].nil?

  if sup.is_a?(Array)
    Gem::Version.new(self["version"]["version"]) >= sup[0] &&
      Gem::Version.new(self["version"]["version"]) < sup[1]
  else
    Gem::Version.new(self["version"]["version"]) >= sup
  end
end

Private Instance Methods

version_with_support(feature) click to toggle source

for a feature, returns either:

- a version v0:                      v supports v0       iff v0 <= v
- an array [v0, v1] of two versions: v supports [v0, v1] iff v0 <= v < v1
# File lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb, line 93
def version_with_support(feature)
  case feature.to_sym
  when :oidc
    Gem::Version.new("0.16.19")
  else
    Gem::Version.new("0.0.0")
  end
end