Sha256: fed4fc5f002a1c912b95398a88504c7437860302295a4ace7b632d883375c06e

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

require "active_support/configurable"
require "net/http"
require "json"

if defined? ::Rails
  require 'muchkeys/rails'
end

module Muchkeys
  class InvalidKey < StandardError; end
  class CLIOptionsError < StandardError; end
  class KeyNotSet < StandardError; end
  class UnknownApplication < StandardError; end
  class AmbigousPath < StandardError; end

  autoload :KeyValidator, 'muchkeys/key_validator'
  autoload :ApplicationClient, 'muchkeys/application_client'
  autoload :Secret, 'muchkeys/secret'
  autoload :CLI, 'muchkeys/cli'
  autoload :ConsulClient, 'muchkeys/consul_client'

  include ActiveSupport::Configurable

  config_accessor :application_name

  config_accessor :consul_url do
    'http://localhost:8500'
  end

  config_accessor :private_key
  config_accessor :public_key
  config_accessor :application_name
  config_accessor :secrets_hint
  config_accessor :search_paths do
    %w(git/%{application_name}/secrets
       git/%{application_name}/config
       git/shared/secrets
       git/shared/config)
  end

  def self.env_keys
    # parse all environments found in .env and populate them from consul
    if defined? ::Rails
      check_dir = ::Rails.root
    else
      check_dir = Pathname.getwd
    end


    unless File.exists?(check_dir.join(".env"))
      raise IOError, ".env files are required for Muchkeys ENV injection to work"
    end

    File.read(check_dir.join(".env")).each_line.select(&:presence).map { |x| x.split("=")[0] }
  end

  def self.populate_environment!(*required_keys)
    app = ApplicationClient.new(config)
    app.verify_keys(*required_keys)

    app.known_keys.each do |key|
      ENV[key] ||= app.first(key)
    end

    nil
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
muchkeys-0.7.0 lib/muchkeys.rb