mlserver 1.0.0 → 1.0.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.
- checksums.yaml +4 -4
- data/bin/mlserver +13 -0
- data/lib/MLserver/error_response.rb +2 -1
- data/lib/MLserver/html/default_response_footer.template.html +5 -0
- data/lib/MLserver/html/error_page.template.html +1 -0
- data/lib/MLserver/server.rb +87 -27
- data/lib/MLserver/settings.rb +11 -5
- data/lib/MLserver.rb +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 565870637b0850519fc89c56d3aa2dbf8a400d26577440d81b1db195ce4eae78
|
4
|
+
data.tar.gz: 8632c4624dcd90c02a76ba2437a92ca74d3fa4d93c709f3e75b0332f0f5b668b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: beb25988af8aeda7895d8fbc794c1cf9f4c3d6b9efc32ad9886bf09534eff26c525d0d2a5108d34d0d265029524d3c9a4615fc1d36df7ad2420dc0e450ea9d89
|
7
|
+
data.tar.gz: a07ce050c8f7efd559218c5ed1ca9f852aa582cb0186ff35f7ac644e3dedc0849fda84d0cabbf4dbff9bf6a4b4d035f257b7a509eee7e7128b4fa35eac4f3e54
|
data/bin/mlserver
CHANGED
@@ -1,3 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "MLserver"
|
4
|
+
require "argparse"
|
5
|
+
|
6
|
+
MLserver.settings = MLserver::Settings.new()
|
7
|
+
|
8
|
+
o = {}
|
9
|
+
s = {}
|
10
|
+
|
11
|
+
x = ArgsParser::Args.new(options: o, switches: s)
|
12
|
+
|
13
|
+
conf_file = x.data[0]
|
14
|
+
require_relative conf_file
|
15
|
+
|
16
|
+
MLserver::Server.start()
|
@@ -54,7 +54,8 @@ module MLserver
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def html_page
|
57
|
-
|
57
|
+
footer = File.read(File.dirname(__FILE__) + "/html/default_response_footer.template.html").gsub("[ver]", MLserver.version).gsub("[date]", Time.now.to_s)
|
58
|
+
return File.read(File.dirname(__FILE__) + "/html/error_page.template.html").gsub("[ecode]", @code.to_s).gsub("[emsg]", @message).gsub("[ftr]", footer)
|
58
59
|
end
|
59
60
|
end
|
60
61
|
end
|
data/lib/MLserver/server.rb
CHANGED
@@ -7,54 +7,114 @@ module MLserver
|
|
7
7
|
|
8
8
|
host = settings.host
|
9
9
|
port = settings.port
|
10
|
+
ssl_host = settings.ssl_host
|
11
|
+
ssl_port = settings.ssl_port
|
10
12
|
handler = settings.handler
|
11
13
|
logger = settings.logger
|
12
14
|
|
13
15
|
logger.log "MLserver #{MLserver.version}"
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
+
http_server = TCPServer.new(host, port)
|
17
18
|
logger.log "Listening on #{logger.format_ip_address host}:#{port}"
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
if settings.ssl
|
21
|
+
ssl_context = OpenSSL::SSL::SSLContext.new
|
22
|
+
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open(settings.ssl_cert).read)
|
23
|
+
ssl_context.key = OpenSSL::PKey::RSA.new(File.open(settings.ssl_key).read)
|
24
|
+
|
25
|
+
store = OpenSSL::X509::Store.new
|
26
|
+
settings.ssl_additional_certs.each do |c|
|
27
|
+
store.add_cert(OpenSSL::X509::Certificate.new(File.open(c).read))
|
28
|
+
end
|
23
29
|
|
24
|
-
|
30
|
+
ssl_context.cert_store = store
|
25
31
|
|
26
|
-
|
27
|
-
client_ip = client.peeraddr[2]
|
32
|
+
tcp_server = TCPServer.new(ssl_host, ssl_port)
|
28
33
|
|
29
|
-
|
30
|
-
|
31
|
-
|
34
|
+
ssl_server = OpenSSL::SSL::SSLServer.new(tcp_server, ssl_context)
|
35
|
+
logger.log "Listening with SSL on #{logger.format_ip_address ssl_host}:#{ssl_port}"
|
36
|
+
end
|
32
37
|
|
33
|
-
|
38
|
+
if settings.ssl
|
39
|
+
Thread.new do
|
40
|
+
loop do
|
41
|
+
begin
|
42
|
+
client = ssl_server.accept
|
43
|
+
rescue OpenSSL::SSL::SSLError => e
|
44
|
+
logger.log "SSL error occured: #{e}", :error
|
45
|
+
client.close if client
|
46
|
+
next
|
34
47
|
end
|
35
48
|
|
36
|
-
|
37
|
-
|
38
|
-
r.respond ErrorResponse.new(400).response
|
39
|
-
client.close
|
40
|
-
Thread.exit
|
41
|
-
elsif settings.force_host
|
42
|
-
if !settings.force_host.include?(r.headers[:Host])
|
43
|
-
r.respond ErrorResponse.new(400).response
|
44
|
-
client.close
|
45
|
-
Thread.exit
|
46
|
-
end
|
47
|
-
end
|
49
|
+
Thread.start(client) do |client|
|
50
|
+
self.handle_client client
|
48
51
|
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
loop do
|
57
|
+
begin
|
58
|
+
client = http_server.accept
|
59
|
+
rescue OpenSSL::SSL::SSLError => e
|
60
|
+
logger.log "SSL error occured: #{e}", :error
|
61
|
+
client.close if client
|
62
|
+
next
|
63
|
+
end
|
64
|
+
|
65
|
+
Thread.start(client) do |client|
|
66
|
+
self.handle_client client
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.handle_client(client)
|
72
|
+
settings = MLserver.settings
|
73
|
+
|
74
|
+
logger = MLserver.settings.logger
|
75
|
+
handler = MLserver.settings.handler
|
76
|
+
|
77
|
+
loop do
|
78
|
+
r=RequestParser.parse_request(client)
|
49
79
|
|
50
|
-
|
80
|
+
logger.log_traffic client.peeraddr[2], :incoming, "#{r.method} #{r.path} #{r.httpver}"
|
51
81
|
|
52
|
-
|
82
|
+
if !@@valid_http_versions.include?(r.httpver)
|
83
|
+
client_ip = client.peeraddr[2]
|
84
|
+
|
85
|
+
resp = MLserver::ErrorResponse.new(505)
|
86
|
+
r.respond resp.response
|
87
|
+
client.close
|
88
|
+
|
89
|
+
Thread.exit
|
90
|
+
end
|
91
|
+
|
92
|
+
if r.httpver == "HTTP/1.1"
|
93
|
+
if !r.headers[:Host]
|
94
|
+
r.respond ErrorResponse.new(400).response
|
95
|
+
client.close
|
96
|
+
Thread.exit
|
97
|
+
elsif settings.force_host
|
98
|
+
if !settings.force_host.include?(r.headers[:Host])
|
99
|
+
r.respond ErrorResponse.new(400).response
|
53
100
|
client.close
|
54
101
|
Thread.exit
|
55
102
|
end
|
56
103
|
end
|
57
104
|
end
|
105
|
+
|
106
|
+
begin
|
107
|
+
handler.run(r, client)
|
108
|
+
rescue => e
|
109
|
+
r.respond ErrorResponse.new(500).response
|
110
|
+
logger.log "An error occured: #{e.message}", :error
|
111
|
+
raise e
|
112
|
+
end
|
113
|
+
|
114
|
+
if r.httpver == "HTTP/1.0" || r.headers[:Connection] == "close"
|
115
|
+
client.close
|
116
|
+
Thread.exit
|
117
|
+
end
|
58
118
|
end
|
59
119
|
end
|
60
120
|
end
|
data/lib/MLserver/settings.rb
CHANGED
@@ -2,15 +2,21 @@ module MLserver
|
|
2
2
|
@@settings = nil
|
3
3
|
|
4
4
|
class Settings
|
5
|
-
def initialize(host: "0.0.0.0", port: "5555"
|
5
|
+
def initialize(host: "0.0.0.0", port: "5555")
|
6
6
|
@host = host
|
7
7
|
@port = port.to_i
|
8
|
-
@handler =
|
9
|
-
@logger =
|
10
|
-
@force_host =
|
8
|
+
@handler = nil
|
9
|
+
@logger = nil
|
10
|
+
@force_host = nil
|
11
|
+
@ssl = nil
|
12
|
+
@ssl_key = nil
|
13
|
+
@ssl_cert = nil
|
14
|
+
@ssl_additional_certs = []
|
15
|
+
@ssl_host = nil
|
16
|
+
@ssl_port = nil
|
11
17
|
end
|
12
18
|
|
13
|
-
attr_accessor :host, :port, :handler, :logger, :force_host
|
19
|
+
attr_accessor :host, :port, :handler, :logger, :force_host, :ssl, :ssl_key, :ssl_cert, :ssl_additional_certs, :ssl_host, :ssl_port
|
14
20
|
end
|
15
21
|
|
16
22
|
def self.settings
|
data/lib/MLserver.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module MLserver
|
2
2
|
def self.version
|
3
|
-
"1.0.
|
3
|
+
"1.0.1"
|
4
4
|
end
|
5
5
|
end
|
6
6
|
|
7
7
|
require "socket"
|
8
8
|
require "rbtext"
|
9
9
|
require "rbtext/string_methods"
|
10
|
+
require "openssl"
|
10
11
|
require_relative "MLserver/request.rb"
|
11
12
|
require_relative "MLserver/request_parser.rb"
|
12
13
|
require_relative "MLserver/response.rb"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mlserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: argparse
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/MLserver.rb
|
50
50
|
- lib/MLserver/client_handler.rb
|
51
51
|
- lib/MLserver/error_response.rb
|
52
|
+
- lib/MLserver/html/default_response_footer.template.html
|
52
53
|
- lib/MLserver/html/error_page.template.html
|
53
54
|
- lib/MLserver/logger.rb
|
54
55
|
- lib/MLserver/redirect_response.rb
|