Skip to content

Instantly share code, notes, and snippets.

@Sam-Serpoosh
Created October 25, 2012 22:24
Show Gist options
  • Save Sam-Serpoosh/3955849 to your computer and use it in GitHub Desktop.
Save Sam-Serpoosh/3955849 to your computer and use it in GitHub Desktop.
Simple webserver which let you explore your files and directories of your system in a browser!
require 'socket'
HTTP_HEADER = "HTTP/1.1 200/OK\r\nContent-type:text/html\r\n\r\n"
CURRENT_DIR = "."
SPACE_IN_PARAM = "%20"
def file_explorer
webserver = TCPServer.new("localhost", 2000)
loop do
Thread.start(webserver.accept) do |session|
session.print(HTTP_HEADER)
render_directory_files(session)
session.close
end
end
end
def render_directory_files(session)
directory = fetch_directory_param(session)
Dir.chdir(directory)
current_directory = Dir.new(CURRENT_DIR)
format_entries_of(current_directory).each { |file| print_line(session, file) }
end
def fetch_directory_param(session)
directory = CURRENT_DIR
request = session.gets
params = request.sub(/GET\ /, "").split(/HTTP/)[0]
params_stripped = params.rstrip
directory = params_stripped.split(/\?/)[1] if params_stripped.include?("?")
directory = directory.sub(/\%20/, " ") if directory.include?(SPACE_IN_PARAM)
directory
end
def format_entries_of(directory)
formatted_entries = []
directory.entries.each do |entry|
formatted_entry = format(entry)
formatted_entries << formatted_entry
end
formatted_entries
end
def format(entry)
File.directory?(entry) ? "<a href=\"http://localhost:2000?#{entry}\">#{entry}/<a>" : entry
end
def print_line(session, text)
session.print("#{text}<br />")
end
file_explorer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment