fluent-plugin-http-pull 0.7.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -1
- data/.gitignore +8 -8
- data/.travis.yml +10 -10
- data/Gemfile +3 -3
- data/LICENSE +202 -202
- data/README.md +227 -204
- data/Rakefile +24 -24
- data/appveyor.yml +23 -23
- data/fluent-plugin-http-pull.gemspec +33 -33
- data/lib/fluent/plugin/in_http_pull.rb +168 -147
- data/test/helper.rb +29 -29
- data/test/helper/.ssl/README +25 -0
- data/test/helper/.ssl/server.crt +19 -0
- data/test/helper/.ssl/server.csr +16 -0
- data/test/helper/.ssl/server.key +27 -0
- data/test/helper/.ssl/server.key.org +30 -0
- data/test/helper/stub_proxy.rb +39 -39
- data/test/helper/stub_server.rb +134 -119
- data/test/plugin/test_in_http_pull.rb +92 -71
- data/test/plugin/test_in_http_pull_auth.rb +116 -116
- data/test/plugin/test_in_http_pull_basic.rb +228 -227
- data/test/plugin/test_in_http_pull_http_header.rb +126 -126
- data/test/plugin/test_in_http_pull_proxy.rb +119 -119
- data/test/plugin/test_in_http_pull_request_method.rb +79 -79
- data/test/plugin/test_in_http_pull_ssl.rb +173 -0
- metadata +14 -2
@@ -0,0 +1,25 @@
|
|
1
|
+
# 1. Generate a Private Key
|
2
|
+
|
3
|
+
```
|
4
|
+
openssl genrsa -aes128 -out server.key 2048
|
5
|
+
Enter pass phrase : 3939
|
6
|
+
```
|
7
|
+
|
8
|
+
# 2. Generate a CSR (Certificate Signing Request)
|
9
|
+
|
10
|
+
```
|
11
|
+
openssl req -new -key server.key -out server.csr
|
12
|
+
```
|
13
|
+
|
14
|
+
# 3. Remove Passphrase from Key
|
15
|
+
|
16
|
+
```
|
17
|
+
cp server.key server.key.org
|
18
|
+
openssl rsa -in server.key.org -out server.key
|
19
|
+
```
|
20
|
+
|
21
|
+
# 4. Generating a Self-Signed Certificate
|
22
|
+
|
23
|
+
```
|
24
|
+
openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt
|
25
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDLDCCAhQCCQCv3Q6dwIpcDDANBgkqhkiG9w0BAQsFADBXMQswCQYDVQQGEwJK
|
3
|
+
UDEOMAwGA1UECAwFVG9reW8xDjAMBgNVBAcMBVRva3lvMRQwEgYDVQQKDAtIYXRz
|
4
|
+
dW5lTWlrdTESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE4MDUyNzA0MDcyN1oYDzIx
|
5
|
+
MTgwNTAzMDQwNzI3WjBXMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xDjAM
|
6
|
+
BgNVBAcMBVRva3lvMRQwEgYDVQQKDAtIYXRzdW5lTWlrdTESMBAGA1UEAwwJbG9j
|
7
|
+
YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv1ChrQuEuVEA
|
8
|
+
2KdEfWbfZ2b+vj7g878AIrVCR6cuc5YzLb79lvJ8lWr9SzuGsiNir+z/1up/dnPf
|
9
|
+
kdnAK9zm3rnAVkgGGM0WG+uEwOhXRe1yGb2PNMDzj0XzfE77QI6b+SyiHG6FpDrD
|
10
|
+
sztI9GfyU+dJNxP8ygyJ5Xq7XKlOZ7emW9ceq0I4eNEXmuCriS5zHJr+G61plnX5
|
11
|
+
vANmalVumKH0nkKAjQxxvs8jlUVO2KESUPq8sSiO1ijBw+aTOTY5qryRCRlNzvzb
|
12
|
+
uCE8e2FPKogbmO/O9wyL1vW2q9RQFFvg06X6Qf46oQGrisAua8HE7Ny5LoDXaB7N
|
13
|
+
lM9dNZ8M/QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCouD3GnuDy3j/aliTIDIMh
|
14
|
+
nOHV6maXlJZYki26/HFdaLiLwM1+ghgMtVpRd/JY3w4H7tAz2x7Db5ZKvrCupdpN
|
15
|
+
rUvCYAk24ZE34s7WktS+OondzSjLCuVseHUBVHIDbpH9yGHRwZ4fm7jaVXq5wpJy
|
16
|
+
8zKGMBZJH7omNyeV3ulC8GemmzZNpsdy1eS1ajLf8tGUOEBW3E1h+485E4/BqOKz
|
17
|
+
uGCx8zUgmNxvUt0yUNfYcBWHL+BOr5UWwpQ/qAqx9Hubs8nD1JZNgKpILlSYjMRV
|
18
|
+
graRRhUHs95AjppvzmCds8jdAQJXgzJ0ZLiRqsKZX2WllJSvrSOZXBlrNdB5tSHa
|
19
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,16 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIICnDCCAYQCAQAwVzELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMQ4wDAYD
|
3
|
+
VQQHDAVUb2t5bzEUMBIGA1UECgwLSGF0c3VuZU1pa3UxEjAQBgNVBAMMCWxvY2Fs
|
4
|
+
aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9Qoa0LhLlRANin
|
5
|
+
RH1m32dm/r4+4PO/ACK1QkenLnOWMy2+/ZbyfJVq/Us7hrIjYq/s/9bqf3Zz35HZ
|
6
|
+
wCvc5t65wFZIBhjNFhvrhMDoV0Xtchm9jzTA849F83xO+0COm/ksohxuhaQ6w7M7
|
7
|
+
SPRn8lPnSTcT/MoMieV6u1ypTme3plvXHqtCOHjRF5rgq4kucxya/hutaZZ1+bwD
|
8
|
+
ZmpVbpih9J5CgI0Mcb7PI5VFTtihElD6vLEojtYowcPmkzk2Oaq8kQkZTc7827gh
|
9
|
+
PHthTyqIG5jvzvcMi9b1tqvUUBRb4NOl+kH+OqEBq4rALmvBxOzcuS6A12gezZTP
|
10
|
+
XTWfDP0CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAnwC2nOl/tFm47UpXmx1PF
|
11
|
+
OKLM9JD2P6r5Snp3R5u814FFIwgXJwz6+WTCQLqls28r4OTLK/W3me/m5L4GO/0U
|
12
|
+
bUsVpYrAmfEbh7DSh1J3KFf7eVTbRpxfj9SvTWXnge2yOnXjDld4iZiqA8azSGi6
|
13
|
+
YNY5K4AOw9s+y/LBYrLAm5Xa8WkPmF4Ufbf1ErpbvLGl38csJHpi4SZpXG5eVdDS
|
14
|
+
EJGJG8Tjf+EM8+VeTZ0ct63bkt9TnBgYcHurhuFRJX1thz3epkA4uQi5a8ZDcLe4
|
15
|
+
LHrHr12SyXuXFJrCT4th2itZjxRY9y8Vr5CFHtcaC7vbUVJDmX2pFRRQAD+4493/
|
16
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEpAIBAAKCAQEAv1ChrQuEuVEA2KdEfWbfZ2b+vj7g878AIrVCR6cuc5YzLb79
|
3
|
+
lvJ8lWr9SzuGsiNir+z/1up/dnPfkdnAK9zm3rnAVkgGGM0WG+uEwOhXRe1yGb2P
|
4
|
+
NMDzj0XzfE77QI6b+SyiHG6FpDrDsztI9GfyU+dJNxP8ygyJ5Xq7XKlOZ7emW9ce
|
5
|
+
q0I4eNEXmuCriS5zHJr+G61plnX5vANmalVumKH0nkKAjQxxvs8jlUVO2KESUPq8
|
6
|
+
sSiO1ijBw+aTOTY5qryRCRlNzvzbuCE8e2FPKogbmO/O9wyL1vW2q9RQFFvg06X6
|
7
|
+
Qf46oQGrisAua8HE7Ny5LoDXaB7NlM9dNZ8M/QIDAQABAoIBAQCmtMkc88OEg8w7
|
8
|
+
/Y0VxNV40eu6tSnp245vsAiATXKRr9kKzLlGlifvP1pV+xnFEkaFS/wnNxE4k4HG
|
9
|
+
IrtsvUHD5JJv3LTLWbIhRBnaytp5iY16Vo56BoR1XRvtPxl6yImrF7RvF/OGBtrO
|
10
|
+
zCMnLYigihJnVxhYq5Jhj4/CD5nNj11L+1A6wb28HHNLYvMh8QSp5+QriZ5Ehugb
|
11
|
+
a99Y5d/5JoAaDDZpUpmtOMp11pfhM3pRNa55qvckPuCTAT5xcEJbxGpIKWDK+8OL
|
12
|
+
a83mASrSPp7QRIEpKlQaQF9DoFqBZgKHYsCFebFopA5lBtqO0GlYaXJQCk3tRp5b
|
13
|
+
/JyBJzK1AoGBAN3tjqcqFKJXfAb9ovtlfjX1KMxZ2ZWwc+CeYzfNTcT42uYdqfSq
|
14
|
+
7d1RXdfZbJEpLsd+HMeUfIg/R5XWI2jIXa3Qj19LsTpOUZi6o7ceTZZgp2fCYloA
|
15
|
+
reyAEo5zxCVNjwVYrso5hFHe8nns039qkmytZCwgRuR9PEYusGnmF8rDAoGBANyv
|
16
|
+
5Aq5btqfrxv+CYmC8Wu2ghFScsxRP++IHEx7wMWfqKztTX0WbMO40/NVmRF/Ntoy
|
17
|
+
65YtixY+DpnqRD8Sd1CjfwcfqGsPLfpnVkEq2xUPmx2TIAnY1/drap70jJm1mOyd
|
18
|
+
yWxKQYwdX0ZOAPvQi+snrVQRYADuw7mCcqtTos0/AoGAG2KQAtKvfyTaeiZcMTdh
|
19
|
+
7piU8zp3HgCLHAGPbrhXy2GF6XVpnnZlKbU7pkH/Ip55VkaamIobH9jnJXcqIWjw
|
20
|
+
Hl2pA3JcqTw212jYgOUtX8wHfEdBSafhzlgzcf6ZCp1ac6dw0iVszYl8VE1D/+oP
|
21
|
+
rXdr8AH/nXxSrrpeLIMnFm8CgYEAnjnN+pJxFHahCiTdmaY0idHU965xeGRYvtiL
|
22
|
+
0Zp44DhUq4eIo0LMwJdn/3NDx/O51D/mAUquCkh8F4aLX91RhpNypBzil7/Oa1Zj
|
23
|
+
1V1wrmz9/fpaYjUCwvZU/5q+pAY7moqWu/mRfXAhuzp6IhGn//X2o+vBNWn7Eqqg
|
24
|
+
pI3Wj+kCgYArJJZOj3srjNij++FWtgBmP7/gTdIJNybkpa01ub5vBYDmi77uj0oD
|
25
|
+
zDCZMwsJ/nRJBJ4a1U7B5VSy36UJN1JvY4xriR+yaOb0ttNb+pEzjSENchsqwcez
|
26
|
+
8ogUa3vR+xMXy/wQVZrMm00cQktzQbTZI23aNIWKsevJI28wXcBbLQ==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,30 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
Proc-Type: 4,ENCRYPTED
|
3
|
+
DEK-Info: AES-128-CBC,4BBDC20C90C15D774E6E07EDEA6BC54A
|
4
|
+
|
5
|
+
/rzYRt/Z0PCttHRYiKVFxMlPjKoOlQSEiRPJKTgAGLYDsZKv4DQL9EN5cVMoSCz4
|
6
|
+
N+90H4d6ycDa+o/G2U1g79LjKa6REzelSDIjnHDOBT06c1i7859IGZLQNjcI81mW
|
7
|
+
q38exdgm4VXB9qIjHEbjM0lj6dRlbx7ebfqrNcpm42q/7QgWljjyjVTwfTz4T8CI
|
8
|
+
CPe+d7d8ukr/CCehtcP3aLOQN6rZ3fVuROdzuQ3lUEdcswbe11RTKZvmMsBLOZ2i
|
9
|
+
ws4ot/JgXkHjO1oRJk1AUq0i16p3AfQdo/jCVvverMVuuruDxBu5uMefgj03sR8G
|
10
|
+
Anh3Og8F76JGGgN6HDZmPCuW7MIt7UjV4mBCbARcNVWFEcsnYbeLqcKD6J11IbOm
|
11
|
+
niXEgWMS+b+YNCYdkbwVhAHftCvRUAaRN1kcPNuc7cX5oEXTILfYzw3cdxiugwNN
|
12
|
+
7/USXcgmH8R23sDMnZI8gJTjDmynTW8X0ftXLGPmkc6oDZGk6NfRoH9bi+Vue9kj
|
13
|
+
rjz27Gs/4j7v5s2KigMeTSqx8tCMj0TVmvE4tYjyp9R7xB5lZ4+/uPB9JRoImpAA
|
14
|
+
5MbgrnPYvyw4vchBs8CBHVG/cy0K75aKX7Efw5oUZ/NObm6cHb8EYU5ODBy08erb
|
15
|
+
40INhJDcop+YG5ElO06RzEp1CyDM/S9d3L7NatVyDS3Vkd7SKsxoqrNOJ4X+UNeO
|
16
|
+
swyfmzsXkBvV5bTAql2PPnS1fNrdsTCS1khf2Hbb1OUywAAD2IvakhTANasOcLEU
|
17
|
+
sU5Wvdqu3EEhiLsTUi0LAXU/vH1WxD0VKQiUpVSpo95Xlrz21QEFOcrEKeCByjIj
|
18
|
+
AKbYgQDI6p/6OcYIT7q7hG5BKGbskDSz+p3Bu/q68VTMzjHTtJwTj0W+46+nyu9U
|
19
|
+
Mc5DCUScNXyz8wdrZhbUh12HgyY98Yze87hJ5YKCuo2P6ylm6PNFDctRjMoBTDrX
|
20
|
+
xLvKWhH0sp8ZTi2MZVdENzuR/w9OuCstkKDvApfFdyhsqSdwW40moa4YfjQVLhgb
|
21
|
+
ZsKwZodz7fhGYkzGP8aizRJWr3gXLiwwBy+Ko20aVU+8hQmcT6OUV/B5gINY0m7/
|
22
|
+
Bxeqjiijg7AyCO3ilh3w3LpCOr4Uk9bGQnCMHgi15vH8w9W/akbWRSxCchSwWbBX
|
23
|
+
fZG8KXSH7h9QNwq19MfHSnDd0mwt7M+oFO3EmZUDHKca5OuVWDEn3JXavQo8jRwT
|
24
|
+
yWSWFeeits6RIw/XN6c4EKtG+Y0wR1hAxlqPUq40vgEGwTBY4iLbPbgr3v6wXi0x
|
25
|
+
C054QfBigmx4yNATIB+DGGpEi3EGhfwfSaw7W7gmSL3W9XzKqr4JQBe6azMYWFGF
|
26
|
+
COZe6FqnKEUJq/5HqChWNvhHl8kic72sjD/fIIadSAVEZ1/e4XegL7GQ7dckyGV6
|
27
|
+
zKZhtLI+jfiFc5Lcr8wPwvoxb3ez1mAq9MOl77mQGMRDSq+JTnUeG5COt6Gjka9Q
|
28
|
+
9iqaePPF+rRz65jfYS9FJWI6eL1WyPXu61mbjhkWcnC8GTSBeVNsSXl27m1QIKUv
|
29
|
+
ftiF57yNlZzxf4wWzbqsRZHbwcC/pEXMwHK415am3yL0sJE8bqtGcz+V6CXXKrFV
|
30
|
+
-----END RSA PRIVATE KEY-----
|
data/test/helper/stub_proxy.rb
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
require 'webrick'
|
2
|
-
require 'webrick/httpproxy'
|
3
|
-
|
4
|
-
class StubProxy
|
5
|
-
def initialize
|
6
|
-
create_proxy
|
7
|
-
end
|
8
|
-
|
9
|
-
def start
|
10
|
-
@thread = Thread.new { @proxy.start }
|
11
|
-
end
|
12
|
-
|
13
|
-
def shutdown
|
14
|
-
@proxy.shutdown
|
15
|
-
|
16
|
-
# wait until webrick was shutting down
|
17
|
-
while true
|
18
|
-
break if @thread.status == false
|
19
|
-
|
20
|
-
# issue webrick shutdown once more
|
21
|
-
@proxy.shutdown
|
22
|
-
sleep 1
|
23
|
-
end
|
24
|
-
|
25
|
-
# then exit thread
|
26
|
-
@thread.exit
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
def create_proxy
|
31
|
-
@log_file = File.open("stub_proxy.log", "a+")
|
32
|
-
@log = WEBrick::Log.new @log_file
|
33
|
-
@access_log = [
|
34
|
-
[@log_file, WEBrick::AccessLog::COMBINED_LOG_FORMAT],
|
35
|
-
]
|
36
|
-
|
37
|
-
@proxy = WEBrick::HTTPProxyServer.new :Port => 4040, :Logger => @log, :AccessLog => @access_log
|
38
|
-
end
|
39
|
-
end
|
1
|
+
require 'webrick'
|
2
|
+
require 'webrick/httpproxy'
|
3
|
+
|
4
|
+
class StubProxy
|
5
|
+
def initialize
|
6
|
+
create_proxy
|
7
|
+
end
|
8
|
+
|
9
|
+
def start
|
10
|
+
@thread = Thread.new { @proxy.start }
|
11
|
+
end
|
12
|
+
|
13
|
+
def shutdown
|
14
|
+
@proxy.shutdown
|
15
|
+
|
16
|
+
# wait until webrick was shutting down
|
17
|
+
while true
|
18
|
+
break if @thread.status == false
|
19
|
+
|
20
|
+
# issue webrick shutdown once more
|
21
|
+
@proxy.shutdown
|
22
|
+
sleep 1
|
23
|
+
end
|
24
|
+
|
25
|
+
# then exit thread
|
26
|
+
@thread.exit
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def create_proxy
|
31
|
+
@log_file = File.open("stub_proxy.log", "a+")
|
32
|
+
@log = WEBrick::Log.new @log_file
|
33
|
+
@access_log = [
|
34
|
+
[@log_file, WEBrick::AccessLog::COMBINED_LOG_FORMAT],
|
35
|
+
]
|
36
|
+
|
37
|
+
@proxy = WEBrick::HTTPProxyServer.new :Port => 4040, :Logger => @log, :AccessLog => @access_log
|
38
|
+
end
|
39
|
+
end
|
data/test/helper/stub_server.rb
CHANGED
@@ -1,119 +1,134 @@
|
|
1
|
-
require 'webrick'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
res
|
10
|
-
res
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
@server.mount_proc '/
|
25
|
-
@server.mount_proc '/
|
26
|
-
@server.mount_proc '/
|
27
|
-
|
28
|
-
@server.mount_proc '/
|
29
|
-
@server.
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
@
|
34
|
-
end
|
35
|
-
|
36
|
-
def
|
37
|
-
@server.
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
@
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
res.
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
1
|
+
require 'webrick'
|
2
|
+
require 'webrick/https'
|
3
|
+
|
4
|
+
class DeleteService < WEBrick::HTTPServlet::AbstractServlet
|
5
|
+
def service(req, res)
|
6
|
+
if req.request_method != "DELETE"
|
7
|
+
res.status = 405
|
8
|
+
else
|
9
|
+
res.status = 200
|
10
|
+
res['Content-Type'] = 'application/json'
|
11
|
+
res.body = '{ "status": "OK" }'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class StubServer
|
17
|
+
def initialize(port=3939, ssl_enable=false)
|
18
|
+
@port = port
|
19
|
+
@ssl_enable = ssl_enable
|
20
|
+
|
21
|
+
create_server
|
22
|
+
|
23
|
+
# mount handler
|
24
|
+
@server.mount_proc '/', &method(:ok)
|
25
|
+
@server.mount_proc '/not_exist', &method(:not_exist)
|
26
|
+
@server.mount_proc '/timeout', &method(:timeout)
|
27
|
+
@server.mount_proc '/internal_error', &method(:internal_error)
|
28
|
+
@server.mount_proc '/redirect', &method(:redirect)
|
29
|
+
@server.mount_proc '/protected', &method(:protected)
|
30
|
+
@server.mount_proc '/custom_header', &method(:custom_header)
|
31
|
+
|
32
|
+
@server.mount_proc '/method_post', &method(:method_post)
|
33
|
+
@server.mount '/method_delete', DeleteService
|
34
|
+
end
|
35
|
+
|
36
|
+
def start
|
37
|
+
@thread = Thread.new { @server.start }
|
38
|
+
end
|
39
|
+
|
40
|
+
def shutdown
|
41
|
+
@server.shutdown
|
42
|
+
|
43
|
+
# wait until webrick was shutting down
|
44
|
+
while true
|
45
|
+
break if @thread.status == false
|
46
|
+
|
47
|
+
# issue webrick shutdown once more
|
48
|
+
@server.shutdown
|
49
|
+
sleep 1
|
50
|
+
end
|
51
|
+
|
52
|
+
# then exit thread
|
53
|
+
@thread.exit
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def create_server
|
58
|
+
@log_file = File.open("stub_server.log", "a+")
|
59
|
+
@log = WEBrick::Log.new @log_file
|
60
|
+
@access_log = [
|
61
|
+
[@log_file, WEBrick::AccessLog::COMBINED_LOG_FORMAT],
|
62
|
+
]
|
63
|
+
|
64
|
+
|
65
|
+
if @ssl_enable
|
66
|
+
ssl_basepath = File.join(File.dirname(__FILE__), ".ssl")
|
67
|
+
@server = WEBrick::HTTPServer.new :Port => @port,
|
68
|
+
:SSLEnable => true,
|
69
|
+
:Logger => @log, :AccessLog => @access_log,
|
70
|
+
:SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open(File.join(ssl_basepath, "server.key")).read),
|
71
|
+
:SSLCertificate => OpenSSL::X509::Certificate.new(File.open(File.join(ssl_basepath, "server.crt")).read),
|
72
|
+
:SSLCertName => [["CN", "localhost"]]
|
73
|
+
else
|
74
|
+
@server = WEBrick::HTTPServer.new :Port => @port,
|
75
|
+
:Logger => @log, :AccessLog => @access_log
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def ok(req, res)
|
80
|
+
res.status = 200
|
81
|
+
res['Content-Type'] = 'application/json'
|
82
|
+
res.body = '{ "status": "OK" }'
|
83
|
+
end
|
84
|
+
|
85
|
+
def not_exist(req, res)
|
86
|
+
res.status = 404
|
87
|
+
res.body = ''
|
88
|
+
end
|
89
|
+
|
90
|
+
def timeout(req, res)
|
91
|
+
sleep 3
|
92
|
+
|
93
|
+
res.status = 200
|
94
|
+
res['Content-Type'] = 'application/json'
|
95
|
+
res.body = '{ "status": "OK" }'
|
96
|
+
end
|
97
|
+
|
98
|
+
def internal_error(req, res)
|
99
|
+
res.status = 500
|
100
|
+
res.body = ''
|
101
|
+
end
|
102
|
+
|
103
|
+
def redirect(req, res)
|
104
|
+
res.set_redirect WEBrick::HTTPStatus::TemporaryRedirect, "http://127.0.0.1:3939/"
|
105
|
+
end
|
106
|
+
|
107
|
+
def protected(req, res)
|
108
|
+
WEBrick::HTTPAuth.basic_auth(req, res, 'protected') do |user, password|
|
109
|
+
user == 'HatsuneMiku' && password == '3939'
|
110
|
+
end
|
111
|
+
|
112
|
+
res.status = 200
|
113
|
+
res['Content-Type'] = 'application/json'
|
114
|
+
res.body = '{ "status": "OK" }'
|
115
|
+
end
|
116
|
+
|
117
|
+
def custom_header(req, res)
|
118
|
+
res.header["HATSUNE-MIKU"] = req["HATSUNE-MIKU"] if req["HATSUNE-MIKU"]
|
119
|
+
|
120
|
+
res.status = 200
|
121
|
+
res['Content-Type'] = 'application/json'
|
122
|
+
res.body = '{ "status": "OK" }'
|
123
|
+
end
|
124
|
+
|
125
|
+
def method_post(req, res)
|
126
|
+
if req.request_method != "POST"
|
127
|
+
res.status = 405
|
128
|
+
else
|
129
|
+
res.status = 200
|
130
|
+
res['Content-Type'] = 'application/json'
|
131
|
+
res.body = '{ "status": "OK" }'
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|