Sha256: 26ac5a2b972fc576dbe316cd99fbf8ca725b2c3f17241fd6ebd47b5f928aa362

Contents?: true

Size: 1.02 KB

Versions: 10

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

module Bolt
  class Secret
    class Base
      def hooks
        %i[resolve_reference secret_encrypt secret_decrypt secret_createkeys validate_resolve_reference]
      end

      def encode(raw)
        coded = Base64.encode64(raw).strip
        "ENC[#{name.upcase},#{coded}]"
      end

      def decode(code)
        format = %r{\AENC\[(?<plugin>\w+),(?<encoded>[\w\s+-=/]+)\]\s*\z}
        match = format.match(code)

        raise Bolt::ValidationError, "Could not parse as an encrypted value: #{code}" unless match

        raw = Base64.decode64(match[:encoded])
        [raw, match[:plugin]]
      end

      def secret_encrypt(opts)
        encrypted = encrypt_value(opts['plaintext_value'])
        encode(encrypted)
      end

      def secret_decrypt(opts)
        raw, _plugin = decode(opts['encrypted_value'])
        decrypt_value(raw)
      end
      alias resolve_reference secret_decrypt

      def validate_resolve_reference(opts)
        decode(opts['encrypted_value'])
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
bolt-2.7.0 lib/bolt/secret/base.rb
bolt-2.6.0 lib/bolt/secret/base.rb
bolt-2.5.0 lib/bolt/secret/base.rb
bolt-2.4.0 lib/bolt/secret/base.rb
bolt-2.3.1 lib/bolt/secret/base.rb
bolt-2.3.0 lib/bolt/secret/base.rb
bolt-2.2.0 lib/bolt/secret/base.rb
bolt-2.1.0 lib/bolt/secret/base.rb
bolt-2.0.1 lib/bolt/secret/base.rb
bolt-2.0.0 lib/bolt/secret/base.rb