Sha256: 4d0a6589d168dca179f14e1e939a37358e7c6eb7aa748f2b161e0a0469960024

Contents?: true

Size: 1.4 KB

Versions: 4

Compression:

Stored size: 1.4 KB

Contents

require 'diplomat'

module Skalera
  module Services
    class Credentials
      def self.for(service_name)
        creds = Diplomat::Kv.get("credentials/#{service_name}", recurse: true)

        users = extract(creds, service_name, 'username')
        passwords = extract(creds, service_name, 'password')

        users.map do |host, username|
          password = passwords[host]
          if host.nil? || username.nil? || password.nil?
            # TODO: use logging
            STDERR.puts "host: #{host}, username: #{username}, password: '#{password}'"
            next
          end
          yield host, username, password if block_given?
          [host, username, password]
        end.compact # in case there is an error
      rescue Diplomat::KeyNotFound
        STDERR.puts "ERROR: key not found: credentials/#{service_name}"
      end

      def self.extract(creds, key, field)
        result = {}
        # TODO: handle errors when decoding the contents
        creds.select { |c| c[:key].match(%r{/#{field}$}) }.each do |hash|
          host = hash[:key].match(%r{#{key}/(.+)/#{field}})[1]
          result[host] = hash[:value]
        end
        result
      end

      def self.add(service_name, host, username, password)
        Diplomat::Kv.put("credentials/#{service_name}/#{host}/username", username)
        Diplomat::Kv.put("credentials/#{service_name}/#{host}/password", password)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
skalera-services-0.2.5 lib/skalera/services/credentials.rb
skalera-services-0.2.4 lib/skalera/services/credentials.rb
skalera-services-0.2.3 lib/skalera/services/credentials.rb
skalera-services-0.2.2 lib/skalera/services/credentials.rb