148 lines
4.1 KiB
Ruby
Executable file
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
|