webrick 1.8.2 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,255 @@
1
+ module WEBrick
2
+ #
3
+ # This module is used to manager HTTP status codes.
4
+ #
5
+ # See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for more
6
+ # information.
7
+ module HTTPStatus
8
+ #
9
+ # Root of the HTTP status class hierarchy
10
+ class Status < StandardError
11
+ attr_reader self.code: Integer
12
+
13
+ attr_reader self.reason_phrase: String
14
+
15
+ # Returns the HTTP status code
16
+ def code: () -> Integer
17
+
18
+ # Returns the HTTP status description
19
+ def reason_phrase: () -> String
20
+
21
+ alias to_i code
22
+ end
23
+
24
+ # Root of the HTTP info statuses
25
+ class Info < Status
26
+ end
27
+
28
+ # Root of the HTTP success statuses
29
+ class Success < Status
30
+ end
31
+
32
+ # Root of the HTTP redirect statuses
33
+ class Redirect < Status
34
+ end
35
+
36
+ # Root of the HTTP error statuses
37
+ class Error < Status
38
+ end
39
+
40
+ # Root of the HTTP client error statuses
41
+ class ClientError < Error
42
+ end
43
+
44
+ # Root of the HTTP server error statuses
45
+ class ServerError < Error
46
+ end
47
+
48
+ class EOFError < StandardError
49
+ end
50
+
51
+ # HTTP status codes and descriptions
52
+ StatusMessage: Hash[Integer, String]
53
+
54
+ # Maps a status code to the corresponding Status class
55
+ CodeToError: Hash[Integer, singleton(Status)]
56
+
57
+ # WEBrick::HTTPStatus::constants.grep(/\ARC_/).map{"#{_1}: #{WEBrick::HTTPStatus.const_get(_1)}"}
58
+
59
+ RC_CONTINUE: 100
60
+ RC_SWITCHING_PROTOCOLS: 101
61
+ RC_OK: 200
62
+ RC_CREATED: 201
63
+ RC_ACCEPTED: 202
64
+ RC_NON_AUTHORITATIVE_INFORMATION: 203
65
+ RC_NO_CONTENT: 204
66
+ RC_RESET_CONTENT: 205
67
+ RC_PARTIAL_CONTENT: 206
68
+ RC_MULTI_STATUS: 207
69
+ RC_MULTIPLE_CHOICES: 300
70
+ RC_MOVED_PERMANENTLY: 301
71
+ RC_FOUND: 302
72
+ RC_SEE_OTHER: 303
73
+ RC_NOT_MODIFIED: 304
74
+ RC_USE_PROXY: 305
75
+ RC_TEMPORARY_REDIRECT: 307
76
+ RC_BAD_REQUEST: 400
77
+ RC_UNAUTHORIZED: 401
78
+ RC_PAYMENT_REQUIRED: 402
79
+ RC_FORBIDDEN: 403
80
+ RC_NOT_FOUND: 404
81
+ RC_METHOD_NOT_ALLOWED: 405
82
+ RC_NOT_ACCEPTABLE: 406
83
+ RC_PROXY_AUTHENTICATION_REQUIRED: 407
84
+ RC_REQUEST_TIMEOUT: 408
85
+ RC_CONFLICT: 409
86
+ RC_GONE: 410
87
+ RC_PRECONDITION_FAILED: 412
88
+ RC_LENGTH_REQUIRED: 411
89
+ RC_REQUEST_ENTITY_TOO_LARGE: 413
90
+ RC_REQUEST_URI_TOO_LARGE: 414
91
+ RC_UNSUPPORTED_MEDIA_TYPE: 415
92
+ RC_EXPECTATION_FAILED: 417
93
+ RC_UNPROCESSABLE_ENTITY: 422
94
+ RC_LOCKED: 423
95
+ RC_FAILED_DEPENDENCY: 424
96
+ RC_REQUEST_RANGE_NOT_SATISFIABLE: 416
97
+ RC_UPGRADE_REQUIRED: 426
98
+ RC_PRECONDITION_REQUIRED: 428
99
+ RC_TOO_MANY_REQUESTS: 429
100
+ RC_REQUEST_HEADER_FIELDS_TOO_LARGE: 431
101
+ RC_UNAVAILABLE_FOR_LEGAL_REASONS: 451
102
+ RC_INTERNAL_SERVER_ERROR: 500
103
+ RC_NOT_IMPLEMENTED: 501
104
+ RC_BAD_GATEWAY: 502
105
+ RC_SERVICE_UNAVAILABLE: 503
106
+ RC_GATEWAY_TIMEOUT: 504
107
+ RC_HTTP_VERSION_NOT_SUPPORTED: 505
108
+ RC_INSUFFICIENT_STORAGE: 507
109
+ RC_NETWORK_AUTHENTICATION_REQUIRED: 511
110
+
111
+ # WEBrick::HTTPStatus::CodeToError.each_value.map{"class #{_1.name.split(/::/).last} < #{_1.superclass.name.split(/::/).last}\nend"}
112
+
113
+ class Continue < Info
114
+ end
115
+ class SwitchingProtocols < Info
116
+ end
117
+ class OK < Success
118
+ end
119
+ class Created < Success
120
+ end
121
+ class Accepted < Success
122
+ end
123
+ class NonAuthoritativeInformation < Success
124
+ end
125
+ class NoContent < Success
126
+ end
127
+ class ResetContent < Success
128
+ end
129
+ class PartialContent < Success
130
+ end
131
+ class MultiStatus < Success
132
+ end
133
+ class MultipleChoices < Redirect
134
+ end
135
+ class MovedPermanently < Redirect
136
+ end
137
+ class Found < Redirect
138
+ end
139
+ class SeeOther < Redirect
140
+ end
141
+ class NotModified < Redirect
142
+ end
143
+ class UseProxy < Redirect
144
+ end
145
+ class TemporaryRedirect < Redirect
146
+ end
147
+ class BadRequest < ClientError
148
+ end
149
+ class Unauthorized < ClientError
150
+ end
151
+ class PaymentRequired < ClientError
152
+ end
153
+ class Forbidden < ClientError
154
+ end
155
+ class NotFound < ClientError
156
+ end
157
+ class MethodNotAllowed < ClientError
158
+ end
159
+ class NotAcceptable < ClientError
160
+ end
161
+ class ProxyAuthenticationRequired < ClientError
162
+ end
163
+ class RequestTimeout < ClientError
164
+ end
165
+ class Conflict < ClientError
166
+ end
167
+ class Gone < ClientError
168
+ end
169
+ class LengthRequired < ClientError
170
+ end
171
+ class PreconditionFailed < ClientError
172
+ end
173
+ class RequestEntityTooLarge < ClientError
174
+ end
175
+ class RequestURITooLarge < ClientError
176
+ end
177
+ class UnsupportedMediaType < ClientError
178
+ end
179
+ class RequestRangeNotSatisfiable < ClientError
180
+ end
181
+ class ExpectationFailed < ClientError
182
+ end
183
+ class UnprocessableEntity < ClientError
184
+ end
185
+ class Locked < ClientError
186
+ end
187
+ class FailedDependency < ClientError
188
+ end
189
+ class UpgradeRequired < ClientError
190
+ end
191
+ class PreconditionRequired < ClientError
192
+ end
193
+ class TooManyRequests < ClientError
194
+ end
195
+ class RequestHeaderFieldsTooLarge < ClientError
196
+ end
197
+ class UnavailableForLegalReasons < ClientError
198
+ end
199
+ class InternalServerError < ServerError
200
+ end
201
+ class NotImplemented < ServerError
202
+ end
203
+ class BadGateway < ServerError
204
+ end
205
+ class ServiceUnavailable < ServerError
206
+ end
207
+ class GatewayTimeout < ServerError
208
+ end
209
+ class HTTPVersionNotSupported < ServerError
210
+ end
211
+ class InsufficientStorage < ServerError
212
+ end
213
+ class NetworkAuthenticationRequired < ServerError
214
+ end
215
+
216
+ #
217
+ # Returns the description corresponding to the HTTP status +code+
218
+ #
219
+ # WEBrick::HTTPStatus.reason_phrase 404
220
+ # => "Not Found"
221
+ def self?.reason_phrase: (Integer code) -> String
222
+
223
+ #
224
+ # Is +code+ an informational status?
225
+ def self?.info?: (Integer code) -> bool
226
+
227
+ #
228
+ # Is +code+ a successful status?
229
+ def self?.success?: (Integer code) -> bool
230
+
231
+ #
232
+ # Is +code+ a redirection status?
233
+ def self?.redirect?: (Integer code) -> bool
234
+
235
+ #
236
+ # Is +code+ an error status?
237
+ def self?.error?: (Integer code) -> bool
238
+
239
+ #
240
+ # Is +code+ a client error status?
241
+ def self?.client_error?: (Integer code) -> bool
242
+
243
+ #
244
+ # Is +code+ a server error status?
245
+ def self?.server_error?: (Integer code) -> bool
246
+
247
+ #
248
+ # Returns the status class corresponding to +code+
249
+ #
250
+ # WEBrick::HTTPStatus[302]
251
+ # => WEBrick::HTTPStatus::NotFound
252
+ #
253
+ def self.[]: (Integer code) -> singleton(Status)
254
+ end
255
+ end
data/sig/httputils.rbs ADDED
@@ -0,0 +1,116 @@
1
+ module WEBrick
2
+ CR: String
3
+
4
+ LF: String
5
+
6
+ CRLF: String
7
+
8
+ module HTTPUtils
9
+ def self?.normalize_path: (String path) -> String
10
+
11
+ type mime_types = Hash[String, String]
12
+
13
+ DefaultMimeTypes: mime_types
14
+
15
+ def self?.load_mime_types: (string | _ToPath file) -> mime_types
16
+
17
+ def self?.mime_type: (String filename, mime_types mime_tab) -> String
18
+
19
+ class SplitHeader < Array[String]
20
+ def join: (?String separator) -> String
21
+ end
22
+
23
+ class CookieHeader < Array[String]
24
+ def join: (?String separator) -> String
25
+ end
26
+
27
+ HEADER_CLASSES: Hash[String, untyped]
28
+
29
+ def self?.parse_header: (String raw) -> Hash[String, Array[String]]
30
+
31
+ def self?.split_header_value: (String str) -> Array[String]
32
+
33
+ def self?.parse_range_header: (String? ranges_specifier) -> Array[Range[Integer]]?
34
+
35
+ def self?.parse_qvalues: (String? value) -> Array[String]
36
+
37
+ def self?.dequote: (String str) -> String
38
+
39
+ def self?.quote: (String str) -> String
40
+
41
+ class FormData < String
42
+ @raw_header: Array[String]
43
+
44
+ @header: Hash[String, Array[String]]
45
+
46
+ EmptyRawHeader: Array[String]
47
+
48
+ EmptyHeader: Hash[String, Array[String]]
49
+
50
+ attr_accessor name: String?
51
+
52
+ attr_accessor filename: String?
53
+
54
+ attr_accessor next_data: instance?
55
+
56
+ def initialize: (*String args) -> void
57
+
58
+ def []: (*String key) -> String
59
+ # following is as same as String#[]
60
+ | (int start, ?int length) -> String?
61
+ | (range[int?] range) -> String?
62
+ | (Regexp regexp, ?MatchData::capture backref) -> String?
63
+ | (String substring) -> String?
64
+
65
+ def <<: (String str) -> self
66
+
67
+ def append_data: (instance data) -> self
68
+
69
+ def each_data: () { (instance) -> void } -> void
70
+
71
+ def list: () -> Array[String]
72
+
73
+ alias to_ary list
74
+
75
+ def to_s: () -> String
76
+ end
77
+
78
+ def self?.parse_query: (String? str) -> Hash[String, FormData]
79
+
80
+ interface _EachLine
81
+ def each_line: () { (String) -> void } -> void
82
+ end
83
+
84
+ def self?.parse_form_data: (_EachLine? io, interned boundary) -> Hash[String, FormData]
85
+
86
+ def self?._make_regex: (String str) -> Regexp
87
+
88
+ def self?._make_regex!: (String str) -> Regexp
89
+
90
+ def self?._escape: (String str, Regexp regex) -> String
91
+
92
+ def self?._unescape: (String str, Regexp regex) -> String
93
+
94
+ UNESCAPED: Regexp
95
+
96
+ UNESCAPED_FORM: Regexp
97
+
98
+ NONASCII: Regexp
99
+
100
+ ESCAPED: Regexp
101
+
102
+ UNESCAPED_PCHAR: Regexp
103
+
104
+ def self?.escape: (String str) -> String
105
+
106
+ def self?.unescape: (String str) -> String
107
+
108
+ def self?.escape_form: (String str) -> String
109
+
110
+ def self?.unescape_form: (String str) -> String
111
+
112
+ def self?.escape_path: (String str) -> String
113
+
114
+ def self?.escape8bit: (String str) -> String
115
+ end
116
+ end
@@ -0,0 +1,17 @@
1
+ module WEBrick
2
+ class HTTPVersion
3
+ include Comparable
4
+
5
+ attr_accessor major: Integer
6
+
7
+ attr_accessor minor: Integer
8
+
9
+ def self.convert: (HTTPVersion | String version) -> instance
10
+
11
+ def initialize: (HTTPVersion | String version) -> void
12
+
13
+ def <=>: (HTTPVersion | String other) -> Integer?
14
+
15
+ def to_s: () -> String
16
+ end
17
+ end
data/sig/log.rbs ADDED
@@ -0,0 +1,93 @@
1
+ module WEBrick
2
+ class BasicLog
3
+ @log: IO?
4
+
5
+ @opened: TrueClass?
6
+
7
+ FATAL: 1
8
+
9
+ ERROR: 2
10
+
11
+ WARN: 3
12
+
13
+ INFO: 4
14
+
15
+ DEBUG: 5
16
+
17
+ # log-level, messages above this level will be logged
18
+ attr_accessor level: Integer
19
+
20
+ type log_file = (IO | String)?
21
+
22
+ def initialize: (?log_file log_file, ?Integer? level) -> void
23
+
24
+ #
25
+ # Closes the logger (also closes the log device associated to the logger)
26
+ def close: () -> void
27
+
28
+ def log: (Integer level, String data) -> IO?
29
+
30
+ #
31
+ # Synonym for log(INFO, obj.to_s)
32
+ def <<: (_ToS obj) -> IO?
33
+
34
+ type message = Exception | _ToStr | Object
35
+
36
+ # Shortcut for logging a FATAL message
37
+ def fatal: (message msg) -> IO?
38
+
39
+ # Shortcut for logging an ERROR message
40
+ def error: (message msg) -> IO?
41
+
42
+ # Shortcut for logging a WARN message
43
+ def warn: (message msg) -> IO?
44
+
45
+ # Shortcut for logging an INFO message
46
+ def info: (message msg) -> IO?
47
+
48
+ # Shortcut for logging a DEBUG message
49
+ def debug: (message msg) -> IO?
50
+
51
+ # Will the logger output FATAL messages?
52
+ def fatal?: () -> bool
53
+
54
+ # Will the logger output ERROR messages?
55
+ def error?: () -> bool
56
+
57
+ # Will the logger output WARN messages?
58
+ def warn?: () -> bool
59
+
60
+ # Will the logger output INFO messages?
61
+ def info?: () -> bool
62
+
63
+ # Will the logger output DEBUG messages?
64
+ def debug?: () -> bool
65
+
66
+ private
67
+
68
+ #
69
+ # Formats +arg+ for the logger
70
+ #
71
+ # * If +arg+ is an Exception, it will format the error message and
72
+ # the back trace.
73
+ # * If +arg+ responds to #to_str, it will return it.
74
+ # * Otherwise it will return +arg+.inspect.
75
+ def format: (message arg) -> String
76
+ end
77
+
78
+ class Log < BasicLog
79
+ # Format of the timestamp which is applied to each logged line. The
80
+ # default is <tt>"[%Y-%m-%d %H:%M:%S]"</tt>
81
+ attr_accessor time_format: String
82
+
83
+ #
84
+ # Same as BasicLog#initialize
85
+ #
86
+ # You can set the timestamp format through #time_format
87
+ def initialize: (?BasicLog::log_file log_file, ?Integer? level) -> void
88
+
89
+ #
90
+ # Same as BasicLog#log
91
+ def log: (Integer level, String data) -> IO?
92
+ end
93
+ end
data/sig/manifest.yaml ADDED
@@ -0,0 +1,8 @@
1
+ dependencies:
2
+ - name: digest
3
+ - name: erb
4
+ - name: openssl
5
+ - name: singleton
6
+ - name: socket
7
+ - name: tempfile
8
+ - name: uri
data/sig/server.rbs ADDED
@@ -0,0 +1,57 @@
1
+ module WEBrick
2
+ class ServerError < StandardError
3
+ end
4
+
5
+ class SimpleServer
6
+ def self.start: [T] () { () -> T } -> T
7
+ end
8
+
9
+ class Daemon
10
+ def self.start: () -> void
11
+ | [T] () { () -> T } -> T
12
+ end
13
+
14
+ class GenericServer
15
+ @shutdown_pipe: [IO, IO]?
16
+
17
+ attr_reader status: :Stop | :Running | :Shutdown
18
+
19
+ attr_reader config: Hash[Symbol, untyped]
20
+
21
+ attr_reader logger: BasicLog
22
+
23
+ attr_reader tokens: Thread::SizedQueue
24
+
25
+ attr_reader listeners: Array[TCPServer| OpenSSL::SSL::SSLServer]
26
+
27
+ def initialize: (?Hash[Symbol, untyped] config, ?Hash[Symbol, untyped] default) -> void
28
+
29
+ def []: (Symbol key) -> untyped
30
+
31
+ def listen: (String address, Integer port) -> void
32
+
33
+ def start: () { (TCPSocket) -> void } -> void
34
+
35
+ def stop: () -> void
36
+
37
+ def shutdown: () -> void
38
+
39
+ def run: (TCPSocket sock) -> void
40
+
41
+ private
42
+
43
+ def accept_client: (TCPServer svr) -> TCPSocket?
44
+
45
+ def start_thread: (TCPSocket sock) { (TCPSocket) -> void } -> Thread
46
+
47
+ def call_callback: (Symbol callback_name, *untyped args) -> untyped
48
+
49
+ def setup_shutdown_pipe: () -> [IO, IO]
50
+
51
+ def cleanup_shutdown_pipe: ([IO, IO]? shutdown_pipe) -> void
52
+
53
+ def alarm_shutdown_pipe: [T] () { (IO) -> T } -> T?
54
+
55
+ def cleanup_listener: () -> void
56
+ end
57
+ end
data/sig/ssl.rbs ADDED
@@ -0,0 +1,19 @@
1
+ module WEBrick
2
+ module Config
3
+ SSL: Hash[Symbol, untyped]
4
+ end
5
+
6
+ module Utils
7
+ def self?.create_self_signed_cert: (untyped bits, untyped cn, untyped comment) -> ::Array[untyped]
8
+ end
9
+
10
+ class GenericServer
11
+ @ssl_context: OpenSSL::SSL::SSLContext?
12
+
13
+ def ssl_context: () -> OpenSSL::SSL::SSLContext?
14
+
15
+ def setup_ssl_context: (Hash[Symbol, untyped] config) -> OpenSSL::SSL::SSLContext
16
+
17
+ def ssl_servername_callback: (untyped sslsocket, ?untyped? hostname) -> untyped
18
+ end
19
+ end
data/sig/utils.rbs ADDED
@@ -0,0 +1,122 @@
1
+ module WEBrick
2
+ module Utils
3
+ #
4
+ # Sets IO operations on +io+ to be non-blocking
5
+ def self?.set_non_blocking: (IO io) -> void
6
+
7
+ #
8
+ # Sets the close on exec flag for +io+
9
+ def self?.set_close_on_exec: (IO io) -> void
10
+
11
+ #
12
+ # Changes the process's uid and gid to the ones of +user+
13
+ def self?.su: (String user) -> void
14
+
15
+ #
16
+ # The server hostname
17
+ def self?.getservername: () -> String
18
+
19
+ #
20
+ # Creates TCP server sockets bound to +address+:+port+ and returns them.
21
+ #
22
+ # It will create IPV4 and IPV6 sockets on all interfaces.
23
+ def self?.create_listeners: (String host, Integer port) -> Array[TCPServer]
24
+
25
+ #
26
+ # Characters used to generate random strings
27
+ RAND_CHARS: String
28
+
29
+ #
30
+ # Generates a random string of length +len+
31
+ def self?.random_string: (Integer len) -> String
32
+
33
+ #
34
+ # Class used to manage timeout handlers across multiple threads.
35
+ #
36
+ # Timeout handlers should be managed by using the class methods which are
37
+ # synchronized.
38
+ #
39
+ # id = TimeoutHandler.register(10, Timeout::Error)
40
+ # begin
41
+ # sleep 20
42
+ # puts 'foo'
43
+ # ensure
44
+ # TimeoutHandler.cancel(id)
45
+ # end
46
+ #
47
+ # will raise Timeout::Error
48
+ #
49
+ # id = TimeoutHandler.register(10, Timeout::Error)
50
+ # begin
51
+ # sleep 5
52
+ # puts 'foo'
53
+ # ensure
54
+ # TimeoutHandler.cancel(id)
55
+ # end
56
+ #
57
+ # will print 'foo'
58
+ #
59
+ class TimeoutHandler
60
+ @queue: Thread::Queue
61
+
62
+ @watcher: Thread?
63
+
64
+ include Singleton
65
+
66
+ #
67
+ # Mutex used to synchronize access across threads
68
+ TimeoutMutex: Thread::Mutex
69
+
70
+ #
71
+ # Registers a new timeout handler
72
+ #
73
+ # +time+:: Timeout in seconds
74
+ # +exception+:: Exception to raise when timeout elapsed
75
+ def self.register: (Numeric seconds, singleton(Exception) exception) -> Integer
76
+
77
+ #
78
+ # Cancels the timeout handler +id+
79
+ def self.cancel: (Integer id) -> bool
80
+
81
+ def self.terminate: () -> Thread?
82
+
83
+ #
84
+ # Creates a new TimeoutHandler. You should use ::register and ::cancel
85
+ # instead of creating the timeout handler directly.
86
+ def initialize: () -> void
87
+
88
+ private
89
+
90
+ def watch: () -> bot
91
+
92
+ def watcher: () -> Thread
93
+
94
+ public
95
+
96
+ #
97
+ # Interrupts the timeout handler +id+ and raises +exception+
98
+ def interrupt: (Thread thread, Integer id, singleton(Exception) exception) -> nil
99
+
100
+ #
101
+ # Registers a new timeout handler
102
+ #
103
+ # +time+:: Timeout in seconds
104
+ # +exception+:: Exception to raise when timeout elapsed
105
+ def register: (Thread thread, Numeric time, singleton(Exception) exception) -> Integer
106
+
107
+ #
108
+ # Cancels the timeout handler +id+
109
+ def cancel: (Thread thread, Integer id) -> bool
110
+
111
+ #
112
+ def terminate: () -> Thread?
113
+ end
114
+
115
+ #
116
+ # Executes the passed block and raises +exception+ if execution takes more
117
+ # than +seconds+.
118
+ #
119
+ # If +seconds+ is zero or nil, simply executes the block
120
+ def self?.timeout: [T] (Numeric? seconds, ?singleton(Exception) exception) { (?Numeric) -> T } -> T
121
+ end
122
+ end
data/sig/version.rbs ADDED
@@ -0,0 +1,3 @@
1
+ module WEBrick
2
+ VERSION: String
3
+ end