#!/usr/bin/ruby require 'webrick' include WEBrick class MusicServlet < WEBrick::HTTPServlet::FileHandler def url_escape(string) string.gsub(/([^ \/a-zA-Z0-9_.-]+)/n) do '%' + $1.unpack('H2' * $1.size).join('%').upcase end.tr(' ', ' ') end def set_dir_list(request, response) redirect_to_directory_uri(request, response) if(request.query_string == "pod") response['content-type'] = "text/plain" response.body = request.addr return; end local_path = response.filename list = Dir::entries(local_path).collect{|name| next if name == "." || name == ".." next if nondisclosure_name?(name) st = (File::stat(local_path + name) rescue nil) if st.nil? [ name, nil, -1 ] elsif st.directory? [ name + "/", st.mtime, -1 ] else [ name, st.mtime, st.size ] end } list.compact! list.sort! if(request.query_string == "playlist") response['content-type'] = "text/plain" base_url = request.host + ":" + request.port.to_s list.each{ |name, time, size| if size == -1 then next end response.body << url_escape(name) response.body << "|0|0|" response.body << "http://#{base_url + request.path}#{url_escape(name)}|\n" } return end response['content-type'] = "text/html" response.body = "