webrick 1.3.1 → 1.4.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of webrick might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/lib/webrick.rb +6 -6
- data/lib/webrick/accesslog.rb +9 -1
- data/lib/webrick/cgi.rb +51 -2
- data/lib/webrick/compat.rb +2 -1
- data/lib/webrick/config.rb +42 -5
- data/lib/webrick/cookie.rb +68 -6
- data/lib/webrick/htmlutils.rb +4 -2
- data/lib/webrick/httpauth.rb +1 -0
- data/lib/webrick/httpauth/authenticator.rb +13 -8
- data/lib/webrick/httpauth/basicauth.rb +3 -3
- data/lib/webrick/httpauth/digestauth.rb +25 -9
- data/lib/webrick/httpauth/htdigest.rb +8 -4
- data/lib/webrick/httpauth/htgroup.rb +1 -0
- data/lib/webrick/httpauth/htpasswd.rb +7 -3
- data/lib/webrick/httpauth/userdb.rb +1 -0
- data/lib/webrick/httpproxy.rb +47 -14
- data/lib/webrick/httprequest.rb +142 -16
- data/lib/webrick/httpresponse.rb +96 -24
- data/lib/webrick/https.rb +24 -1
- data/lib/webrick/httpserver.rb +20 -4
- data/lib/webrick/httpservlet.rb +1 -0
- data/lib/webrick/httpservlet/abstract.rb +2 -1
- data/lib/webrick/httpservlet/cgi_runner.rb +1 -0
- data/lib/webrick/httpservlet/cgihandler.rb +19 -5
- data/lib/webrick/httpservlet/erbhandler.rb +2 -1
- data/lib/webrick/httpservlet/filehandler.rb +87 -34
- data/lib/webrick/httpservlet/prochandler.rb +14 -0
- data/lib/webrick/httpstatus.rb +24 -10
- data/lib/webrick/httputils.rb +129 -13
- data/lib/webrick/httpversion.rb +28 -1
- data/lib/webrick/log.rb +22 -2
- data/lib/webrick/server.rb +203 -60
- data/lib/webrick/ssl.rb +80 -5
- data/lib/webrick/utils.rb +97 -67
- data/lib/webrick/version.rb +6 -1
- metadata +59 -69
- data/README.txt +0 -21
- data/sample/webrick/demo-app.rb +0 -66
- data/sample/webrick/demo-multipart.cgi +0 -12
- data/sample/webrick/demo-servlet.rb +0 -6
- data/sample/webrick/demo-urlencoded.cgi +0 -12
- data/sample/webrick/hello.cgi +0 -11
- data/sample/webrick/hello.rb +0 -8
- data/sample/webrick/httpd.rb +0 -23
- data/sample/webrick/httpproxy.rb +0 -25
- data/sample/webrick/httpsd.rb +0 -33
- data/test/openssl/utils.rb +0 -313
- data/test/ruby/envutil.rb +0 -208
- data/test/webrick/test_cgi.rb +0 -134
- data/test/webrick/test_cookie.rb +0 -131
- data/test/webrick/test_filehandler.rb +0 -285
- data/test/webrick/test_httpauth.rb +0 -167
- data/test/webrick/test_httpproxy.rb +0 -282
- data/test/webrick/test_httprequest.rb +0 -411
- data/test/webrick/test_httpresponse.rb +0 -49
- data/test/webrick/test_httpserver.rb +0 -305
- data/test/webrick/test_httputils.rb +0 -96
- data/test/webrick/test_httpversion.rb +0 -40
- data/test/webrick/test_server.rb +0 -67
- data/test/webrick/test_utils.rb +0 -64
- data/test/webrick/utils.rb +0 -58
- data/test/webrick/webrick.cgi +0 -36
- data/test/webrick/webrick_long_filename.cgi +0 -36
data/lib/webrick/ssl.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: false
|
1
2
|
#
|
2
3
|
# ssl.rb -- SSL/TLS enhancement for GenericServer
|
3
4
|
#
|
@@ -12,6 +13,55 @@ module WEBrick
|
|
12
13
|
module Config
|
13
14
|
svrsoft = General[:ServerSoftware]
|
14
15
|
osslv = ::OpenSSL::OPENSSL_VERSION.split[1]
|
16
|
+
|
17
|
+
##
|
18
|
+
# Default SSL server configuration.
|
19
|
+
#
|
20
|
+
# WEBrick can automatically create a self-signed certificate if
|
21
|
+
# <code>:SSLCertName</code> is set. For more information on the various
|
22
|
+
# SSL options see OpenSSL::SSL::SSLContext.
|
23
|
+
#
|
24
|
+
# :ServerSoftware ::
|
25
|
+
# The server software name used in the Server: header.
|
26
|
+
# :SSLEnable :: false,
|
27
|
+
# Enable SSL for this server. Defaults to false.
|
28
|
+
# :SSLCertificate ::
|
29
|
+
# The SSL certificate for the server.
|
30
|
+
# :SSLPrivateKey ::
|
31
|
+
# The SSL private key for the server certificate.
|
32
|
+
# :SSLClientCA :: nil,
|
33
|
+
# Array of certificates that will be sent to the client.
|
34
|
+
# :SSLExtraChainCert :: nil,
|
35
|
+
# Array of certificates that will be added to the certificate chain
|
36
|
+
# :SSLCACertificateFile :: nil,
|
37
|
+
# Path to a CA certificate file
|
38
|
+
# :SSLCACertificatePath :: nil,
|
39
|
+
# Path to a directory containing CA certificates
|
40
|
+
# :SSLCertificateStore :: nil,
|
41
|
+
# OpenSSL::X509::Store used for certificate validation of the client
|
42
|
+
# :SSLTmpDhCallback :: nil,
|
43
|
+
# Callback invoked when DH parameters are required.
|
44
|
+
# :SSLVerifyClient ::
|
45
|
+
# Sets whether the client is verified. This defaults to VERIFY_NONE
|
46
|
+
# which is typical for an HTTPS server.
|
47
|
+
# :SSLVerifyDepth ::
|
48
|
+
# Number of CA certificates to walk when verifying a certificate chain
|
49
|
+
# :SSLVerifyCallback ::
|
50
|
+
# Custom certificate verification callback
|
51
|
+
# :SSLTimeout ::
|
52
|
+
# Maximum session lifetime
|
53
|
+
# :SSLOptions ::
|
54
|
+
# Various SSL options
|
55
|
+
# :SSLCiphers ::
|
56
|
+
# Ciphers to be used
|
57
|
+
# :SSLStartImmediately ::
|
58
|
+
# Immediately start SSL upon connection? Defaults to true
|
59
|
+
# :SSLCertName ::
|
60
|
+
# SSL certificate name. Must be set to enable automatic certificate
|
61
|
+
# creation.
|
62
|
+
# :SSLCertComment ::
|
63
|
+
# Comment used during automatic certificate creation.
|
64
|
+
|
15
65
|
SSL = {
|
16
66
|
:ServerSoftware => "#{svrsoft} OpenSSL/#{osslv}",
|
17
67
|
:SSLEnable => false,
|
@@ -22,11 +72,13 @@ module WEBrick
|
|
22
72
|
:SSLCACertificateFile => nil,
|
23
73
|
:SSLCACertificatePath => nil,
|
24
74
|
:SSLCertificateStore => nil,
|
75
|
+
:SSLTmpDhCallback => nil,
|
25
76
|
:SSLVerifyClient => ::OpenSSL::SSL::VERIFY_NONE,
|
26
77
|
:SSLVerifyDepth => nil,
|
27
78
|
:SSLVerifyCallback => nil, # custom verification
|
28
79
|
:SSLTimeout => nil,
|
29
80
|
:SSLOptions => nil,
|
81
|
+
:SSLCiphers => nil,
|
30
82
|
:SSLStartImmediately => true,
|
31
83
|
# Must specify if you use auto generated certificate.
|
32
84
|
:SSLCertName => nil,
|
@@ -36,6 +88,10 @@ module WEBrick
|
|
36
88
|
end
|
37
89
|
|
38
90
|
module Utils
|
91
|
+
##
|
92
|
+
# Creates a self-signed certificate with the given number of +bits+,
|
93
|
+
# the issuer +cn+ and a +comment+ to be stored in the certificate.
|
94
|
+
|
39
95
|
def create_self_signed_cert(bits, cn, comment)
|
40
96
|
rsa = OpenSSL::PKey::RSA.new(bits){|p, n|
|
41
97
|
case p
|
@@ -52,7 +108,8 @@ module WEBrick
|
|
52
108
|
cert = OpenSSL::X509::Certificate.new
|
53
109
|
cert.version = 2
|
54
110
|
cert.serial = 1
|
55
|
-
name = OpenSSL::X509::Name.
|
111
|
+
name = (cn.kind_of? String) ? OpenSSL::X509::Name.parse(cn)
|
112
|
+
: OpenSSL::X509::Name.new(cn)
|
56
113
|
cert.subject = name
|
57
114
|
cert.issuer = name
|
58
115
|
cert.not_before = Time.now
|
@@ -78,14 +135,26 @@ module WEBrick
|
|
78
135
|
module_function :create_self_signed_cert
|
79
136
|
end
|
80
137
|
|
138
|
+
##
|
139
|
+
#--
|
140
|
+
# Updates WEBrick::GenericServer with SSL functionality
|
141
|
+
|
81
142
|
class GenericServer
|
82
|
-
|
143
|
+
|
144
|
+
##
|
145
|
+
# SSL context for the server when run in SSL mode
|
146
|
+
|
147
|
+
def ssl_context # :nodoc:
|
83
148
|
@ssl_context ||= nil
|
84
149
|
end
|
85
150
|
|
86
151
|
undef listen
|
87
|
-
|
88
|
-
|
152
|
+
|
153
|
+
##
|
154
|
+
# Updates +listen+ to enable SSL when the SSL configuration is active.
|
155
|
+
|
156
|
+
def listen(address, port) # :nodoc:
|
157
|
+
listeners = Utils::create_listeners(address, port)
|
89
158
|
if @config[:SSLEnable]
|
90
159
|
unless ssl_context
|
91
160
|
@ssl_context = setup_ssl_context(@config)
|
@@ -98,9 +167,13 @@ module WEBrick
|
|
98
167
|
}
|
99
168
|
end
|
100
169
|
@listeners += listeners
|
170
|
+
setup_shutdown_pipe
|
101
171
|
end
|
102
172
|
|
103
|
-
|
173
|
+
##
|
174
|
+
# Sets up an SSL context for +config+
|
175
|
+
|
176
|
+
def setup_ssl_context(config) # :nodoc:
|
104
177
|
unless config[:SSLCertificate]
|
105
178
|
cn = config[:SSLCertName]
|
106
179
|
comment = config[:SSLCertComment]
|
@@ -116,11 +189,13 @@ module WEBrick
|
|
116
189
|
ctx.ca_file = config[:SSLCACertificateFile]
|
117
190
|
ctx.ca_path = config[:SSLCACertificatePath]
|
118
191
|
ctx.cert_store = config[:SSLCertificateStore]
|
192
|
+
ctx.tmp_dh_callback = config[:SSLTmpDhCallback]
|
119
193
|
ctx.verify_mode = config[:SSLVerifyClient]
|
120
194
|
ctx.verify_depth = config[:SSLVerifyDepth]
|
121
195
|
ctx.verify_callback = config[:SSLVerifyCallback]
|
122
196
|
ctx.timeout = config[:SSLTimeout]
|
123
197
|
ctx.options = config[:SSLOptions]
|
198
|
+
ctx.ciphers = config[:SSLCiphers]
|
124
199
|
ctx
|
125
200
|
end
|
126
201
|
end
|
data/lib/webrick/utils.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: false
|
1
2
|
#
|
2
3
|
# utils.rb -- Miscellaneous utilities
|
3
4
|
#
|
@@ -9,40 +10,29 @@
|
|
9
10
|
# $IPR: utils.rb,v 1.10 2003/02/16 22:22:54 gotoyuzo Exp $
|
10
11
|
|
11
12
|
require 'socket'
|
12
|
-
require '
|
13
|
-
|
14
|
-
require 'etc'
|
15
|
-
rescue LoadError
|
16
|
-
nil
|
17
|
-
end
|
13
|
+
require 'io/nonblock'
|
14
|
+
require 'etc'
|
18
15
|
|
19
16
|
module WEBrick
|
20
17
|
module Utils
|
21
18
|
##
|
22
19
|
# Sets IO operations on +io+ to be non-blocking
|
23
20
|
def set_non_blocking(io)
|
24
|
-
|
25
|
-
if defined?(Fcntl::F_GETFL)
|
26
|
-
flag |= io.fcntl(Fcntl::F_GETFL)
|
27
|
-
end
|
28
|
-
io.fcntl(Fcntl::F_SETFL, flag)
|
21
|
+
io.nonblock = true if io.respond_to?(:nonblock=)
|
29
22
|
end
|
30
23
|
module_function :set_non_blocking
|
31
24
|
|
32
25
|
##
|
33
26
|
# Sets the close on exec flag for +io+
|
34
27
|
def set_close_on_exec(io)
|
35
|
-
if
|
36
|
-
io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
37
|
-
end
|
28
|
+
io.close_on_exec = true if io.respond_to?(:close_on_exec=)
|
38
29
|
end
|
39
30
|
module_function :set_close_on_exec
|
40
31
|
|
41
32
|
##
|
42
33
|
# Changes the process's uid and gid to the ones of +user+
|
43
34
|
def su(user)
|
44
|
-
if
|
45
|
-
pw = Etc.getpwnam(user)
|
35
|
+
if pw = Etc.getpwnam(user)
|
46
36
|
Process::initgroups(user, pw.gid)
|
47
37
|
Process::Sys::setgid(pw.gid)
|
48
38
|
Process::Sys::setuid(pw.uid)
|
@@ -68,30 +58,17 @@ module WEBrick
|
|
68
58
|
# Creates TCP server sockets bound to +address+:+port+ and returns them.
|
69
59
|
#
|
70
60
|
# It will create IPV4 and IPV6 sockets on all interfaces.
|
71
|
-
def create_listeners(address, port
|
61
|
+
def create_listeners(address, port)
|
72
62
|
unless port
|
73
63
|
raise ArgumentError, "must specify port"
|
74
64
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
sockets = []
|
82
|
-
res.each{|ai|
|
83
|
-
begin
|
84
|
-
logger.debug("TCPServer.new(#{ai[3]}, #{port})") if logger
|
85
|
-
sock = TCPServer.new(ai[3], port)
|
86
|
-
port = sock.addr[1] if port == 0
|
87
|
-
Utils::set_close_on_exec(sock)
|
88
|
-
sockets << sock
|
89
|
-
rescue => ex
|
90
|
-
logger.warn("TCPServer Error: #{ex}") if logger
|
91
|
-
last_error = ex
|
92
|
-
end
|
65
|
+
sockets = Socket.tcp_server_sockets(address, port)
|
66
|
+
sockets = sockets.map {|s|
|
67
|
+
s.autoclose = false
|
68
|
+
ts = TCPServer.for_fd(s.fileno)
|
69
|
+
s.close
|
70
|
+
ts
|
93
71
|
}
|
94
|
-
raise last_error if sockets.empty?
|
95
72
|
return sockets
|
96
73
|
end
|
97
74
|
module_function :create_listeners
|
@@ -149,7 +126,7 @@ module WEBrick
|
|
149
126
|
|
150
127
|
##
|
151
128
|
# Mutex used to synchronize access across threads
|
152
|
-
TimeoutMutex = Mutex.new # :nodoc:
|
129
|
+
TimeoutMutex = Thread::Mutex.new # :nodoc:
|
153
130
|
|
154
131
|
##
|
155
132
|
# Registers a new timeout handler
|
@@ -157,43 +134,82 @@ module WEBrick
|
|
157
134
|
# +time+:: Timeout in seconds
|
158
135
|
# +exception+:: Exception to raise when timeout elapsed
|
159
136
|
def TimeoutHandler.register(seconds, exception)
|
160
|
-
|
161
|
-
|
162
|
-
}
|
137
|
+
at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + seconds
|
138
|
+
instance.register(Thread.current, at, exception)
|
163
139
|
end
|
164
140
|
|
165
141
|
##
|
166
142
|
# Cancels the timeout handler +id+
|
167
143
|
def TimeoutHandler.cancel(id)
|
144
|
+
instance.cancel(Thread.current, id)
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.terminate
|
148
|
+
instance.terminate
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Creates a new TimeoutHandler. You should use ::register and ::cancel
|
153
|
+
# instead of creating the timeout handler directly.
|
154
|
+
def initialize
|
168
155
|
TimeoutMutex.synchronize{
|
169
|
-
|
156
|
+
@timeout_info = Hash.new
|
170
157
|
}
|
158
|
+
@queue = Thread::Queue.new
|
159
|
+
@watcher = nil
|
171
160
|
end
|
172
161
|
|
173
|
-
|
174
|
-
|
175
|
-
|
162
|
+
# :nodoc:
|
163
|
+
private \
|
164
|
+
def watch
|
165
|
+
to_interrupt = []
|
176
166
|
while true
|
177
|
-
now =
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
167
|
+
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
168
|
+
wakeup = nil
|
169
|
+
to_interrupt.clear
|
170
|
+
TimeoutMutex.synchronize{
|
171
|
+
@timeout_info.each {|thread, ary|
|
172
|
+
next unless ary
|
173
|
+
ary.each{|info|
|
174
|
+
time, exception = *info
|
175
|
+
if time < now
|
176
|
+
to_interrupt.push [thread, info.object_id, exception]
|
177
|
+
elsif !wakeup || time < wakeup
|
178
|
+
wakeup = time
|
179
|
+
end
|
180
|
+
}
|
182
181
|
}
|
183
182
|
}
|
184
|
-
|
183
|
+
to_interrupt.each {|arg| interrupt(*arg)}
|
184
|
+
if !wakeup
|
185
|
+
@queue.pop
|
186
|
+
elsif (wakeup -= now) > 0
|
187
|
+
begin
|
188
|
+
(th = Thread.start {@queue.pop}).join(wakeup)
|
189
|
+
ensure
|
190
|
+
th&.kill&.join
|
191
|
+
end
|
192
|
+
end
|
193
|
+
@queue.clear
|
185
194
|
end
|
186
|
-
|
187
|
-
|
195
|
+
end
|
196
|
+
|
197
|
+
# :nodoc:
|
198
|
+
private \
|
199
|
+
def watcher
|
200
|
+
(w = @watcher)&.alive? and return w # usual case
|
201
|
+
TimeoutMutex.synchronize{
|
202
|
+
(w = @watcher)&.alive? and next w # pathological check
|
203
|
+
@watcher = Thread.start(&method(:watch))
|
204
|
+
}
|
205
|
+
end
|
188
206
|
|
189
207
|
##
|
190
208
|
# Interrupts the timeout handler +id+ and raises +exception+
|
191
209
|
def interrupt(thread, id, exception)
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
end
|
196
|
-
}
|
210
|
+
if cancel(thread, id) && thread.alive?
|
211
|
+
thread.raise(exception, "execution timeout")
|
212
|
+
end
|
197
213
|
end
|
198
214
|
|
199
215
|
##
|
@@ -202,22 +218,36 @@ module WEBrick
|
|
202
218
|
# +time+:: Timeout in seconds
|
203
219
|
# +exception+:: Exception to raise when timeout elapsed
|
204
220
|
def register(thread, time, exception)
|
205
|
-
|
206
|
-
|
207
|
-
|
221
|
+
info = nil
|
222
|
+
TimeoutMutex.synchronize{
|
223
|
+
(@timeout_info[thread] ||= []) << (info = [time, exception])
|
224
|
+
}
|
225
|
+
@queue.push nil
|
226
|
+
watcher
|
227
|
+
return info.object_id
|
208
228
|
end
|
209
229
|
|
210
230
|
##
|
211
231
|
# Cancels the timeout handler +id+
|
212
232
|
def cancel(thread, id)
|
213
|
-
|
214
|
-
ary
|
215
|
-
|
216
|
-
|
233
|
+
TimeoutMutex.synchronize{
|
234
|
+
if ary = @timeout_info[thread]
|
235
|
+
ary.delete_if{|info| info.object_id == id }
|
236
|
+
if ary.empty?
|
237
|
+
@timeout_info.delete(thread)
|
238
|
+
end
|
239
|
+
return true
|
217
240
|
end
|
218
|
-
return
|
219
|
-
|
220
|
-
|
241
|
+
return false
|
242
|
+
}
|
243
|
+
end
|
244
|
+
|
245
|
+
##
|
246
|
+
def terminate
|
247
|
+
TimeoutMutex.synchronize{
|
248
|
+
@timeout_info.clear
|
249
|
+
@watcher&.kill&.join
|
250
|
+
}
|
221
251
|
end
|
222
252
|
end
|
223
253
|
|
data/lib/webrick/version.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: false
|
1
2
|
#--
|
2
3
|
# version.rb -- version and release date
|
3
4
|
#
|
@@ -9,5 +10,9 @@
|
|
9
10
|
# $IPR: version.rb,v 1.74 2003/07/22 19:20:43 gotoyuzo Exp $
|
10
11
|
|
11
12
|
module WEBrick
|
12
|
-
|
13
|
+
|
14
|
+
##
|
15
|
+
# The WEBrick version
|
16
|
+
|
17
|
+
VERSION = "1.4.0.beta1"
|
13
18
|
end
|
metadata
CHANGED
@@ -1,106 +1,96 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webrick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.4.0.beta1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- TAKAHASHI Masayoshi
|
8
|
+
- GOTOU YUUZOU
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
14
|
-
|
15
|
-
|
12
|
+
date: 2017-05-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
description: WEBrick is an HTTP server toolkit that can be configured as an HTTPS
|
29
|
+
server, a proxy server, and a virtual-host server.
|
30
|
+
email:
|
31
|
+
-
|
32
|
+
-
|
16
33
|
executables: []
|
17
34
|
extensions: []
|
18
35
|
extra_rdoc_files: []
|
19
36
|
files:
|
20
|
-
- lib/webrick
|
21
|
-
- lib/webrick/httpservlet/cgi_runner.rb
|
22
|
-
- lib/webrick/httpservlet/erbhandler.rb
|
23
|
-
- lib/webrick/httpservlet/filehandler.rb
|
24
|
-
- lib/webrick/httpservlet/prochandler.rb
|
25
|
-
- lib/webrick/httpservlet/abstract.rb
|
26
|
-
- lib/webrick/httpservlet/cgihandler.rb
|
27
|
-
- lib/webrick/compat.rb
|
28
|
-
- lib/webrick/httpresponse.rb
|
37
|
+
- lib/webrick.rb
|
29
38
|
- lib/webrick/accesslog.rb
|
30
|
-
- lib/webrick/httpversion.rb
|
31
|
-
- lib/webrick/utils.rb
|
32
|
-
- lib/webrick/version.rb
|
33
|
-
- lib/webrick/httprequest.rb
|
34
|
-
- lib/webrick/httpauth.rb
|
35
|
-
- lib/webrick/server.rb
|
36
|
-
- lib/webrick/httpproxy.rb
|
37
|
-
- lib/webrick/ssl.rb
|
38
39
|
- lib/webrick/cgi.rb
|
39
|
-
- lib/webrick/
|
40
|
-
- lib/webrick/
|
41
|
-
- lib/webrick/httpserver.rb
|
40
|
+
- lib/webrick/compat.rb
|
41
|
+
- lib/webrick/config.rb
|
42
42
|
- lib/webrick/cookie.rb
|
43
|
-
- lib/webrick/
|
43
|
+
- lib/webrick/htmlutils.rb
|
44
|
+
- lib/webrick/httpauth.rb
|
45
|
+
- lib/webrick/httpauth/authenticator.rb
|
44
46
|
- lib/webrick/httpauth/basicauth.rb
|
45
47
|
- lib/webrick/httpauth/digestauth.rb
|
46
|
-
- lib/webrick/httpauth/authenticator.rb
|
47
48
|
- lib/webrick/httpauth/htdigest.rb
|
48
49
|
- lib/webrick/httpauth/htgroup.rb
|
49
50
|
- lib/webrick/httpauth/htpasswd.rb
|
50
51
|
- lib/webrick/httpauth/userdb.rb
|
51
|
-
- lib/webrick/
|
52
|
+
- lib/webrick/httpproxy.rb
|
53
|
+
- lib/webrick/httprequest.rb
|
54
|
+
- lib/webrick/httpresponse.rb
|
55
|
+
- lib/webrick/https.rb
|
56
|
+
- lib/webrick/httpserver.rb
|
52
57
|
- lib/webrick/httpservlet.rb
|
58
|
+
- lib/webrick/httpservlet/abstract.rb
|
59
|
+
- lib/webrick/httpservlet/cgi_runner.rb
|
60
|
+
- lib/webrick/httpservlet/cgihandler.rb
|
61
|
+
- lib/webrick/httpservlet/erbhandler.rb
|
62
|
+
- lib/webrick/httpservlet/filehandler.rb
|
63
|
+
- lib/webrick/httpservlet/prochandler.rb
|
64
|
+
- lib/webrick/httpstatus.rb
|
65
|
+
- lib/webrick/httputils.rb
|
66
|
+
- lib/webrick/httpversion.rb
|
53
67
|
- lib/webrick/log.rb
|
54
|
-
- lib/webrick.rb
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
|
59
|
-
|
60
|
-
-
|
61
|
-
|
62
|
-
- sample/webrick/demo-app.rb
|
63
|
-
- sample/webrick/demo-servlet.rb
|
64
|
-
- test/webrick/webrick_long_filename.cgi
|
65
|
-
- test/webrick/utils.rb
|
66
|
-
- test/webrick/test_httpproxy.rb
|
67
|
-
- test/webrick/test_cookie.rb
|
68
|
-
- test/webrick/test_server.rb
|
69
|
-
- test/webrick/test_httpresponse.rb
|
70
|
-
- test/webrick/test_utils.rb
|
71
|
-
- test/webrick/test_httpserver.rb
|
72
|
-
- test/webrick/test_httprequest.rb
|
73
|
-
- test/webrick/test_httpversion.rb
|
74
|
-
- test/webrick/webrick.cgi
|
75
|
-
- test/webrick/test_httpauth.rb
|
76
|
-
- test/webrick/test_cgi.rb
|
77
|
-
- test/webrick/test_httputils.rb
|
78
|
-
- test/webrick/test_filehandler.rb
|
79
|
-
- test/ruby/envutil.rb
|
80
|
-
- test/openssl/utils.rb
|
81
|
-
- README.txt
|
82
|
-
homepage: http://github.com/nahi/webrick
|
83
|
-
licenses: []
|
68
|
+
- lib/webrick/server.rb
|
69
|
+
- lib/webrick/ssl.rb
|
70
|
+
- lib/webrick/utils.rb
|
71
|
+
- lib/webrick/version.rb
|
72
|
+
homepage: https://www.ruby-lang.org
|
73
|
+
licenses:
|
74
|
+
- BSD-2-Clause
|
75
|
+
metadata: {}
|
84
76
|
post_install_message:
|
85
77
|
rdoc_options: []
|
86
78
|
require_paths:
|
87
79
|
- lib
|
88
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
81
|
requirements:
|
91
|
-
- -
|
82
|
+
- - ">="
|
92
83
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
84
|
+
version: 2.5.0dev
|
94
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
86
|
requirements:
|
97
|
-
- -
|
87
|
+
- - ">"
|
98
88
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
89
|
+
version: 1.3.1
|
100
90
|
requirements: []
|
101
91
|
rubyforge_project:
|
102
|
-
rubygems_version:
|
92
|
+
rubygems_version: 2.6.11
|
103
93
|
signing_key:
|
104
|
-
specification_version:
|
105
|
-
summary:
|
94
|
+
specification_version: 4
|
95
|
+
summary: HTTP server toolkit
|
106
96
|
test_files: []
|