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