Sha256: e329cb71bd223ba18336a30db346c296aff9834961d26d19d641f06c79e5ab0b

Contents?: true

Size: 1.25 KB

Versions: 5

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module ForemanVault
  class VaultPolicy
    MAGIC_COMMENT_NAME_PREFIX = '# NAME: '

    def initialize(host)
      @host = host
    end

    def valid?
      name.present? && rules.present?
    end

    def name
      magic_comment_name&.chomp&.remove(MAGIC_COMMENT_NAME_PREFIX)&.parameterize
    end

    def new?
      return unless name

      policies.index(name).nil?
    end

    def save
      return false unless valid?

      put_policy(name, rules)
    end

    def delete
      return false unless valid?

      delete_policy(name)
    end

    private

    attr_reader :host
    delegate :params, :render_template, :vault_connection, to: :host
    delegate :policy, :policies, :put_policy, :delete_policy, to: :vault_connection

    def rules
      rendered&.remove(magic_comment_name)
              &.lines
              &.reject { |l| l.strip.empty? }
              &.join
              &.presence
    end

    def magic_comment_name
      rendered&.lines&.find { |l| l.start_with?(MAGIC_COMMENT_NAME_PREFIX) }
    end

    def rendered
      return unless template

      render_template(template: template)
    end

    def template
      ::ProvisioningTemplate.find_by(name: Setting['vault_policy_template'])
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
foreman_vault-1.2.0 app/services/foreman_vault/vault_policy.rb
foreman_vault-1.1.0 app/services/foreman_vault/vault_policy.rb
foreman_vault-1.0.0 app/services/foreman_vault/vault_policy.rb
foreman_vault-0.4.0 app/services/foreman_vault/vault_policy.rb
foreman_vault-0.3.0 app/services/foreman_vault/vault_policy.rb