ruby_on_ruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/.rvmrc +1 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/README.md +66 -0
- data/Rakefile +1 -0
- data/lib/ruby_on_ruby.rb +5 -0
- data/lib/ruby_on_ruby/console.rb +7 -0
- data/lib/ruby_on_ruby/context.rb +33 -0
- data/lib/ruby_on_ruby/file_loader.rb +31 -0
- data/lib/ruby_on_ruby/ruby_stream.rb +27 -0
- data/lib/ruby_on_ruby/version.rb +3 -0
- data/lib/rubyonruby.rb +1 -0
- data/ruby_in_ruby.gemspec +19 -0
- data/vendor/javascripts/emscripted-ruby/lib/.document +106 -0
- data/vendor/javascripts/emscripted-ruby/lib/English.rb +155 -0
- data/vendor/javascripts/emscripted-ruby/lib/Env.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/README +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/abbrev.rb +103 -0
- data/vendor/javascripts/emscripted-ruby/lib/base64.rb +133 -0
- data/vendor/javascripts/emscripted-ruby/lib/benchmark.rb +572 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi-lib.rb +272 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi.rb +2308 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi/.document +2 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi/session.rb +498 -0
- data/vendor/javascripts/emscripted-ruby/lib/cgi/session/pstore.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/complex.rb +663 -0
- data/vendor/javascripts/emscripted-ruby/lib/csv.rb +992 -0
- data/vendor/javascripts/emscripted-ruby/lib/date.rb +1767 -0
- data/vendor/javascripts/emscripted-ruby/lib/date/format.rb +1190 -0
- data/vendor/javascripts/emscripted-ruby/lib/date2.rb +5 -0
- data/vendor/javascripts/emscripted-ruby/lib/debug.rb +947 -0
- data/vendor/javascripts/emscripted-ruby/lib/delegate.rb +337 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb.rb +2 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/acl.rb +146 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/drb.rb +1782 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/eq.rb +16 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/extserv.rb +64 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/extservm.rb +89 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/gw.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/invokemethod.rb +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/observer.rb +22 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/ssl.rb +190 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/timeridconv.rb +91 -0
- data/vendor/javascripts/emscripted-ruby/lib/drb/unix.rb +108 -0
- data/vendor/javascripts/emscripted-ruby/lib/e2mmap.rb +195 -0
- data/vendor/javascripts/emscripted-ruby/lib/erb.rb +880 -0
- data/vendor/javascripts/emscripted-ruby/lib/eregex.rb +37 -0
- data/vendor/javascripts/emscripted-ruby/lib/fileutils.rb +1591 -0
- data/vendor/javascripts/emscripted-ruby/lib/finalize.rb +193 -0
- data/vendor/javascripts/emscripted-ruby/lib/find.rb +79 -0
- data/vendor/javascripts/emscripted-ruby/lib/forwardable.rb +218 -0
- data/vendor/javascripts/emscripted-ruby/lib/ftools.rb +261 -0
- data/vendor/javascripts/emscripted-ruby/lib/generator.rb +418 -0
- data/vendor/javascripts/emscripted-ruby/lib/getoptlong.rb +621 -0
- data/vendor/javascripts/emscripted-ruby/lib/getopts.rb +127 -0
- data/vendor/javascripts/emscripted-ruby/lib/gserver.rb +253 -0
- data/vendor/javascripts/emscripted-ruby/lib/importenv.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/ipaddr.rb +814 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb.rb +346 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/chws.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/fork.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/help.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/load.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/nop.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/pushws.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/cmd/subirb.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/completion.rb +205 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/context.rb +255 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/change-ws.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/history.rb +110 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/loader.rb +120 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/math-mode.rb +37 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/multi-irb.rb +241 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/save-history.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/tracer.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/use-loader.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ext/workspaces.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/extend-command.rb +264 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/frame.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/help.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/init.rb +259 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/input-method.rb +120 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/error.rb +30 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/help-message +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/error.rb +27 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/lc/ja/help-message +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/locale.rb +184 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/notifier.rb +145 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/output-method.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-lex.rb +1149 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ruby-token.rb +273 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/slex.rb +285 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/version.rb +16 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/workspace.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/ws-for-case-2.rb +15 -0
- data/vendor/javascripts/emscripted-ruby/lib/irb/xmp.rb +86 -0
- data/vendor/javascripts/emscripted-ruby/lib/jcode.rb +220 -0
- data/vendor/javascripts/emscripted-ruby/lib/logger.rb +703 -0
- data/vendor/javascripts/emscripted-ruby/lib/mailread.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/mathn.rb +308 -0
- data/vendor/javascripts/emscripted-ruby/lib/matrix.rb +1278 -0
- data/vendor/javascripts/emscripted-ruby/lib/mkmf.rb +1811 -0
- data/vendor/javascripts/emscripted-ruby/lib/monitor.rb +352 -0
- data/vendor/javascripts/emscripted-ruby/lib/mutex_m.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/ftp.rb +927 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/http.rb +2277 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/https.rb +173 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/imap.rb +3371 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/pop.rb +999 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/protocol.rb +392 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/smtp.rb +1014 -0
- data/vendor/javascripts/emscripted-ruby/lib/net/telnet.rb +756 -0
- data/vendor/javascripts/emscripted-ruby/lib/observer.rb +192 -0
- data/vendor/javascripts/emscripted-ruby/lib/open-uri.rb +678 -0
- data/vendor/javascripts/emscripted-ruby/lib/open3.rb +101 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse.rb +1790 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/date.rb +17 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/shellwords.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/time.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/uri.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/optparse/version.rb +70 -0
- data/vendor/javascripts/emscripted-ruby/lib/ostruct.rb +146 -0
- data/vendor/javascripts/emscripted-ruby/lib/parsearg.rb +87 -0
- data/vendor/javascripts/emscripted-ruby/lib/parsedate.rb +53 -0
- data/vendor/javascripts/emscripted-ruby/lib/pathname.rb +1062 -0
- data/vendor/javascripts/emscripted-ruby/lib/ping.rb +64 -0
- data/vendor/javascripts/emscripted-ruby/lib/pp.rb +654 -0
- data/vendor/javascripts/emscripted-ruby/lib/prettyprint.rb +896 -0
- data/vendor/javascripts/emscripted-ruby/lib/profile.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/profiler.rb +59 -0
- data/vendor/javascripts/emscripted-ruby/lib/pstore.rb +395 -0
- data/vendor/javascripts/emscripted-ruby/lib/racc/parser.rb +442 -0
- data/vendor/javascripts/emscripted-ruby/lib/rational.rb +564 -0
- data/vendor/javascripts/emscripted-ruby/lib/readbytes.rb +41 -0
- data/vendor/javascripts/emscripted-ruby/lib/resolv-replace.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/resolv.rb +2210 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/attlistdecl.rb +62 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/attribute.rb +185 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/cdata.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/child.rb +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/comment.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/doctype.rb +271 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/document.rb +208 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/attlistdecl.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/dtd.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/elementdecl.rb +17 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/entitydecl.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/dtd/notationdecl.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/element.rb +1227 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encoding.rb +71 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/CP-1252.rb +103 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/EUC-JP.rb +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ICONV.rb +22 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-1.rb +7 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/ISO-8859-15.rb +72 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT-JIS.rb +37 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/SHIFT_JIS.rb +1 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UNILE.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/US-ASCII.rb +30 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-16.rb +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/encodings/UTF-8.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/entity.rb +165 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/default.rb +109 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/pretty.rb +137 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/formatters/transitive.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/functions.rb +382 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/instruction.rb +70 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/light/node.rb +196 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/namespace.rb +47 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/node.rb +75 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/output.rb +24 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parent.rb +166 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parseexception.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/baseparser.rb +503 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/lightparser.rb +60 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/pullparser.rb +196 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/sax2parser.rb +238 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/streamparser.rb +46 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/treeparser.rb +97 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/ultralightparser.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/parsers/xpathparser.rb +698 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/quickpath.rb +266 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/rexml.rb +32 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/sax2listener.rb +97 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/source.rb +251 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/streamlistener.rb +92 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/syncenumerator.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/text.rb +344 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/undefinednamespaceexception.rb +8 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/relaxng.rb +559 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validation.rb +155 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/validation/validationexception.rb +9 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xmldecl.rb +119 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xmltokens.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath.rb +66 -0
- data/vendor/javascripts/emscripted-ruby/lib/rexml/xpath_parser.rb +792 -0
- data/vendor/javascripts/emscripted-ruby/lib/rinda/rinda.rb +283 -0
- data/vendor/javascripts/emscripted-ruby/lib/rinda/ring.rb +271 -0
- data/vendor/javascripts/emscripted-ruby/lib/rinda/tuplespace.rb +642 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss.rb +19 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/0.9.rb +428 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/1.0.rb +452 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/2.0.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/atom.rb +749 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/content.rb +31 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/content/1.0.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/content/2.0.rb +12 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/converter.rb +162 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore.rb +161 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/1.0.rb +13 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/2.0.rb +13 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/dublincore/atom.rb +17 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/image.rb +193 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/itunes.rb +410 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker.rb +44 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/0.9.rb +467 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/1.0.rb +434 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/2.0.rb +223 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/atom.rb +172 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/base.rb +868 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/content.rb +21 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/dublincore.rb +124 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/entry.rb +163 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/feed.rb +429 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/image.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/itunes.rb +242 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/slash.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/syndication.rb +18 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/taxonomy.rb +118 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/maker/trackback.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/parser.rb +541 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/rexmlparser.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/rss.rb +1312 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/slash.rb +49 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/syndication.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/taxonomy.rb +145 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/trackback.rb +288 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/utils.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xml-stylesheet.rb +105 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xml.rb +71 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xmlparser.rb +93 -0
- data/vendor/javascripts/emscripted-ruby/lib/rss/xmlscanner.rb +121 -0
- data/vendor/javascripts/emscripted-ruby/lib/rubyunit.rb +6 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/assert.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/cui/testrunner.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/error.rb +9 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/testcase.rb +45 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/testresult.rb +44 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/testsuite.rb +26 -0
- data/vendor/javascripts/emscripted-ruby/lib/runit/topublic.rb +8 -0
- data/vendor/javascripts/emscripted-ruby/lib/scanf.rb +702 -0
- data/vendor/javascripts/emscripted-ruby/lib/securerandom.rb +137 -0
- data/vendor/javascripts/emscripted-ruby/lib/set.rb +1233 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell.rb +269 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/builtin-command.rb +154 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/command-processor.rb +592 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/error.rb +26 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/filter.rb +110 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/process-controller.rb +260 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/system-command.rb +168 -0
- data/vendor/javascripts/emscripted-ruby/lib/shell/version.rb +16 -0
- data/vendor/javascripts/emscripted-ruby/lib/shellwords.rb +172 -0
- data/vendor/javascripts/emscripted-ruby/lib/singleton.rb +360 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/attachment.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/baseData.rb +942 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/element.rb +258 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/aspDotNetHandler.rb +213 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/handler.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/literalHandler.rb +226 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/encodingstyle/soapHandler.rb +582 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/generator.rb +268 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/header/handler.rb +57 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/header/handlerset.rb +70 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/header/simplehandler.rb +44 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/httpconfigloader.rb +119 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping.rb +10 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/factory.rb +355 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/mapping.rb +381 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/registry.rb +541 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/rubytypeFactory.rb +475 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/typeMap.rb +50 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlencodedregistry.rb +280 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mapping/wsdlliteralregistry.rb +418 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/marshal.rb +59 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/mimemessage.rb +240 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/netHttpClient.rb +190 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/parser.rb +251 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/processor.rb +66 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/property.rb +333 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/cgistub.rb +206 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/driver.rb +254 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/element.rb +325 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/httpserver.rb +129 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/proxy.rb +497 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/router.rb +594 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/rpc.rb +25 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/soaplet.rb +162 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/rpc/standaloneServer.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/soap.rb +140 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/streamHandler.rb +229 -0
- data/vendor/javascripts/emscripted-ruby/lib/soap/wsdlDriver.rb +575 -0
- data/vendor/javascripts/emscripted-ruby/lib/sync.rb +311 -0
- data/vendor/javascripts/emscripted-ruby/lib/tempfile.rb +209 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit.rb +280 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertionfailederror.rb +14 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/assertions.rb +622 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/autorunner.rb +220 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/dir.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/collector/objectspace.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/error.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/failure.rb +51 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/testcase.rb +160 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/testresult.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/testsuite.rb +76 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/console/testrunner.rb +127 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/fox/testrunner.rb +268 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk/testrunner.rb +416 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/gtk2/testrunner.rb +465 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnermediator.rb +68 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/testrunnerutilities.rb +46 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/ui/tk/testrunner.rb +260 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/backtracefilter.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/observable.rb +90 -0
- data/vendor/javascripts/emscripted-ruby/lib/test/unit/util/procwrapper.rb +48 -0
- data/vendor/javascripts/emscripted-ruby/lib/thread.rb +479 -0
- data/vendor/javascripts/emscripted-ruby/lib/thwait.rb +169 -0
- data/vendor/javascripts/emscripted-ruby/lib/time.rb +797 -0
- data/vendor/javascripts/emscripted-ruby/lib/timeout.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/tmpdir.rb +130 -0
- data/vendor/javascripts/emscripted-ruby/lib/tracer.rb +167 -0
- data/vendor/javascripts/emscripted-ruby/lib/tsort.rb +290 -0
- data/vendor/javascripts/emscripted-ruby/lib/un.rb +235 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri.rb +29 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/common.rb +611 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/ftp.rb +198 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/generic.rb +1122 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/http.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/https.rb +20 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/ldap.rb +190 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/ldaps.rb +12 -0
- data/vendor/javascripts/emscripted-ruby/lib/uri/mailto.rb +266 -0
- data/vendor/javascripts/emscripted-ruby/lib/weakref.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick.rb +29 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/accesslog.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/cgi.rb +257 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/compat.rb +15 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/config.rb +97 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/cookie.rb +110 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/htmlutils.rb +25 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth.rb +45 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/authenticator.rb +79 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/basicauth.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/digestauth.rb +343 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htdigest.rb +91 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htgroup.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/htpasswd.rb +83 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpauth/userdb.rb +29 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpproxy.rb +254 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httprequest.rb +365 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpresponse.rb +327 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/https.rb +63 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpserver.rb +210 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet.rb +22 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/abstract.rb +71 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/cgihandler.rb +108 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/erbhandler.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/filehandler.rb +435 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpservlet/prochandler.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpstatus.rb +126 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httputils.rb +399 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/httpversion.rb +49 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/log.rb +88 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/server.rb +200 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/ssl.rb +126 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/utils.rb +100 -0
- data/vendor/javascripts/emscripted-ruby/lib/webrick/version.rb +13 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/binding.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/data.rb +64 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/definitions.rb +250 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/documentation.rb +32 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/import.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/importer.rb +38 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/info.rb +39 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/message.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/operation.rb +130 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/operationBinding.rb +108 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/param.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/parser.rb +163 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/part.rb +52 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/port.rb +84 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/portType.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/service.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/address.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/binding.rb +49 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/body.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/cgiStubCreator.rb +76 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreator.rb +314 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/classDefCreatorSupport.rb +126 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/clientSkeltonCreator.rb +78 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/complexType.rb +161 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/data.rb +42 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/definitions.rb +149 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/driverCreator.rb +95 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/element.rb +28 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/fault.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/header.rb +86 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/headerfault.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/mappingRegistryCreator.rb +92 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/methodDefCreator.rb +228 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/operation.rb +122 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/servantSkeltonCreator.rb +67 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/standaloneServerStubCreator.rb +85 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/soap/wsdl2ruby.rb +176 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/types.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/wsdl.rb +23 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/all.rb +69 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/annotation.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/any.rb +56 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/attribute.rb +127 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/choice.rb +69 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexContent.rb +92 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/complexType.rb +139 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/content.rb +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/data.rb +80 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/element.rb +154 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/enumeration.rb +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/import.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/importer.rb +87 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/include.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/length.rb +35 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/parser.rb +166 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/pattern.rb +36 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/schema.rb +143 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/sequence.rb +69 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleContent.rb +65 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleRestriction.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/simpleType.rb +73 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/unique.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/.document +1 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/README.txt +31 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/base64.rb +81 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/client.rb +624 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/config.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/create.rb +290 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/datetime.rb +142 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/httpserver.rb +178 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/marshal.rb +76 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/parser.rb +813 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/server.rb +780 -0
- data/vendor/javascripts/emscripted-ruby/lib/xmlrpc/utils.rb +165 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/charset.rb +187 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen.rb +12 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/classdef.rb +203 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/commentdef.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/gensupport.rb +166 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/methoddef.rb +63 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/codegen/moduledef.rb +191 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes.rb +1269 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/datatypes1999.rb +20 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/iconvcharset.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/mapping.rb +42 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/namedelements.rb +95 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/ns.rb +140 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/qname.rb +78 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser.rb +61 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/parser.rb +96 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlparser.rb +50 -0
- data/vendor/javascripts/emscripted-ruby/lib/xsd/xmlparser/xmlscanner.rb +147 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml.rb +440 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/baseemitter.rb +247 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/basenode.rb +216 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/constants.rb +45 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/dbm.rb +111 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/encoding.rb +33 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/error.rb +34 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/loader.rb +14 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/rubytypes.rb +408 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/store.rb +43 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/stream.rb +40 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/stringio.rb +83 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/syck.rb +19 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/tag.rb +91 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/types.rb +192 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/yamlnode.rb +54 -0
- data/vendor/javascripts/emscripted-ruby/lib/yaml/ypath.rb +52 -0
- data/vendor/javascripts/emscripted-ruby/ruby.closure.js +7201 -0
- metadata +554 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# compat.rb -- cross platform compatibility
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2002 GOTOU Yuuzou
|
6
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
7
|
+
# reserved.
|
8
|
+
#
|
9
|
+
# $IPR: compat.rb,v 1.6 2002/10/01 17:16:32 gotoyuzo Exp $
|
10
|
+
|
11
|
+
module Errno
|
12
|
+
class EPROTO < SystemCallError; end
|
13
|
+
class ECONNRESET < SystemCallError; end
|
14
|
+
class ECONNABORTED < SystemCallError; end
|
15
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#
|
2
|
+
# config.rb -- Default configurations.
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
6
|
+
# Copyright (c) 2003 Internet Programming with Ruby writers. All rights
|
7
|
+
# reserved.
|
8
|
+
#
|
9
|
+
# $IPR: config.rb,v 1.52 2003/07/22 19:20:42 gotoyuzo Exp $
|
10
|
+
|
11
|
+
require 'webrick/version'
|
12
|
+
require 'webrick/httpversion'
|
13
|
+
require 'webrick/httputils'
|
14
|
+
require 'webrick/utils'
|
15
|
+
require 'webrick/log'
|
16
|
+
|
17
|
+
module WEBrick
|
18
|
+
module Config
|
19
|
+
LIBDIR = File::dirname(__FILE__)
|
20
|
+
|
21
|
+
# for GenericServer
|
22
|
+
General = {
|
23
|
+
:ServerName => Utils::getservername,
|
24
|
+
:BindAddress => nil, # "0.0.0.0" or "::" or nil
|
25
|
+
:Port => nil, # users MUST specifiy this!!
|
26
|
+
:MaxClients => 100, # maximum number of the concurrent connections
|
27
|
+
:ServerType => nil, # default: WEBrick::SimpleServer
|
28
|
+
:Logger => nil, # default: WEBrick::Log.new
|
29
|
+
:ServerSoftware => "WEBrick/#{WEBrick::VERSION} " +
|
30
|
+
"(Ruby/#{RUBY_VERSION}/#{RUBY_RELEASE_DATE})",
|
31
|
+
:TempDir => ENV['TMPDIR']||ENV['TMP']||ENV['TEMP']||'/tmp',
|
32
|
+
:DoNotListen => false,
|
33
|
+
:StartCallback => nil,
|
34
|
+
:StopCallback => nil,
|
35
|
+
:AcceptCallback => nil,
|
36
|
+
}
|
37
|
+
|
38
|
+
# for HTTPServer, HTTPRequest, HTTPResponse ...
|
39
|
+
HTTP = General.dup.update(
|
40
|
+
:Port => 80,
|
41
|
+
:RequestTimeout => 30,
|
42
|
+
:HTTPVersion => HTTPVersion.new("1.1"),
|
43
|
+
:AccessLog => nil,
|
44
|
+
:MimeTypes => HTTPUtils::DefaultMimeTypes,
|
45
|
+
:DirectoryIndex => ["index.html","index.htm","index.cgi","index.rhtml"],
|
46
|
+
:DocumentRoot => nil,
|
47
|
+
:DocumentRootOptions => { :FancyIndexing => true },
|
48
|
+
:RequestHandler => nil,
|
49
|
+
:RequestCallback => nil, # alias of :RequestHandler
|
50
|
+
:ServerAlias => nil,
|
51
|
+
|
52
|
+
# for HTTPProxyServer
|
53
|
+
:ProxyAuthProc => nil,
|
54
|
+
:ProxyContentHandler => nil,
|
55
|
+
:ProxyVia => true,
|
56
|
+
:ProxyTimeout => true,
|
57
|
+
:ProxyURI => nil,
|
58
|
+
|
59
|
+
:CGIInterpreter => nil,
|
60
|
+
:CGIPathEnv => nil,
|
61
|
+
|
62
|
+
# workaround: if Request-URIs contain 8bit chars,
|
63
|
+
# they should be escaped before calling of URI::parse().
|
64
|
+
:Escape8bitURI => false
|
65
|
+
)
|
66
|
+
|
67
|
+
FileHandler = {
|
68
|
+
:NondisclosureName => [".ht*", "*~"],
|
69
|
+
:FancyIndexing => false,
|
70
|
+
:HandlerTable => {},
|
71
|
+
:HandlerCallback => nil,
|
72
|
+
:DirectoryCallback => nil,
|
73
|
+
:FileCallback => nil,
|
74
|
+
:UserDir => nil, # e.g. "public_html"
|
75
|
+
:AcceptableLanguages => [] # ["en", "ja", ... ]
|
76
|
+
}
|
77
|
+
|
78
|
+
BasicAuth = {
|
79
|
+
:AutoReloadUserDB => true,
|
80
|
+
}
|
81
|
+
|
82
|
+
DigestAuth = {
|
83
|
+
:Algorithm => 'MD5-sess', # or 'MD5'
|
84
|
+
:Domain => nil, # an array includes domain names.
|
85
|
+
:Qop => [ 'auth' ], # 'auth' or 'auth-int' or both.
|
86
|
+
:UseOpaque => true,
|
87
|
+
:UseNextNonce => false,
|
88
|
+
:CheckNc => false,
|
89
|
+
:UseAuthenticationInfoHeader => true,
|
90
|
+
:AutoReloadUserDB => true,
|
91
|
+
:NonceExpirePeriod => 30*60,
|
92
|
+
:NonceExpireDelta => 60,
|
93
|
+
:InternetExplorerHack => true,
|
94
|
+
:OperaHack => true,
|
95
|
+
}
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#
|
2
|
+
# cookie.rb -- Cookie class
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
6
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
7
|
+
# reserved.
|
8
|
+
#
|
9
|
+
# $IPR: cookie.rb,v 1.16 2002/09/21 12:23:35 gotoyuzo Exp $
|
10
|
+
|
11
|
+
require 'time'
|
12
|
+
require 'webrick/httputils'
|
13
|
+
|
14
|
+
module WEBrick
|
15
|
+
class Cookie
|
16
|
+
|
17
|
+
attr_reader :name
|
18
|
+
attr_accessor :value, :version
|
19
|
+
attr_accessor :domain, :path, :secure
|
20
|
+
attr_accessor :comment, :max_age
|
21
|
+
#attr_accessor :comment_url, :discard, :port
|
22
|
+
|
23
|
+
def initialize(name, value)
|
24
|
+
@name = name
|
25
|
+
@value = value
|
26
|
+
@version = 0 # Netscape Cookie
|
27
|
+
|
28
|
+
@domain = @path = @secure = @comment = @max_age =
|
29
|
+
@expires = @comment_url = @discard = @port = nil
|
30
|
+
end
|
31
|
+
|
32
|
+
def expires=(t)
|
33
|
+
@expires = t && (t.is_a?(Time) ? t.httpdate : t.to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
def expires
|
37
|
+
@expires && Time.parse(@expires)
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_s
|
41
|
+
ret = ""
|
42
|
+
ret << @name << "=" << @value
|
43
|
+
ret << "; " << "Version=" << @version.to_s if @version > 0
|
44
|
+
ret << "; " << "Domain=" << @domain if @domain
|
45
|
+
ret << "; " << "Expires=" << @expires if @expires
|
46
|
+
ret << "; " << "Max-Age=" << @max_age.to_s if @max_age
|
47
|
+
ret << "; " << "Comment=" << @comment if @comment
|
48
|
+
ret << "; " << "Path=" << @path if @path
|
49
|
+
ret << "; " << "Secure" if @secure
|
50
|
+
ret
|
51
|
+
end
|
52
|
+
|
53
|
+
# Cookie::parse()
|
54
|
+
# It parses Cookie field sent from the user agent.
|
55
|
+
def self.parse(str)
|
56
|
+
if str
|
57
|
+
ret = []
|
58
|
+
cookie = nil
|
59
|
+
ver = 0
|
60
|
+
str.split(/[;,]\s+/).each{|x|
|
61
|
+
key, val = x.split(/=/,2)
|
62
|
+
val = val ? HTTPUtils::dequote(val) : ""
|
63
|
+
case key
|
64
|
+
when "$Version"; ver = val.to_i
|
65
|
+
when "$Path"; cookie.path = val
|
66
|
+
when "$Domain"; cookie.domain = val
|
67
|
+
when "$Port"; cookie.port = val
|
68
|
+
else
|
69
|
+
ret << cookie if cookie
|
70
|
+
cookie = self.new(key, val)
|
71
|
+
cookie.version = ver
|
72
|
+
end
|
73
|
+
}
|
74
|
+
ret << cookie if cookie
|
75
|
+
ret
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.parse_set_cookie(str)
|
80
|
+
cookie_elem = str.split(/;/)
|
81
|
+
first_elem = cookie_elem.shift
|
82
|
+
first_elem.strip!
|
83
|
+
key, value = first_elem.split(/=/, 2)
|
84
|
+
cookie = new(key, HTTPUtils.dequote(value))
|
85
|
+
cookie_elem.each{|pair|
|
86
|
+
pair.strip!
|
87
|
+
key, value = pair.split(/=/, 2)
|
88
|
+
if value
|
89
|
+
value = HTTPUtils.dequote(value.strip)
|
90
|
+
end
|
91
|
+
case key.downcase
|
92
|
+
when "domain" then cookie.domain = value
|
93
|
+
when "path" then cookie.path = value
|
94
|
+
when "expires" then cookie.expires = value
|
95
|
+
when "max-age" then cookie.max_age = Integer(value)
|
96
|
+
when "comment" then cookie.comment = value
|
97
|
+
when "version" then cookie.version = Integer(value)
|
98
|
+
when "secure" then cookie.secure = true
|
99
|
+
end
|
100
|
+
}
|
101
|
+
return cookie
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.parse_set_cookies(str)
|
105
|
+
return str.split(/,(?=[^;,]*=)|,$/).collect{|c|
|
106
|
+
parse_set_cookie(c)
|
107
|
+
}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# htmlutils.rb -- HTMLUtils Module
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
6
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
7
|
+
# reserved.
|
8
|
+
#
|
9
|
+
# $IPR: htmlutils.rb,v 1.7 2002/09/21 12:23:35 gotoyuzo Exp $
|
10
|
+
|
11
|
+
module WEBrick
|
12
|
+
module HTMLUtils
|
13
|
+
|
14
|
+
def escape(string)
|
15
|
+
str = string ? string.dup : ""
|
16
|
+
str.gsub!(/&/n, '&')
|
17
|
+
str.gsub!(/\"/n, '"')
|
18
|
+
str.gsub!(/>/n, '>')
|
19
|
+
str.gsub!(/</n, '<')
|
20
|
+
str
|
21
|
+
end
|
22
|
+
module_function :escape
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# httpauth.rb -- HTTP access authentication
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
6
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
7
|
+
# reserved.
|
8
|
+
#
|
9
|
+
# $IPR: httpauth.rb,v 1.14 2003/07/22 19:20:42 gotoyuzo Exp $
|
10
|
+
|
11
|
+
require 'webrick/httpauth/basicauth'
|
12
|
+
require 'webrick/httpauth/digestauth'
|
13
|
+
require 'webrick/httpauth/htpasswd'
|
14
|
+
require 'webrick/httpauth/htdigest'
|
15
|
+
require 'webrick/httpauth/htgroup'
|
16
|
+
|
17
|
+
module WEBrick
|
18
|
+
module HTTPAuth
|
19
|
+
module_function
|
20
|
+
|
21
|
+
def _basic_auth(req, res, realm, req_field, res_field, err_type, block)
|
22
|
+
user = pass = nil
|
23
|
+
if /^Basic\s+(.*)/o =~ req[req_field]
|
24
|
+
userpass = $1
|
25
|
+
user, pass = userpass.unpack("m*")[0].split(":", 2)
|
26
|
+
end
|
27
|
+
if block.call(user, pass)
|
28
|
+
req.user = user
|
29
|
+
return
|
30
|
+
end
|
31
|
+
res[res_field] = "Basic realm=\"#{realm}\""
|
32
|
+
raise err_type
|
33
|
+
end
|
34
|
+
|
35
|
+
def basic_auth(req, res, realm, &block)
|
36
|
+
_basic_auth(req, res, realm, "Authorization", "WWW-Authenticate",
|
37
|
+
HTTPStatus::Unauthorized, block)
|
38
|
+
end
|
39
|
+
|
40
|
+
def proxy_basic_auth(req, res, realm, &block)
|
41
|
+
_basic_auth(req, res, realm, "Proxy-Authorization", "Proxy-Authenticate",
|
42
|
+
HTTPStatus::ProxyAuthenticationRequired, block)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# httpauth/authenticator.rb -- Authenticator mix-in module.
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2003 Internet Programming with Ruby writers. All rights
|
6
|
+
# reserved.
|
7
|
+
#
|
8
|
+
# $IPR: authenticator.rb,v 1.3 2003/02/20 07:15:47 gotoyuzo Exp $
|
9
|
+
|
10
|
+
module WEBrick
|
11
|
+
module HTTPAuth
|
12
|
+
module Authenticator
|
13
|
+
RequestField = "Authorization"
|
14
|
+
ResponseField = "WWW-Authenticate"
|
15
|
+
ResponseInfoField = "Authentication-Info"
|
16
|
+
AuthException = HTTPStatus::Unauthorized
|
17
|
+
AuthScheme = nil # must override by the derived class
|
18
|
+
|
19
|
+
attr_reader :realm, :userdb, :logger
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def check_init(config)
|
24
|
+
[:UserDB, :Realm].each{|sym|
|
25
|
+
unless config[sym]
|
26
|
+
raise ArgumentError, "Argument #{sym.inspect} missing."
|
27
|
+
end
|
28
|
+
}
|
29
|
+
@realm = config[:Realm]
|
30
|
+
@userdb = config[:UserDB]
|
31
|
+
@logger = config[:Logger] || Log::new($stderr)
|
32
|
+
@reload_db = config[:AutoReloadUserDB]
|
33
|
+
@request_field = self::class::RequestField
|
34
|
+
@response_field = self::class::ResponseField
|
35
|
+
@resp_info_field = self::class::ResponseInfoField
|
36
|
+
@auth_exception = self::class::AuthException
|
37
|
+
@auth_scheme = self::class::AuthScheme
|
38
|
+
end
|
39
|
+
|
40
|
+
def check_scheme(req)
|
41
|
+
unless credentials = req[@request_field]
|
42
|
+
error("no credentials in the request.")
|
43
|
+
return nil
|
44
|
+
end
|
45
|
+
unless match = /^#{@auth_scheme}\s+/.match(credentials)
|
46
|
+
error("invalid scheme in %s.", credentials)
|
47
|
+
info("%s: %s", @request_field, credentials) if $DEBUG
|
48
|
+
return nil
|
49
|
+
end
|
50
|
+
return match.post_match
|
51
|
+
end
|
52
|
+
|
53
|
+
def log(meth, fmt, *args)
|
54
|
+
msg = format("%s %s: ", @auth_scheme, @realm)
|
55
|
+
msg << fmt % args
|
56
|
+
@logger.send(meth, msg)
|
57
|
+
end
|
58
|
+
|
59
|
+
def error(fmt, *args)
|
60
|
+
if @logger.error?
|
61
|
+
log(:error, fmt, *args)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def info(fmt, *args)
|
66
|
+
if @logger.info?
|
67
|
+
log(:info, fmt, *args)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
module ProxyAuthenticator
|
73
|
+
RequestField = "Proxy-Authorization"
|
74
|
+
ResponseField = "Proxy-Authenticate"
|
75
|
+
InfoField = "Proxy-Authentication-Info"
|
76
|
+
AuthException = HTTPStatus::ProxyAuthenticationRequired
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#
|
2
|
+
# httpauth/basicauth.rb -- HTTP basic access authentication
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2003 Internet Programming with Ruby writers. All rights
|
6
|
+
# reserved.
|
7
|
+
#
|
8
|
+
# $IPR: basicauth.rb,v 1.5 2003/02/20 07:15:47 gotoyuzo Exp $
|
9
|
+
|
10
|
+
require 'webrick/config'
|
11
|
+
require 'webrick/httpstatus'
|
12
|
+
require 'webrick/httpauth/authenticator'
|
13
|
+
|
14
|
+
module WEBrick
|
15
|
+
module HTTPAuth
|
16
|
+
class BasicAuth
|
17
|
+
include Authenticator
|
18
|
+
|
19
|
+
AuthScheme = "Basic"
|
20
|
+
|
21
|
+
def self.make_passwd(realm, user, pass)
|
22
|
+
pass ||= ""
|
23
|
+
pass.crypt(Utils::random_string(2))
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :realm, :userdb, :logger
|
27
|
+
|
28
|
+
def initialize(config, default=Config::BasicAuth)
|
29
|
+
check_init(config)
|
30
|
+
@config = default.dup.update(config)
|
31
|
+
end
|
32
|
+
|
33
|
+
def authenticate(req, res)
|
34
|
+
unless basic_credentials = check_scheme(req)
|
35
|
+
challenge(req, res)
|
36
|
+
end
|
37
|
+
userid, password = basic_credentials.unpack("m*")[0].split(":", 2)
|
38
|
+
password ||= ""
|
39
|
+
if userid.empty?
|
40
|
+
error("user id was not given.")
|
41
|
+
challenge(req, res)
|
42
|
+
end
|
43
|
+
unless encpass = @userdb.get_passwd(@realm, userid, @reload_db)
|
44
|
+
error("%s: the user is not allowed.", userid)
|
45
|
+
challenge(req, res)
|
46
|
+
end
|
47
|
+
if password.crypt(encpass) != encpass
|
48
|
+
error("%s: password unmatch.", userid)
|
49
|
+
challenge(req, res)
|
50
|
+
end
|
51
|
+
info("%s: authentication succeeded.", userid)
|
52
|
+
req.user = userid
|
53
|
+
end
|
54
|
+
|
55
|
+
def challenge(req, res)
|
56
|
+
res[@response_field] = "#{@auth_scheme} realm=\"#{@realm}\""
|
57
|
+
raise @auth_exception
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class ProxyBasicAuth < BasicAuth
|
62
|
+
include ProxyAuthenticator
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,343 @@
|
|
1
|
+
#
|
2
|
+
# httpauth/digestauth.rb -- HTTP digest access authentication
|
3
|
+
#
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
5
|
+
# Copyright (c) 2003 Internet Programming with Ruby writers.
|
6
|
+
# Copyright (c) 2003 H.M.
|
7
|
+
#
|
8
|
+
# The original implementation is provided by H.M.
|
9
|
+
# URL: http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=
|
10
|
+
# %C7%A7%BE%DA%B5%A1%C7%BD%A4%F2%B2%FE%C2%A4%A4%B7%A4%C6%A4%DF%A4%EB
|
11
|
+
#
|
12
|
+
# $IPR: digestauth.rb,v 1.5 2003/02/20 07:15:47 gotoyuzo Exp $
|
13
|
+
|
14
|
+
require 'webrick/config'
|
15
|
+
require 'webrick/httpstatus'
|
16
|
+
require 'webrick/httpauth/authenticator'
|
17
|
+
require 'digest/md5'
|
18
|
+
require 'digest/sha1'
|
19
|
+
|
20
|
+
module WEBrick
|
21
|
+
module HTTPAuth
|
22
|
+
class DigestAuth
|
23
|
+
include Authenticator
|
24
|
+
|
25
|
+
AuthScheme = "Digest"
|
26
|
+
OpaqueInfo = Struct.new(:time, :nonce, :nc)
|
27
|
+
attr_reader :algorithm, :qop
|
28
|
+
|
29
|
+
def self.make_passwd(realm, user, pass)
|
30
|
+
pass ||= ""
|
31
|
+
Digest::MD5::hexdigest([user, realm, pass].join(":"))
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(config, default=Config::DigestAuth)
|
35
|
+
check_init(config)
|
36
|
+
@config = default.dup.update(config)
|
37
|
+
@algorithm = @config[:Algorithm]
|
38
|
+
@domain = @config[:Domain]
|
39
|
+
@qop = @config[:Qop]
|
40
|
+
@use_opaque = @config[:UseOpaque]
|
41
|
+
@use_next_nonce = @config[:UseNextNonce]
|
42
|
+
@check_nc = @config[:CheckNc]
|
43
|
+
@use_auth_info_header = @config[:UseAuthenticationInfoHeader]
|
44
|
+
@nonce_expire_period = @config[:NonceExpirePeriod]
|
45
|
+
@nonce_expire_delta = @config[:NonceExpireDelta]
|
46
|
+
@internet_explorer_hack = @config[:InternetExplorerHack]
|
47
|
+
@opera_hack = @config[:OperaHack]
|
48
|
+
|
49
|
+
case @algorithm
|
50
|
+
when 'MD5','MD5-sess'
|
51
|
+
@h = Digest::MD5
|
52
|
+
when 'SHA1','SHA1-sess' # it is a bonus feature :-)
|
53
|
+
@h = Digest::SHA1
|
54
|
+
else
|
55
|
+
msg = format('Alogrithm "%s" is not supported.', @algorithm)
|
56
|
+
raise ArgumentError.new(msg)
|
57
|
+
end
|
58
|
+
|
59
|
+
@instance_key = hexdigest(self.__id__, Time.now.to_i, Process.pid)
|
60
|
+
@opaques = {}
|
61
|
+
@last_nonce_expire = Time.now
|
62
|
+
@mutex = Mutex.new
|
63
|
+
end
|
64
|
+
|
65
|
+
def authenticate(req, res)
|
66
|
+
unless result = @mutex.synchronize{ _authenticate(req, res) }
|
67
|
+
challenge(req, res)
|
68
|
+
end
|
69
|
+
if result == :nonce_is_stale
|
70
|
+
challenge(req, res, true)
|
71
|
+
end
|
72
|
+
return true
|
73
|
+
end
|
74
|
+
|
75
|
+
def challenge(req, res, stale=false)
|
76
|
+
nonce = generate_next_nonce(req)
|
77
|
+
if @use_opaque
|
78
|
+
opaque = generate_opaque(req)
|
79
|
+
@opaques[opaque].nonce = nonce
|
80
|
+
end
|
81
|
+
|
82
|
+
param = Hash.new
|
83
|
+
param["realm"] = HTTPUtils::quote(@realm)
|
84
|
+
param["domain"] = HTTPUtils::quote(@domain.to_a.join(" ")) if @domain
|
85
|
+
param["nonce"] = HTTPUtils::quote(nonce)
|
86
|
+
param["opaque"] = HTTPUtils::quote(opaque) if opaque
|
87
|
+
param["stale"] = stale.to_s
|
88
|
+
param["algorithm"] = @algorithm
|
89
|
+
param["qop"] = HTTPUtils::quote(@qop.to_a.join(",")) if @qop
|
90
|
+
|
91
|
+
res[@response_field] =
|
92
|
+
"#{@auth_scheme} " + param.map{|k,v| "#{k}=#{v}" }.join(", ")
|
93
|
+
info("%s: %s", @response_field, res[@response_field]) if $DEBUG
|
94
|
+
raise @auth_exception
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
MustParams = ['username','realm','nonce','uri','response']
|
100
|
+
MustParamsAuth = ['cnonce','nc']
|
101
|
+
|
102
|
+
def _authenticate(req, res)
|
103
|
+
unless digest_credentials = check_scheme(req)
|
104
|
+
return false
|
105
|
+
end
|
106
|
+
|
107
|
+
auth_req = split_param_value(digest_credentials)
|
108
|
+
if auth_req['qop'] == "auth" || auth_req['qop'] == "auth-int"
|
109
|
+
req_params = MustParams + MustParamsAuth
|
110
|
+
else
|
111
|
+
req_params = MustParams
|
112
|
+
end
|
113
|
+
req_params.each{|key|
|
114
|
+
unless auth_req.has_key?(key)
|
115
|
+
error('%s: parameter missing. "%s"', auth_req['username'], key)
|
116
|
+
raise HTTPStatus::BadRequest
|
117
|
+
end
|
118
|
+
}
|
119
|
+
|
120
|
+
if !check_uri(req, auth_req)
|
121
|
+
raise HTTPStatus::BadRequest
|
122
|
+
end
|
123
|
+
|
124
|
+
if auth_req['realm'] != @realm
|
125
|
+
error('%s: realm unmatch. "%s" for "%s"',
|
126
|
+
auth_req['username'], auth_req['realm'], @realm)
|
127
|
+
return false
|
128
|
+
end
|
129
|
+
|
130
|
+
auth_req['algorithm'] ||= 'MD5'
|
131
|
+
if auth_req['algorithm'] != @algorithm &&
|
132
|
+
(@opera_hack && auth_req['algorithm'] != @algorithm.upcase)
|
133
|
+
error('%s: algorithm unmatch. "%s" for "%s"',
|
134
|
+
auth_req['username'], auth_req['algorithm'], @algorithm)
|
135
|
+
return false
|
136
|
+
end
|
137
|
+
|
138
|
+
if (@qop.nil? && auth_req.has_key?('qop')) ||
|
139
|
+
(@qop && (! @qop.member?(auth_req['qop'])))
|
140
|
+
error('%s: the qop is not allowed. "%s"',
|
141
|
+
auth_req['username'], auth_req['qop'])
|
142
|
+
return false
|
143
|
+
end
|
144
|
+
|
145
|
+
password = @userdb.get_passwd(@realm, auth_req['username'], @reload_db)
|
146
|
+
unless password
|
147
|
+
error('%s: the user is not allowd.', auth_req['username'])
|
148
|
+
return false
|
149
|
+
end
|
150
|
+
|
151
|
+
nonce_is_invalid = false
|
152
|
+
if @use_opaque
|
153
|
+
info("@opaque = %s", @opaque.inspect) if $DEBUG
|
154
|
+
if !(opaque = auth_req['opaque'])
|
155
|
+
error('%s: opaque is not given.', auth_req['username'])
|
156
|
+
nonce_is_invalid = true
|
157
|
+
elsif !(opaque_struct = @opaques[opaque])
|
158
|
+
error('%s: invalid opaque is given.', auth_req['username'])
|
159
|
+
nonce_is_invalid = true
|
160
|
+
elsif !check_opaque(opaque_struct, req, auth_req)
|
161
|
+
@opaques.delete(auth_req['opaque'])
|
162
|
+
nonce_is_invalid = true
|
163
|
+
end
|
164
|
+
elsif !check_nonce(req, auth_req)
|
165
|
+
nonce_is_invalid = true
|
166
|
+
end
|
167
|
+
|
168
|
+
if /-sess$/ =~ auth_req['algorithm'] ||
|
169
|
+
(@opera_hack && /-SESS$/ =~ auth_req['algorithm'])
|
170
|
+
ha1 = hexdigest(password, auth_req['nonce'], auth_req['cnonce'])
|
171
|
+
else
|
172
|
+
ha1 = password
|
173
|
+
end
|
174
|
+
|
175
|
+
if auth_req['qop'] == "auth" || auth_req['qop'] == nil
|
176
|
+
ha2 = hexdigest(req.request_method, auth_req['uri'])
|
177
|
+
ha2_res = hexdigest("", auth_req['uri'])
|
178
|
+
elsif auth_req['qop'] == "auth-int"
|
179
|
+
ha2 = hexdigest(req.request_method, auth_req['uri'],
|
180
|
+
hexdigest(req.body))
|
181
|
+
ha2_res = hexdigest("", auth_req['uri'], hexdigest(res.body))
|
182
|
+
end
|
183
|
+
|
184
|
+
if auth_req['qop'] == "auth" || auth_req['qop'] == "auth-int"
|
185
|
+
param2 = ['nonce', 'nc', 'cnonce', 'qop'].map{|key|
|
186
|
+
auth_req[key]
|
187
|
+
}.join(':')
|
188
|
+
digest = hexdigest(ha1, param2, ha2)
|
189
|
+
digest_res = hexdigest(ha1, param2, ha2_res)
|
190
|
+
else
|
191
|
+
digest = hexdigest(ha1, auth_req['nonce'], ha2)
|
192
|
+
digest_res = hexdigest(ha1, auth_req['nonce'], ha2_res)
|
193
|
+
end
|
194
|
+
|
195
|
+
if digest != auth_req['response']
|
196
|
+
error("%s: digest unmatch.", auth_req['username'])
|
197
|
+
return false
|
198
|
+
elsif nonce_is_invalid
|
199
|
+
error('%s: digest is valid, but nonce is not valid.',
|
200
|
+
auth_req['username'])
|
201
|
+
return :nonce_is_stale
|
202
|
+
elsif @use_auth_info_header
|
203
|
+
auth_info = {
|
204
|
+
'nextnonce' => generate_next_nonce(req),
|
205
|
+
'rspauth' => digest_res
|
206
|
+
}
|
207
|
+
if @use_opaque
|
208
|
+
opaque_struct.time = req.request_time
|
209
|
+
opaque_struct.nonce = auth_info['nextnonce']
|
210
|
+
opaque_struct.nc = "%08x" % (auth_req['nc'].hex + 1)
|
211
|
+
end
|
212
|
+
if auth_req['qop'] == "auth" || auth_req['qop'] == "auth-int"
|
213
|
+
['qop','cnonce','nc'].each{|key|
|
214
|
+
auth_info[key] = auth_req[key]
|
215
|
+
}
|
216
|
+
end
|
217
|
+
res[@resp_info_field] = auth_info.keys.map{|key|
|
218
|
+
if key == 'nc'
|
219
|
+
key + '=' + auth_info[key]
|
220
|
+
else
|
221
|
+
key + "=" + HTTPUtils::quote(auth_info[key])
|
222
|
+
end
|
223
|
+
}.join(', ')
|
224
|
+
end
|
225
|
+
info('%s: authentication scceeded.', auth_req['username'])
|
226
|
+
req.user = auth_req['username']
|
227
|
+
return true
|
228
|
+
end
|
229
|
+
|
230
|
+
def split_param_value(string)
|
231
|
+
ret = {}
|
232
|
+
while string.size != 0
|
233
|
+
case string
|
234
|
+
when /^\s*([\w\-\.\*\%\!]+)=\s*\"((\\.|[^\"])*)\"\s*,?/
|
235
|
+
key = $1
|
236
|
+
matched = $2
|
237
|
+
string = $'
|
238
|
+
ret[key] = matched.gsub(/\\(.)/, "\\1")
|
239
|
+
when /^\s*([\w\-\.\*\%\!]+)=\s*([^,\"]*),?/
|
240
|
+
key = $1
|
241
|
+
matched = $2
|
242
|
+
string = $'
|
243
|
+
ret[key] = matched.clone
|
244
|
+
when /^s*^,/
|
245
|
+
string = $'
|
246
|
+
else
|
247
|
+
break
|
248
|
+
end
|
249
|
+
end
|
250
|
+
ret
|
251
|
+
end
|
252
|
+
|
253
|
+
def generate_next_nonce(req)
|
254
|
+
now = "%012d" % req.request_time.to_i
|
255
|
+
pk = hexdigest(now, @instance_key)[0,32]
|
256
|
+
nonce = [now + ":" + pk].pack("m*").chop # it has 60 length of chars.
|
257
|
+
nonce
|
258
|
+
end
|
259
|
+
|
260
|
+
def check_nonce(req, auth_req)
|
261
|
+
username = auth_req['username']
|
262
|
+
nonce = auth_req['nonce']
|
263
|
+
|
264
|
+
pub_time, pk = nonce.unpack("m*")[0].split(":", 2)
|
265
|
+
if (!pub_time || !pk)
|
266
|
+
error("%s: empty nonce is given", username)
|
267
|
+
return false
|
268
|
+
elsif (hexdigest(pub_time, @instance_key)[0,32] != pk)
|
269
|
+
error("%s: invalid private-key: %s for %s",
|
270
|
+
username, hexdigest(pub_time, @instance_key)[0,32], pk)
|
271
|
+
return false
|
272
|
+
end
|
273
|
+
|
274
|
+
diff_time = req.request_time.to_i - pub_time.to_i
|
275
|
+
if (diff_time < 0)
|
276
|
+
error("%s: difference of time-stamp is negative.", username)
|
277
|
+
return false
|
278
|
+
elsif diff_time > @nonce_expire_period
|
279
|
+
error("%s: nonce is expired.", username)
|
280
|
+
return false
|
281
|
+
end
|
282
|
+
|
283
|
+
return true
|
284
|
+
end
|
285
|
+
|
286
|
+
def generate_opaque(req)
|
287
|
+
@mutex.synchronize{
|
288
|
+
now = req.request_time
|
289
|
+
if now - @last_nonce_expire > @nonce_expire_delta
|
290
|
+
@opaques.delete_if{|key,val|
|
291
|
+
(now - val.time) > @nonce_expire_period
|
292
|
+
}
|
293
|
+
@last_nonce_expire = now
|
294
|
+
end
|
295
|
+
begin
|
296
|
+
opaque = Utils::random_string(16)
|
297
|
+
end while @opaques[opaque]
|
298
|
+
@opaques[opaque] = OpaqueInfo.new(now, nil, '00000001')
|
299
|
+
opaque
|
300
|
+
}
|
301
|
+
end
|
302
|
+
|
303
|
+
def check_opaque(opaque_struct, req, auth_req)
|
304
|
+
if (@use_next_nonce && auth_req['nonce'] != opaque_struct.nonce)
|
305
|
+
error('%s: nonce unmatched. "%s" for "%s"',
|
306
|
+
auth_req['username'], auth_req['nonce'], opaque_struct.nonce)
|
307
|
+
return false
|
308
|
+
elsif !check_nonce(req, auth_req)
|
309
|
+
return false
|
310
|
+
end
|
311
|
+
if (@check_nc && auth_req['nc'] != opaque_struct.nc)
|
312
|
+
error('%s: nc unmatched."%s" for "%s"',
|
313
|
+
auth_req['username'], auth_req['nc'], opaque_struct.nc)
|
314
|
+
return false
|
315
|
+
end
|
316
|
+
true
|
317
|
+
end
|
318
|
+
|
319
|
+
def check_uri(req, auth_req)
|
320
|
+
uri = auth_req['uri']
|
321
|
+
if uri != req.request_uri.to_s && uri != req.unparsed_uri &&
|
322
|
+
(@internet_explorer_hack && uri != req.path)
|
323
|
+
error('%s: uri unmatch. "%s" for "%s"', auth_req['username'],
|
324
|
+
auth_req['uri'], req.request_uri.to_s)
|
325
|
+
return false
|
326
|
+
end
|
327
|
+
true
|
328
|
+
end
|
329
|
+
|
330
|
+
def hexdigest(*args)
|
331
|
+
@h.hexdigest(args.join(":"))
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
class ProxyDigestAuth < DigestAuth
|
336
|
+
include ProxyAuthenticator
|
337
|
+
|
338
|
+
def check_uri(req, auth_req)
|
339
|
+
return true
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|