Sha256: bc1dd26ddaf98f114a80e0aa289ac030a5b3be3deae54e3dcaa03713a6fad6d8

Contents?: true

Size: 1.35 KB

Versions: 20

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true
require 'proxy_rb/password_fetchers/basic_password_fetcher'
require 'proxy_rb/user_passwords/vault_user_password'

begin
  require 'vault'
rescue LoadError
  ProxyRb.logger.error 'Please add `vault` to your `Gemfile` to use this password fetcher'
end

module ProxyRb
  # Fetch password for user...
  module PasswordFetchers
    # ... from HashiCorp Vault
    class VaultPasswordFetcher < BasicPasswordFetcher
      include Contracts::Core
      include Contracts::Builtin

      protected

      attr_reader :prefix, :client

      public

      # @param [String] prefix
      #   Prefix used to look up password for user name
      #
      # @param [Vault::Client] client
      #   The client used to connect to central "Vault" server
      def initialize(prefix:, client: ::Vault::Client.new(address: ENV['VAULT_ADDR']))
        @prefix = prefix
        @client = client
      end

      # @param [String] user_name
      #   Look up user name
      Contract String => String
      def call(user_name)
        client.with_retries(::Vault::HTTPConnectionError, ::Vault::HTTPError) do |_attempt, _e|
          UserPasswords::VaultUserPassword.new(
            fetch_password_for_user(user_name)
          ).to_s
        end
      end

      private

      def read(string)
        ::Vault.logical.read(File.join(prefix, string))
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
proxy_rb-1.0.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.6 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.5 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.4 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.3 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.2 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.1 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.10.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.9.3 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.9.2 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.9.1 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.9.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.8.3 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.8.2 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.8.1 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.8.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.7.1 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.7.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.6.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb
proxy_rb-0.5.0 lib/proxy_rb/password_fetchers/vault_password_fetcher.rb