#!/usr/bin/env ruby

print "Content-type: text/plain; charset=UTF-8\r\n\r\n"

ENV.sort.each do |k,v|
  if k.eql? 'HTTP_AUTHORIZATION'
      # cannot use sub! because value is fozen
      # redact non-empty string
      if v and not v.empty?
        v = '<redacted>'
      end
  end
  print "#{k} #{v}\n"
end

def puts_system(*cmd)
  puts ['$', cmd].join ' '
  system *cmd
end

# Optional extra info (from the main script only)
query = ENV['QUERY_STRING'] || ARGV[0]
if query and not query.empty? and ENV['SCRIPT_URL'] == '/test.cgi'
    print "\n"
    puts_system('id')
    puts_system('which','-a','svn')
    puts_system('svn','--version')
    puts_system('which','-a','svnmucc')
    puts_system('svnmucc','--version')
    puts_system('which','-a','ruby')
    puts_system('which','-a','ruby2.3.0')
    puts_system('ruby','-v')
    puts_system('gem','env')
    puts_system('which','-a','gem')
    puts_system('PATH=/usr/local/bin:$PATH which -a gem')
    puts_system('service puppet status')
    puts_system('git ls-remote origin master')
    wait=query.match(/^sleep=(\d+)$/)[1].to_i rescue 0
    if wait > 0
      print "\nWaiting #{wait} seconds ..."
      STDOUT.flush
      sleep wait
      print " done waiting\n"
    end
    require 'socket'
    hostname = Socket.gethostname
    require 'resolv'
    master = nil
    current = nil
    Resolv::DNS.open do |rs|
      master = rs.getaddress("whimsy.apache.org")
      current = rs.getaddress(hostname) rescue nil
    end
    print "master: #{master} current: #{current}\n"
    if current == master
      print "This system is the Whimsy master\n"
    else
      print "This system is not the Whimsy master\n"
    end
    print "All done\n"
end
