ruby-web 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +474 -0
- data/INSTALL.txt +9 -0
- data/InstalledFiles +180 -0
- data/LICENSE.txt +74 -0
- data/Rakefile +529 -0
- data/TODO +65 -0
- data/doc/additional.xml +149 -0
- data/doc/core.xml +652 -0
- data/doc/credits/index.xml +52 -0
- data/doc/credits/php.contributors.xml +118 -0
- data/doc/credits/php.language-snippets.ent +622 -0
- data/doc/install/index.xml +136 -0
- data/doc/install/mac/index.xml +21 -0
- data/doc/install/ruby-web.install.rb.instructions.xml +7 -0
- data/doc/install/unix/index.xml +46 -0
- data/doc/install/win/apache1.xml +166 -0
- data/doc/install/win/apache2.xml +141 -0
- data/doc/install/win/iis.xml +162 -0
- data/doc/install/win/index.xml +24 -0
- data/doc/install/win/installer.xml +31 -0
- data/doc/install/win/manual.xml +43 -0
- data/doc/manual.xml +69 -0
- data/doc/old/apache_cgi.txt +23 -0
- data/doc/old/fastcgi.txt +23 -0
- data/doc/old/mod_ruby.txt +21 -0
- data/doc/old/snippets.rdoc +183 -0
- data/doc/old/webrick.txt +23 -0
- data/doc/old/windows_cgi.txt +9 -0
- data/doc/tutorial.xml +14 -0
- data/doc/xsl/manual-multi.xsl +10 -0
- data/doc/xsl/manual-pdf.xsl +6 -0
- data/doc/xsl/manual-single.xsl +6 -0
- data/doc/xsl/manual.css +22 -0
- data/install.rb +1022 -0
- data/lib/formatter.rb +314 -0
- data/lib/html-parser.rb +429 -0
- data/lib/htmlrepair.rb +113 -0
- data/lib/htmlsplit.rb +842 -0
- data/lib/sgml-parser.rb +332 -0
- data/lib/web.rb +68 -0
- data/lib/web/assertinclude.rb +129 -0
- data/lib/web/config.rb +50 -0
- data/lib/web/connection.rb +1070 -0
- data/lib/web/convenience.rb +154 -0
- data/lib/web/formreader.rb +318 -0
- data/lib/web/htmlparser/html-parser.rb +429 -0
- data/lib/web/htmlparser/sgml-parser.rb +332 -0
- data/lib/web/htmltools/element.rb +296 -0
- data/lib/web/htmltools/stparser.rb +276 -0
- data/lib/web/htmltools/tags.rb +286 -0
- data/lib/web/htmltools/tree.rb +139 -0
- data/lib/web/htmltools/xmltree.rb +160 -0
- data/lib/web/htmltools/xpath.rb +71 -0
- data/lib/web/info.rb +63 -0
- data/lib/web/load.rb +210 -0
- data/lib/web/mime.rb +87 -0
- data/lib/web/phprb.rb +340 -0
- data/lib/web/resources/test/cookie.rb +33 -0
- data/lib/web/resources/test/counter.rb +20 -0
- data/lib/web/resources/test/multipart.rb +14 -0
- data/lib/web/resources/test/redirect.rb +8 -0
- data/lib/web/resources/test/stock.rb +33 -0
- data/lib/web/sapi/apache.rb +129 -0
- data/lib/web/sapi/fastcgi.rb +22 -0
- data/lib/web/sapi/install/apache.rb +180 -0
- data/lib/web/sapi/install/iis.rb +93 -0
- data/lib/web/sapi/install/macosx.rb +90 -0
- data/lib/web/sapi/webrick.rb +86 -0
- data/lib/web/session.rb +83 -0
- data/lib/web/shim/cgi.rb +129 -0
- data/lib/web/shim/rails.rb +175 -0
- data/lib/web/stringio.rb +78 -0
- data/lib/web/strscanparser.rb +24 -0
- data/lib/web/tagparser.rb +96 -0
- data/lib/web/testing.rb +666 -0
- data/lib/web/traceoutput.rb +75 -0
- data/lib/web/unit.rb +56 -0
- data/lib/web/upload.rb +59 -0
- data/lib/web/validate.rb +52 -0
- data/lib/web/wiki.rb +557 -0
- data/lib/web/wiki/linker.rb +72 -0
- data/lib/web/wiki/page.rb +201 -0
- data/lib/webunit.rb +27 -0
- data/lib/webunit/assert.rb +152 -0
- data/lib/webunit/converter.rb +154 -0
- data/lib/webunit/cookie.rb +118 -0
- data/lib/webunit/domwalker.rb +185 -0
- data/lib/webunit/exception.rb +14 -0
- data/lib/webunit/form.rb +116 -0
- data/lib/webunit/frame.rb +37 -0
- data/lib/webunit/htmlelem.rb +122 -0
- data/lib/webunit/image.rb +26 -0
- data/lib/webunit/jscript.rb +31 -0
- data/lib/webunit/link.rb +33 -0
- data/lib/webunit/params.rb +321 -0
- data/lib/webunit/parser.rb +229 -0
- data/lib/webunit/response.rb +464 -0
- data/lib/webunit/runtest.rb +41 -0
- data/lib/webunit/table.rb +148 -0
- data/lib/webunit/testcase.rb +45 -0
- data/lib/webunit/ui/cui/testrunner.rb +50 -0
- data/lib/webunit/utils.rb +68 -0
- data/lib/webunit/webunit.rb +28 -0
- data/test/dev/action.rb +83 -0
- data/test/dev/forms.rb +104 -0
- data/test/dev/forms2.rb +104 -0
- data/test/dev/parser.rb +17 -0
- data/test/dev/scripts/dump.rb +24 -0
- data/test/dev/scripts/makedist.rb +62 -0
- data/test/dev/scripts/uri.rb +41 -0
- data/test/dev/scripts/uri/common.rb +432 -0
- data/test/dev/scripts/uri/ftp.rb +149 -0
- data/test/dev/scripts/uri/generic.rb +1106 -0
- data/test/dev/scripts/uri/http.rb +76 -0
- data/test/dev/scripts/uri/https.rb +26 -0
- data/test/dev/scripts/uri/ldap.rb +238 -0
- data/test/dev/scripts/uri/mailto.rb +260 -0
- data/test/dev/scripts/urireg.rb +174 -0
- data/test/dev/simpledispatcher.rb +156 -0
- data/test/dev/test.action.rb +146 -0
- data/test/dev/test.formreader.rb +463 -0
- data/test/dev/test.simpledispatcher.rb +186 -0
- data/test/dev/webunit/conv/digit-0.rb +21 -0
- data/test/dev/webunit/conv/digit-1.rb +17 -0
- data/test/dev/webunit/conv/digit.rb +23 -0
- data/test/dev/webunit/conv/test_digit-0.rb +16 -0
- data/test/dev/webunit/conv/test_digit-1.rb +19 -0
- data/test/dev/webunit/conv/test_digit.rb +26 -0
- data/test/dev/webunit/conv/test_digit_view-0.rb +76 -0
- data/test/dev/webunit/conv/test_digit_view-1.rb +102 -0
- data/test/dev/webunit/conv/test_digit_view.rb +134 -0
- data/test/installation/htdocs/cgi_test.rb +296 -0
- data/test/installation/htdocs/test_install.rb +4 -0
- data/test/installation/runwebtest.rb +5 -0
- data/test/installation/test_cookie.rb +128 -0
- data/test/installation/test_form.rb +47 -0
- data/test/installation/test_multipart.rb +51 -0
- data/test/installation/test_request.rb +24 -0
- data/test/installation/test_response.rb +35 -0
- data/test/unit/htdocs/cookie.rb +32 -0
- data/test/unit/htdocs/multipart.rb +28 -0
- data/test/unit/htdocs/redirect.rb +12 -0
- data/test/unit/htdocs/simple.rb +13 -0
- data/test/unit/htdocs/stock.rb +33 -0
- data/test/unit/test_assert.rb +162 -0
- data/test/unit/test_cookie.rb +114 -0
- data/test/unit/test_domwalker.rb +77 -0
- data/test/unit/test_form.rb +42 -0
- data/test/unit/test_frame.rb +40 -0
- data/test/unit/test_htmlelem.rb +74 -0
- data/test/unit/test_image.rb +45 -0
- data/test/unit/test_jscript.rb +57 -0
- data/test/unit/test_link.rb +85 -0
- data/test/unit/test_multipart.rb +51 -0
- data/test/unit/test_params.rb +210 -0
- data/test/unit/test_parser.rb +53 -0
- data/test/unit/test_response.rb +150 -0
- data/test/unit/test_table.rb +70 -0
- data/test/unit/test_utils.rb +106 -0
- data/test/unit/test_webunit.rb +28 -0
- data/test/web/mod_ruby_stub.rb +39 -0
- data/test/web/test.assertinclude.rb +109 -0
- data/test/web/test.buffer.rb +182 -0
- data/test/web/test.code.loader.rb +78 -0
- data/test/web/test.config.rb +31 -0
- data/test/web/test.error.handling.rb +91 -0
- data/test/web/test.formreader-2.0.rb +352 -0
- data/test/web/test.load.rb +125 -0
- data/test/web/test.mime-type.rb +23 -0
- data/test/web/test.narf.cgi.rb +106 -0
- data/test/web/test.phprb.rb +239 -0
- data/test/web/test.request.rb +368 -0
- data/test/web/test.response.rb +637 -0
- data/test/web/test.ruby-web.rb +10 -0
- data/test/web/test.session.rb +50 -0
- data/test/web/test.shim.cgi.rb +96 -0
- data/test/web/test.tagparser.rb +65 -0
- data/test/web/test.template2.rb +297 -0
- data/test/web/test.testing2.rb +318 -0
- data/test/web/test.upload.rb +45 -0
- data/test/web/test.validate.rb +46 -0
- data/test/web/test.web.test.rb +495 -0
- data/test/wiki/test.history.rb +297 -0
- data/test/wiki/test.illustration_page.rb +287 -0
- data/test/wiki/test.linker.rb +197 -0
- data/test/wiki/test.tarpit.rb +56 -0
- data/test/wiki/test.wiki.rb +300 -0
- data/test/wikitestroot/admin.rb +7 -0
- data/test/wikitestroot/wiki.rb +6 -0
- metadata +234 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'pp'
|
|
2
|
+
|
|
3
|
+
module Web
|
|
4
|
+
module Install
|
|
5
|
+
class IIS
|
|
6
|
+
|
|
7
|
+
def IIS::install( install_dir )
|
|
8
|
+
self.new(install_dir).install
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
attr_accessor :install_dir
|
|
12
|
+
def initialize( install_dir )
|
|
13
|
+
@install_dir = install_dir
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def backup
|
|
17
|
+
"#{httpd_conf}.ruby-web.backup.#{Time::now::strftime('%Y.%m.%d') }"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def install
|
|
21
|
+
puts "******************************************",
|
|
22
|
+
"* Installing .rhtml and .rb mappings *",
|
|
23
|
+
"* for Microsoft IIS *",
|
|
24
|
+
"******************************************"
|
|
25
|
+
|
|
26
|
+
done = Hash.new
|
|
27
|
+
require 'win32ole'
|
|
28
|
+
# http://www.west-wind.com/presentations/WebServerConfig/WebServerConfig.htm
|
|
29
|
+
iis = WIN32OLE.connect 'IIS://LOCALHOST/W3SVC'
|
|
30
|
+
|
|
31
|
+
iis.each do |site|
|
|
32
|
+
unless site.name =~ /info|filters/i
|
|
33
|
+
site.each do |d|
|
|
34
|
+
if d.name =~ /^root$/i
|
|
35
|
+
scriptmaps = d.scriptmaps
|
|
36
|
+
|
|
37
|
+
scriptmaps.each_with_index do |mapping, i|
|
|
38
|
+
m = mapping.split(/,/)
|
|
39
|
+
if m.first =~ /^\.(rb|rhtml)$/
|
|
40
|
+
done[m.first] = true
|
|
41
|
+
m[1] = install_dir + "\\bin\\ruby-web.exe"
|
|
42
|
+
m = m.join(',')
|
|
43
|
+
scriptmaps[i] = m
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
['.rb', '.rhtml'].each do |ext|
|
|
48
|
+
unless done[ext]
|
|
49
|
+
scriptmaps[scriptmaps.length] = "#{ext},#{install_dir}\\bin\\ruby-web.exe,1"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# http://www.microsoft.com/technet/scriptcenter/guide/sas_ads_kbwl.mspx
|
|
54
|
+
d.PutEx( ADS_PROPERTY_UPDATE, "ScriptMaps", scriptmaps )
|
|
55
|
+
|
|
56
|
+
index_files = d.DefaultDoc
|
|
57
|
+
index_files += ",index.rhtml" unless index_files =~ /index\.rhtml/
|
|
58
|
+
index_files += ",index.rb" unless index_files =~ /index\.rb/
|
|
59
|
+
d.DefaultDoc = index_files
|
|
60
|
+
|
|
61
|
+
d.SetInfo()
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
#require 'pp'
|
|
68
|
+
#pp iis.scriptmaps
|
|
69
|
+
|
|
70
|
+
puts "Restarting IIS..."
|
|
71
|
+
unless system('iisreset')
|
|
72
|
+
raise "Error restarting IIS"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
ADS_PROPERTY_CLEAR = 1
|
|
77
|
+
ADS_PROPERTY_UPDATE = 2
|
|
78
|
+
ADS_PROPERTY_APPEND = 3
|
|
79
|
+
ADS_PROPERTY_DELETE = 4
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
if __FILE__ == $0
|
|
86
|
+
begin
|
|
87
|
+
Web::Install::IIS::install( *ARGV )
|
|
88
|
+
rescue Exception
|
|
89
|
+
puts $!
|
|
90
|
+
puts $!.backtrace
|
|
91
|
+
sleep
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
|
|
3
|
+
configtest = "/usr/sbin/apachectl configtest"
|
|
4
|
+
conffile = "/etc/httpd/httpd.conf"
|
|
5
|
+
backupfile = "#{conffile}.ruby-web.backup.#{Time::now}"
|
|
6
|
+
tempfile = "#{conffile}.ruby-web.temp"
|
|
7
|
+
|
|
8
|
+
cgi_conf = <<-CONF
|
|
9
|
+
# begin ruby-web activation
|
|
10
|
+
AddHandler cgi-script .rb .rhtml
|
|
11
|
+
# end ruby-web activation
|
|
12
|
+
CONF
|
|
13
|
+
|
|
14
|
+
mod_ruby_conf = <<-CONF
|
|
15
|
+
# begin ruby-web activation
|
|
16
|
+
LoadModule ruby_module libexec/httpd/mod_ruby.so
|
|
17
|
+
AddModule mod_ruby.c
|
|
18
|
+
|
|
19
|
+
<IfModule mod_ruby.c>
|
|
20
|
+
RubySafeLevel 0
|
|
21
|
+
RubyRequire web/sapi/apache
|
|
22
|
+
|
|
23
|
+
AddHandler ruby-object rb rhtml
|
|
24
|
+
RubyHandler Web::RubyRun.instance
|
|
25
|
+
</IfModule>
|
|
26
|
+
# end ruby-web activation
|
|
27
|
+
CONF
|
|
28
|
+
|
|
29
|
+
if (ARGV[0] == "mod_ruby")
|
|
30
|
+
conf = mod_ruby_conf
|
|
31
|
+
elsif (ARGV[0] == "cgi")
|
|
32
|
+
conf = cgi_conf
|
|
33
|
+
else
|
|
34
|
+
puts <<-EOF
|
|
35
|
+
Usage:
|
|
36
|
+
ruby #{__FILE__} [mod_ruby|cgi]
|
|
37
|
+
|
|
38
|
+
Options:
|
|
39
|
+
mod_ruby install mod_ruby config
|
|
40
|
+
cgi install cgi config
|
|
41
|
+
|
|
42
|
+
Description:
|
|
43
|
+
Configures default Apache installation
|
|
44
|
+
on Mac OS X to use ruby-web. Assumes
|
|
45
|
+
ruby-web files have already been installed
|
|
46
|
+
by the ruby-web_x.x.x.pkg.
|
|
47
|
+
|
|
48
|
+
EOF
|
|
49
|
+
exit
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
require 'fileutils'
|
|
53
|
+
include FileUtils
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# ----------- Modify config file ------------
|
|
57
|
+
|
|
58
|
+
# backup config
|
|
59
|
+
cp( conffile, backupfile )
|
|
60
|
+
|
|
61
|
+
contents = File::open(conffile) do |f|
|
|
62
|
+
f.read
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
config_file_changed = false
|
|
66
|
+
|
|
67
|
+
# delete any existing ruby-web config
|
|
68
|
+
contents.gsub!( /# begin ruby-web activation.*# end ruby-web activation\s*/m, '' )
|
|
69
|
+
|
|
70
|
+
contents << "\n\n" << conf
|
|
71
|
+
|
|
72
|
+
File.open(tempfile, "w") do |f|
|
|
73
|
+
f.write contents
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
cp( tempfile, conffile )
|
|
77
|
+
|
|
78
|
+
config_file_changed = true
|
|
79
|
+
|
|
80
|
+
# ----------- Restart Apache ------------
|
|
81
|
+
unless system(configtest)
|
|
82
|
+
if config_file_changed
|
|
83
|
+
puts("[ruby-web #{$0}]: Unable that the Apache webserver is running correcly with the new module and the configuration fiel changes using the '#{configtest}' command. Ruby-Web itself has been installed sucessfully, but it has not been activated. Your old #{conffile} file is untouched...")
|
|
84
|
+
puts "[ruby-web #{$0}]: The modified config file is available in '#{tempfile}' so you can examine it and try to activate Ruby-Web"
|
|
85
|
+
|
|
86
|
+
cp( backupfile, conffile )
|
|
87
|
+
else
|
|
88
|
+
puts "[ruby-web #{$0}]: Unable that the Apache webserver is running correcly with the new module and the configuration fiel changes using the '#{configtest}' command. Ruby-Web itself has been installed sucessfully, but you need to figure out why Apache is not running. Your conf file has not been modified."
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Based on:
|
|
2
|
+
# cgihandler.rb -- CGIHandler Class
|
|
3
|
+
#
|
|
4
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
5
|
+
# Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
6
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
7
|
+
# reserved.
|
|
8
|
+
#
|
|
9
|
+
# $IPR: cgihandler.rb,v 1.27 2003/03/21 19:56:01 gotoyuzo Exp $
|
|
10
|
+
|
|
11
|
+
require 'tempfile'
|
|
12
|
+
require 'webrick/httpservlet/abstract'
|
|
13
|
+
|
|
14
|
+
require 'web'
|
|
15
|
+
|
|
16
|
+
module Web
|
|
17
|
+
|
|
18
|
+
class WebrickConnection < Connection
|
|
19
|
+
def send_header_implementation
|
|
20
|
+
res = options[:webrick_response]
|
|
21
|
+
res.status = Web::status.to_i
|
|
22
|
+
Web::header.each do |key, val|
|
|
23
|
+
unless key =~ /status/i
|
|
24
|
+
res[key] = val.join(", ")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class RubyWebHandler < WEBrick::HTTPServlet::AbstractServlet
|
|
31
|
+
|
|
32
|
+
def initialize(server, name)
|
|
33
|
+
super
|
|
34
|
+
@script_filename = name
|
|
35
|
+
@tempdir = server[:TempDir]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def do_GET(req, res)
|
|
39
|
+
#cgi_out = Tempfile.new("webrick.cgiout.", @tempdir)
|
|
40
|
+
#cgi_err = Tempfile.new("webrick.cgierr.", @tempdir)
|
|
41
|
+
cgi_out = StringIO.new ''
|
|
42
|
+
cgi_err = StringIO.new ''
|
|
43
|
+
|
|
44
|
+
old_stderr = $stderr
|
|
45
|
+
|
|
46
|
+
begin
|
|
47
|
+
$stderr = cgi_err
|
|
48
|
+
|
|
49
|
+
meta = req.meta_vars
|
|
50
|
+
meta["SCRIPT_FILENAME"] = @script_filename
|
|
51
|
+
meta["PATH"] = @config[:CGIPathEnv]
|
|
52
|
+
|
|
53
|
+
Web::open( :connection =>
|
|
54
|
+
WebrickConnection.new(:webrick_response => res,
|
|
55
|
+
:out => cgi_out,
|
|
56
|
+
:raw_post_data =>
|
|
57
|
+
StringIO.new( req.body || '' ),
|
|
58
|
+
:env => meta ) ) do
|
|
59
|
+
Web::load( @script_filename )
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
cgi_out.rewind
|
|
63
|
+
res.body = cgi_out.read
|
|
64
|
+
|
|
65
|
+
cgi_err.rewind
|
|
66
|
+
if errmsg = cgi_err.read
|
|
67
|
+
if errmsg.size > 0
|
|
68
|
+
@logger.error("RubyWebHandler: #{@script_filename}:\n" + errmsg)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
rescue Exception => ex
|
|
73
|
+
#Web::report_error( ex )
|
|
74
|
+
old_stderr.puts ex.backtrace
|
|
75
|
+
raise HTTPStatus::InternalServerError, ex.message
|
|
76
|
+
|
|
77
|
+
ensure
|
|
78
|
+
cgi_out.close
|
|
79
|
+
cgi_err.close
|
|
80
|
+
$stderr = old_stderr
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
alias do_POST do_GET
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
data/lib/web/session.rb
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'digest/md5'
|
|
2
|
+
module Web
|
|
3
|
+
# == Purpose
|
|
4
|
+
# Provides a file based implemetation of a session.
|
|
5
|
+
# This is hacked up from matz's CGI::Session
|
|
6
|
+
class Session
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def create_id
|
|
11
|
+
md5 = Digest::MD5.new
|
|
12
|
+
md5.update( String(Time.now.to_f) )
|
|
13
|
+
md5.update( String(rand(0)) )
|
|
14
|
+
#md5.update( String($$) )
|
|
15
|
+
#md5.update( 'thanks matz' )
|
|
16
|
+
md5.hexdigest[0,16]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize( cgi, options={} )
|
|
21
|
+
@session_id = load_id( cgi, options )
|
|
22
|
+
|
|
23
|
+
send_cookie( cgi, options[:session_key] || "_session_id" )
|
|
24
|
+
|
|
25
|
+
@session = get_session_from_disk
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def get_session_from_disk
|
|
29
|
+
if File.exists? file
|
|
30
|
+
File.open( file, "r" ) { |store|
|
|
31
|
+
Marshal.load store
|
|
32
|
+
}
|
|
33
|
+
else
|
|
34
|
+
{}
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def load_id( cgi, options )
|
|
39
|
+
if (options.has_key? :session_id)
|
|
40
|
+
options[:session_id]
|
|
41
|
+
elsif(cgi.cookie["_session_id"] && !cgi.cookie["_session_id"].empty?)
|
|
42
|
+
cgi.cookie["_session_id"][0]
|
|
43
|
+
else
|
|
44
|
+
Session.create_id
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def send_cookie( cgi, session_key )
|
|
50
|
+
cgi.set_cookie( session_key, @session_id )
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# saves session to disk
|
|
55
|
+
def save
|
|
56
|
+
File.open( file, "w+" ) { |store|
|
|
57
|
+
Marshal.dump( @session, store )
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def temp_dir
|
|
62
|
+
temp = ENV['TMP'] || ENV['TEMP'] || '/tmp'
|
|
63
|
+
unless( File.exists? temp )
|
|
64
|
+
temp = "c:/windows/temp"
|
|
65
|
+
end
|
|
66
|
+
temp
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def file
|
|
70
|
+
File.expand_path(File.join(self.temp_dir, File.basename(@session_id.to_s).untaint))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# resets session to empty hash, for use in testing
|
|
74
|
+
def reset
|
|
75
|
+
@session = {}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def method_missing(method, *args, &block)
|
|
79
|
+
# much faster than simple delegator
|
|
80
|
+
@session.send(method,*args,&block)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
data/lib/web/shim/cgi.rb
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# shim for old style CGI functionality
|
|
2
|
+
|
|
3
|
+
require 'cgi'
|
|
4
|
+
|
|
5
|
+
class CGI
|
|
6
|
+
class << self
|
|
7
|
+
[:escape,
|
|
8
|
+
:unescape,
|
|
9
|
+
:escapeHTML,
|
|
10
|
+
:unescapeHTML,
|
|
11
|
+
:escapeElement,
|
|
12
|
+
:unescapeElement, ].each do |sym|
|
|
13
|
+
define_method(sym) do |*args|
|
|
14
|
+
Web::send( sym, *args )
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
remove_method :initialize
|
|
20
|
+
def initialize(type = "query")
|
|
21
|
+
case type
|
|
22
|
+
when "html3"
|
|
23
|
+
extend Html3
|
|
24
|
+
element_init()
|
|
25
|
+
extend HtmlExtension
|
|
26
|
+
when "html4"
|
|
27
|
+
extend Html4
|
|
28
|
+
element_init()
|
|
29
|
+
extend HtmlExtension
|
|
30
|
+
when "html4Tr"
|
|
31
|
+
extend Html4Tr
|
|
32
|
+
element_init()
|
|
33
|
+
extend HtmlExtension
|
|
34
|
+
when "html4Fr"
|
|
35
|
+
extend Html4Tr
|
|
36
|
+
element_init()
|
|
37
|
+
extend Html4Fr
|
|
38
|
+
element_init()
|
|
39
|
+
extend HtmlExtension
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
Web::filter do |content|
|
|
43
|
+
while content.gsub!( /^(.+): (.+)/, '' )
|
|
44
|
+
if ($1.downcase == "location")
|
|
45
|
+
Web::set_redirect($2)
|
|
46
|
+
else
|
|
47
|
+
Web::add_header( $1, $2 )
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
content
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def [] key
|
|
55
|
+
Web[key]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# params has slightly different logic than Web::request
|
|
59
|
+
def params
|
|
60
|
+
@params ||= nil
|
|
61
|
+
unless @params
|
|
62
|
+
@params = Hash.new
|
|
63
|
+
Web::request.each do |k,v|
|
|
64
|
+
@params[k] ||= Array.new
|
|
65
|
+
v.each do |v1|
|
|
66
|
+
if (Web::multipart?)
|
|
67
|
+
@params[k].push( if v1.kind_of? Web::Upload
|
|
68
|
+
v1
|
|
69
|
+
else
|
|
70
|
+
t = Tempfile.new("Web")
|
|
71
|
+
t.write(v1)
|
|
72
|
+
Web::Upload.new(t, nil, nil)
|
|
73
|
+
end )
|
|
74
|
+
else
|
|
75
|
+
@params[k].push v1
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
@params
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
remove_method :env_table
|
|
84
|
+
def env_table
|
|
85
|
+
Web::env
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def cookies
|
|
89
|
+
unless @cookies
|
|
90
|
+
@cookies = Web::cookie
|
|
91
|
+
@cookies.each do |k,v|
|
|
92
|
+
@cookies[k] = CGI::Cookie::new( k, v )
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
@cookies
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def script_name
|
|
99
|
+
Web::script_name
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def query_string
|
|
103
|
+
Web::env[:query_string]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def has_key?(key)
|
|
107
|
+
self.params.has_key?(key)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def key?(key)
|
|
111
|
+
self.params.has_key?(key)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def keys
|
|
115
|
+
self.params.keys
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
remove_method :out
|
|
119
|
+
def out(headers=Array.new)
|
|
120
|
+
headers.each do |k,v|
|
|
121
|
+
k = "Set-Cookie" if (k.downcase == "cookie")
|
|
122
|
+
v.each do |v1|
|
|
123
|
+
Web::add_header(k,v1)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
Web << yield
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|