www2.0/cgi-bin/whoami.cgi

148 lines
4.1 KiB
Ruby
Executable file

#!/usr/bin/env ruby
# Reflection page CGI program
# Daniel Bowling <swaggboi@slackware.uk>
# Oct 2020
require 'cgi'
require 'ipaddress'
# Create CGI object
cgi = CGI.new('html4')
# Style sheet hash
styling = {
rel: 'stylesheet',
type: 'text/css',
href: '/css/swagg.css'
}
# Div hashes
inner = { class: 'inner' }
outer = { class: 'outer' }
# CGI Environment variables
referer = cgi.referer || nil
user_agent = cgi.user_agent || nil
remote_addr = ENV['HTTP_X_FORWARDED_FOR'] || cgi.remote_addr || nil
remote_port = ENV['HTTP_X_FORWARDED_PORT'] || ENV['REMOTE_PORT'] || nil
request_method = cgi.request_method || nil
server_admin = ENV['SERVER_ADMIN'] || nil
server_protocol = cgi.server_protocol || nil
server_software = cgi.server_software || nil
# Environment hash
cgi_env = {
'referer' => referer,
'string' => user_agent,
'address' => remote_addr,
'port' => remote_port,
'method' => request_method,
'webmaster' => server_admin,
'protocol' => server_protocol,
'server' => server_software
}
# Footer
footer = "<footer>Return to #{cgi.a('/') { 'homepage' }}</footer>\n"
# Easter egg hash
easter_egg = {
src: '/Pictures/oprahv6.jpg',
alt: 'Oprah screaming that everyone gets a /48',
width: 400,
height: 300
}
# Easter egg for IPv6
footer =
if IPAddress.valid_ipv6?(cgi_env['address'])
cgi.img(easter_egg) + cgi.br + "\n" + cgi.br + "\n" + footer
else
'<iframe width="560"
height="315"
src="https://www.youtube-nocookie.com/embed/QOQ2JxIddzw"
frameborder="0" allow="accelerometer;
autoplay;
clipboard-write;
encrypted-media;
gyroscope;
picture-in-picture"
allowfullscreen>
</iframe>' + cgi.br + "\n" + footer
end
# Begin HTML output
cgi.out do
# Open html tag
"\n" + cgi.html do
# Open head tag
"\n" + cgi.head do
# Title tag
"\n" + cgi.title { 'Reflection Page' } + "\n" +
# Link tag
cgi.link(styling) + "\n"
# Close head tag
end + "\n" +
# Open body tag
cgi.body do
"\n" + cgi.div(outer) do
# H1 heading
"\n" + cgi.h1 { 'Swagg::Net Reflection Page' }
end + "\n" +
# Open div tag (class="inner")
cgi.div(inner) do
# Begin table
"\n" + cgi.table do
# Referer row
"\n" + cgi.tr do
"\n" + cgi.th { 'Your referer: ' } + "\n" +
cgi.td { cgi_env['referer'] } + "\n"
end +
# User-agent string row
"\n" + cgi.tr do
"\n" + cgi.th { 'Your user-agent string: ' } + "\n" +
cgi.td { cgi_env['string'] } + "\n"
end +
# IP address row
"\n" + cgi.tr do
"\n" + cgi.th { 'Your IP address: ' } + "\n" +
cgi.td { cgi_env['address'] } + "\n"
end +
# Port row
"\n" + cgi.tr do
"\n" + cgi.th { 'Your TCP port: ' } + "\n" +
cgi.td { cgi_env['port'] } + "\n"
end +
# Request method row
"\n" + cgi.tr do
"\n" + cgi.th { 'Your request method: ' } + "\n" +
cgi.td { cgi_env['method'] } + "\n"
end +
# Webmaster row
"\n" + cgi.tr do
"\n" + cgi.th { 'My webmaster: ' } + "\n" +
cgi.td { cgi_env['webmaster'] } + "\n"
end +
# Server protocol row
"\n" + cgi.tr do
"\n" + cgi.th { 'My protocol: ' } + "\n" +
cgi.td { cgi_env['protocol'] } + "\n"
end +
# Server software row
"\n" + cgi.tr do
"\n" + cgi.th { 'My server: ' } + "\n" +
cgi.td { cgi_env['server'] } + "\n"
end + "\n"
# End table
end + "\n" +
cgi.br + "\n" +
# Footer
footer
# Close div tag (class="inner")
end + "\n"
# Close body tag
end + "\n"
# Close html tag
end + "\n"
# End HTML output
end