Sha256: 1d7866f5b042ae1326dc528752bc7f92ae77fe7ee45a8387d0343c80e700a8a7

Contents?: true

Size: 1.51 KB

Versions: 7

Compression:

Stored size: 1.51 KB

Contents

# frozen_string_literal: true

module PG
  module AWS_RDS_IAM
    class AuthTokenInjector
      def initialize(auth_token_generators: AWS_RDS_IAM.auth_token_generators)
        @auth_token_generators = auth_token_generators
        @connection_defaults = PG::Connection.conndefaults_hash
      end

      def inject_into_connection_string(connection_string)
        connection_info = ConnectionInfo.from_connection_string(connection_string)
        return connection_string unless generate_auth_token?(connection_info)

        connection_info.password = generate_auth_token(connection_info)
        connection_info.to_s
      end

      def inject_into_psql_env!(configuration_hash, psql_env)
        connection_info = ConnectionInfo.from_active_record_configuration_hash(configuration_hash)
        return unless generate_auth_token?(connection_info)

        psql_env["PGPASSWORD"] = generate_auth_token(connection_info)
      end

      private

      def generate_auth_token?(connection_info)
        connection_info.auth_token_generator_name
      end

      def generate_auth_token(connection_info)
        @auth_token_generators
          .fetch(connection_info.auth_token_generator_name)
          .call(
            user: connection_info.user || default(:user),
            host: connection_info.host || default(:host),
            port: connection_info.port || default(:port)
          )
      end

      def default(key)
        @connection_defaults.fetch(key)
      end
    end

    private_constant :AuthTokenInjector
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pg-aws_rds_iam-0.7.0 lib/pg/aws_rds_iam/auth_token_injector.rb
pg-aws_rds_iam-0.6.2 lib/pg/aws_rds_iam/auth_token_injector.rb
pg-aws_rds_iam-0.6.1 lib/pg/aws_rds_iam/auth_token_injector.rb
pg-aws_rds_iam-0.6.0 lib/pg/aws_rds_iam/auth_token_injector.rb
pg-aws_rds_iam-0.5.0 lib/pg/aws_rds_iam/auth_token_injector.rb
pg-aws_rds_iam-0.4.2 lib/pg/aws_rds_iam/auth_token_injector.rb
pg-aws_rds_iam-0.4.1 lib/pg/aws_rds_iam/auth_token_injector.rb