#!/usr/bin/env ruby
#
# Leave a comment if you can ...

%w[ rubygems socket syntax/convertors/html ].each { |lib| require lib }

def header(*args)
  args.join("\r\n") + "\r\n" + "\r\n"
end

def body
  Thread.main[:body] ||= Syntax::Convertors::HTML.for_syntax("ruby").
    convert(File.read(__FILE__))
end

server = TCPServer.new(2010)
Thread.new(server.accept) do |c|
  begin
    request = []; request << c.readline.chomp until request[-1] == ""

    if request.first =~ /^GET/
      c.puts header("HTTP/1.0 200 OK", "Content-Type: text/html")
      c.puts <<-HTML
        <html><head><style> .comment{color:#005;font-style:italic;}.keyword
        {color:#A00;font-weight:bold;}.punct{color:#447;font-weight:bold;}
        .string{color:#944;}.ident{color:#004;}.constant{color:#07F;}.number
        {color:#D55;}.expr{color:#227;}.regex{color:#B66;}</style></head>
        <body>#{body}</body></html>
      HTML
    elsif request.first =~ /^POST/
      raise unless request.any? { |h| h =~ /^Content-Length: (\d+)$/i }
      body = c.read($1.to_i)
      File.open(__FILE__, 'a') do |this|
        this.puts "#{body}\n-- #{Time.now}".map { |line| "# #{line}"} << "\n"
      end
      Thread.main[:body] = nil
      c.puts header("HTTP/1.0 201 Created", "Location: /")
    else; raise
    end

  rescue; c.puts header("HTTP/1.0 400 Bad Request")
  ensure; c.close; end
end while true

# I feel like a cheater, but I know how, and therefore I do it. - Hannes
# -- Mon Jan 11 23:56:35 +0100 2010

# I can has beer? - Klaus
# -- Tue Jan 12 13:43:32 +0100 2010

# Hello! I mean 2nd! @andypsilon
# -- Tue Jan 12 13:48:51 +0100 2010

# Ah doch dritter... Klaus war schneller... Aber Bier gibt es trotzdem oder? @andypsilon
# -- Tue Jan 12 13:50:01 +0100 2010

# oh mann ich bin ja wieder viel zu spaet dran .... t.
# -- Wed Jan 20 17:20:47 +0100 2010

# __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
# -- Wed Jan 20 17:24:52 +0100 2010

#              =iTTI=i===:===+::=:;;::,;.   .;;:;;;;,:;==+;===;;==+=+, -Tim Park            ;=ITTT=====+:===;)+==+=+=++:::;++=+====I+:;;++=+=+++ii+:;            +I)I==+++==;,III=================:+===TITTT=:+;:====IIi;+             ::I=;;;;+;+=========+==+:::++::==========++i=:.===+T==:+          ;:)i)+;+;;+=======i===ITT):;;,;:;:,,;===IL==TTT+:=;,;;;;:.:          ;II++,+;+:=:,i)===T===TTI,;=;:;:.:,:,=IITTI)TTTT=,=;;;;,II=+ |       ;+)I==::+:=:=)TTT)ITT==LT);::,\:/,:;,:iI=L=iTTTi==);=::+=i)I; |__una  ;))++===:==+)TLTLTLL=LI)==)~        ~:=+=+=,=iT====+;+.=+:;):+          ;==++;,=:=iI=I=i=T===:===)         ;;;.:,.:,+);===+:==,;=I=: (Human   ;;;+;;;=;;=======)==;:=;,: /|    |\,::'::..:,;;:++:++=:::+:  Form:     :;;:;;;;===+:===++ :;:.:| `---'  |:`  :. +.,::;;;::=.;::+ S Movie)    ;:,:;;;;;;,==:,i  :`':  `-____-' ':  `:    ,:,,;;;::;::+            ;+=;;;;.::,;;;;'---'-_             -~~~-_   =);:;;;.,.:==++::,         L;;==+===,.,::::;-~.----.             _.--_ ~- I=:;:;+=iII+==iTTTTIi; Ii=ii==;;======+,+.,:::; ,' ##@@ \           / @@# ~-+ |+:;:;==ITTT===TLLLLLT;;;;:++===Ii===;==.;:._|  | ###  # |         | #  ##  ||T:+;;:===TLLT==)LLLLLL========TLL)=====,++;| -| : ##@  # |         | #  ## |'|--.++=TL:=)LLLLLLLTLLL=i==iLLLL)IIL::;:==:;|~\|  \ #### /    |      \ ###  | |  |+==TT:i=LLLLLLLLLLLTLLLLLLLT=i=)T)==:==+|| `|  ~~~~~~     L       `----' |' ||)+=IT;==)T)T=))LLLTLLLTLLLIILTLL==:;====`   |                            | //'++==TI:==i========LLLLII)ILLL)==;=====+;+\o `|           ----           |' /'+:;===II+============i=+:I)L)===;====;;;+;;`\ `|          `--'          .'o/';;;;;====T::==============TT===:====;;+;;;+;|,`-+\                     .'++|;;;+;+;+======+,+========;==)====;=+=+;;;;;+;;|;++++`-_                .'++++|:;;;;;;;:==+==++;:===+==::=)====;===;;;;+;++;(_):.;++++`-_          _-';i;+;(_);;;;;+;;;+======;;;===+.+=====+;;;=;;;;++;;+;;.:;;;;+;+;|`-_    _-'|):;;;+;,;);;;;;;;;;;;;+====+;;.+;:======;;;.+;+;;;+++;+;;;;++;+;++|iii`--'iii|=;;;;;;;;;;;;+;;:;;;;;;;;===;;+.;.;+====;;;;;,:;;+;+;+;+.---.+;+++|iiiiiiiiii|+;;;;;;;;;;;;:;;;;;:;;;;;;;+;;;;;::;;;==+;;;;;;,;;;;;;;|     `-.++|iiiiiiiiii|+ ______;;;;;;:;;;:;;;;;;;;;;:;;+;.;+:;;+;;++;;::++;;+|'_.-----._~~--__ii__----'      |;;;;:;;;;;;;;;;;;;;;;;,+;:;;;;;;;;;;;;;,;;;;+`--------------/.()_____.------.|:;;;:;;;;;;;;;;;;;;;;,;+=;;;;;;;;;+;;;::;;+;+;=)=ii+;ii___/  |+=-------------',;;;;;;;:;;;;;;;;;;,.:;+=:;;;==;;;;;;+;___----------~~~i/'  |'i\   \iii~~--.__;;;;;;;;;;;;;;;;;;:;;;;+;,;;===___.--~~    ||      . i/'   |'iii\   `\ii.     ||~~~---___;;;;;;:;=+;;::====./           /++\_.-.__/'    |' ``''\    `\.   __|`|        \._;;;:===;======/        __.--:;+,,,::..`-_   |_______\  ./'__--+:;+++----_     \;:==========|        /++,;,,,+=.,:++===+-_|HHHHHHHHH\/HH|===+,+,+:..++;;-     \:+========|'       |++++;;   ,,,,,,+==|HHHHHHHHHHHHHHHH|....:...   ;.,==\_    |+========|        |,....:,.:,++,.----'HHHHHHHHHHHHHHH.H|..,,,,...:.+++:::|   `|;====++|'      ii`,,.+i..,,___/TTTTHHHHHHHHHHHHHHHHHHH`-_---___-_..,++__|    |;=====+|      iii)\ _+;..-'TTTTTTTTHH.HHHHHHHHHHHHH.HHHHHTTTTTTTT|../iiii    |=====+|'      iiii|'T`-'TTTTTTTTTTTTHH.HHTTTTTTTTTTTTTHHHTTTTTTTT`-|iiiii    `|;.:++|       iiii|TTTTTTTTTTTTTTTTTTHTTTTTTTTTTTT.TTTTTTTTTTTTTTTT|iiiii     |+=;=|'      iiiiii\TTTTTTTTTTTTTTTTTTT.TTTTTTTTT.TTTTTTTTTTTTTTTT/iiiiii     |:===        iiiiiii\TTTTTTTTTTTTTTTTTTTHHHHHHHHHHHHTTTTTTTTTTTTT/iiiiiii     `|===       iiiiiiii|`\TTTTTTTTTTTTTTHHHH.HHHHHH.HHHHHHHTTTTTTT/'|iiiiiiii     |:==       iiiiiii|':+~\TTTTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHTTT/';+`|iiiiiii     |,++      iiiiiiii|:;++|TTTTTTTTTHHHHHHHH.HHHH.HHHHHHHHHHHHT|+,;;|iiiiiii     |:+=      iiiiiii|'++++`|TTTTTTTTHHHHHHHHHHHHHHHHHHHHHHHHHHH|:;+;`|iiiiii     `|:+     iiiiiii|';+++++`|TTTTTTTHHHHHHHHHH.HHHHHHHHHHHHHHH|'+;;;;|iiiiiii     |;;     iiiiii|'++;;+;++`|TTTTTTHHHHHH_------_HHHHHHHHHHH|'++;;;;`|iiiiii     |i;    iiiiii|';+;;;;+;++`|TTTTTTHHH.-    _---=HHHHHHHHH|';++;;;;;`|iiiii     `|;    iiiii|';+;;;+;;;;++`|TTTTTHH:    .'HHHHHHHHHHHHH|':;;;;;;;;;|iiiii      |;   iiiiii|:+;;;;;;;;++++|TTTTTHH|    |HHHHHHHHHHHHH.|;++;;++;;;;`|iiiii     |,   iiiii|'+;+;+;./~\_/~~`|TTTTHH:    `\HHHHH.HHHHHH|\__/~\;+;;;;;|iiiii     |+  iiiii|';+;___/:;;:;;;;+|TTTTTH`\     ~---=/HHHHHH|:;;;;:\__;;;;`|iiii     `|  iiii|':;;/+++++,,,,..,,|ITTTTTHH~-.____-~~HHHHHHH|,,....++;~-.;;|iiiii iiii|':;;/,,.,.,,,.,,..|IITTTTTHHHHHHHHHHHHHHHHHHHH|,,,++.....|;;`|iiiii
# -- Wed Jan 20 17:27:23 +0100 2010

# 5ter! - mnemonikk
# -- Wed Jan 20 17:37:55 +0100 2010

# iTTi? Tim Park? At first I thought this is brainfuck code, but no. Very confused. Til
# -- Wed Jan 20 18:34:29 +0100 2010

# And yes: of course there will be beer for the first three! Til
# -- Wed Jan 20 18:35:10 +0100 2010

# Now with caching
# -- Wed Jan 20 18:53:47 +0100 2010

# hihi
# -- Tue Feb 02 18:50:14 +0100 2010

# hihi
# -- Tue Feb 02 18:50:24 +0100 2010

# \nhihi
# -- Tue Feb 02 18:50:39 +0100 2010

# haha
# -- Fri Feb 05 20:23:26 +0100 2010

# hoho
# -- Fri Feb 05 20:23:37 +0100 2010

# huhu
# -- Tue Feb 09 20:00:27 +0100 2010

# bla
# -- Tue Mar 02 15:44:17 +0100 2010

# hallo til, ein test von lukas
# -- Fri Mar 12 11:05:59 +0100 2010

# hallo lukas!
# -- Fri Mar 12 11:08:01 +0100 2010

# 
# 
# 
# -- Sun Mar 21 00:23:05 +0100 2010

# 
# 
# -- Sun Mar 21 00:25:16 +0100 2010

# 
# -- Sun Mar 21 00:26:31 +0100 2010

# 
# -- Sun Mar 21 00:28:31 +0100 2010

# BURP
# -- Sun Mar 21 00:29:27 +0100 2010

# SCHLURP
# -- Fri Mar 26 17:51:02 +0100 2010

# schlump
# -- Mon Mar 29 14:45:54 +0200 2010

# schlamp
# -- Mon Mar 29 14:46:05 +0200 2010

# ohai=ohai
# -- Mon May 17 10:05:21 +0200 2010

# g'day
# -- Mon May 17 10:06:31 +0200 2010

# g\'day sir\!
# -- Mon May 17 10:06:48 +0200 2010

# Hello from la Suede. olleolleolle
# -- Thu May 20 09:39:14 +0200 2010