Sha256: 252cf9f6936628080f443286afc21fe0683c723cc6257ccd4f7ab0b73a29d466

Contents?: true

Size: 1.22 KB

Versions: 5

Compression:

Stored size: 1.22 KB

Contents

# encoding: utf-8
# author: Christoph Hartmann
# author: Dominik Richter

require 'uri'
require 'inspec/fetcher'
require 'fetchers/url'

# InSpec Target Helper for Chef Compliance
# reuses UrlHelper, but it knows the target server and the access token already
# similar to `inspec exec http://localhost:2134/owners/%base%/compliance/%ssh%/tar --user %token%`
module Compliance
  class Fetcher < Fetchers::Url
    name 'compliance'
    priority 500

    def self.resolve(target, _opts = {})
      return nil unless target.is_a?(String)
      # check for local scheme compliance://
      uri = URI(target)
      return nil unless URI(uri).scheme == 'compliance'

      # check if we have a compliance token
      config = Compliance::Configuration.new
      return nil if config['token'].nil?

      # verifies that the target e.g base/ssh exists
      profile = uri.host + uri.path
      Compliance::API.exist?(config, profile)
      super(target_url(config, profile), config)
    rescue URI::Error => _e
      nil
    end

    def self.target_url(config, profile)
      owner, id = profile.split('/')
      "#{config['server']}/owners/#{owner}/compliance/#{id}/tar"
    end

    def to_s
      'Chef Compliance Profile Loader'
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
inspec-0.33.2 lib/bundles/inspec-compliance/target.rb
inspec-0.33.1 lib/bundles/inspec-compliance/target.rb
inspec-0.33.0 lib/bundles/inspec-compliance/target.rb
inspec-0.32.0 lib/bundles/inspec-compliance/target.rb
inspec-0.31.0 lib/bundles/inspec-compliance/target.rb