class Inspec::Resources::PostgresSession

Public Class Methods

new(user, pass, host = nil, port = nil) click to toggle source
# File lib/inspec/resources/postgres_session.rb, line 43
def initialize(user, pass, host = nil, port = nil)
  @user = user || "postgres"
  @pass = pass
  @host = host || "localhost"
  @port = port || 5432
  raise Inspec::Exceptions::ResourceFailed, "Can't run PostgreSQL SQL checks without authentication." if @user.nil? || @pass.nil?
end

Public Instance Methods

query(query, db = []) click to toggle source
# File lib/inspec/resources/postgres_session.rb, line 51
def query(query, db = [])
  raise Inspec::Exceptions::ResourceFailed, "#{resource_exception_message}" if resource_failed?

  psql_cmd = create_psql_cmd(query, db)
  cmd = inspec.command(psql_cmd, redact_regex: %r{(:\/\/[a-z]*:).*(@)})
  out = cmd.stdout + "\n" + cmd.stderr
  if cmd.exit_status != 0 || out =~ /could not connect to .*/ || out.downcase =~ /^error:.*/
    raise Inspec::Exceptions::ResourceFailed, "PostgreSQL query with errors: #{out}"
  else
    Lines.new(cmd.stdout.strip, "PostgreSQL query: #{query}")
  end
end

Private Instance Methods

create_psql_cmd(query, db = []) click to toggle source
# File lib/inspec/resources/postgres_session.rb, line 70
def create_psql_cmd(query, db = [])
  dbs = db.map { |x| "#{x}" }.join(" ")
  if inspec.os.windows?
    "psql -d postgresql://#{@user}:#{@pass}@#{@host}:#{@port}/#{dbs} -A -t -w -c \"#{query}\""
  else
    "psql -d postgresql://#{@user}:#{@pass}@#{@host}:#{@port}/#{dbs} -A -t -w -c #{escaped_query(query)}"
  end
end
escaped_query(query) click to toggle source
# File lib/inspec/resources/postgres_session.rb, line 66
def escaped_query(query)
  Shellwords.escape(query)
end