hosty 0.0.1 → 0.0.6
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 +5 -5
- data/.gitignore +3 -0
- data/LICENSE +1 -1
- data/README.md +21 -7
- data/config.ru +6 -1
- data/exe/hosty +29 -2
- data/hosty.gemspec +6 -4
- data/lib/hosty.rb +0 -2
- data/lib/hosty/hosts.rb +28 -11
- data/lib/hosty/version.rb +3 -0
- data/lib/hosty/virtual_hostable.rb +23 -0
- data/lib/portable_string.rb +0 -8
- metadata +33 -21
- data/lib/hosty/scheme_detectable.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e44b12f715535f0faf2337303d7fb2968487c80e833d7d012a3da68a8ac2f2d9
|
4
|
+
data.tar.gz: 927aff95eb4f69528c7a89a7a4f46e212ea480baaaddda4076833c505470de85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d560a7d74c707cfc334716b92332df421d84d2cc92eea2420f3c896658bd6725c5f1df2adc28ed4d9bc319770a3badc6226cff9bc0224639967d8ba3ce83471e
|
7
|
+
data.tar.gz: ae0200fd4da6f4895f417743d51e3e716bd813ee56fac5cbe7f5829ff6f0bbeec172cbdb21094f8bfae4bcf91dbb09b00091534561b7678301097fe6c872be33
|
data/.gitignore
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -31,16 +31,30 @@ If you have lines below in your ```/etc/hosts```:
|
|
31
31
|
127.0.0.1 rails # :3000
|
32
32
|
```
|
33
33
|
|
34
|
-
Hosty accepts ```http
|
35
|
-
into ```http
|
34
|
+
Hosty accepts ```http://internal.example.com/foo``` locally and proxies it
|
35
|
+
into ```http://internal.example.com:8080/foo``` for example.
|
36
36
|
|
37
|
-
Shortly,
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
### Use https
|
39
|
+
|
40
|
+
You can specify ```tls``` option at the end of each line:
|
41
|
+
|
42
|
+
```
|
43
|
+
127.0.0.1 internal.example.com internal # :8080 tls
|
44
|
+
```
|
45
|
+
|
46
|
+
Hosty accepts ```http://internal.example.com/foo``` and proxies into ```https://internal.example.com:8080/foo```. Also, you can spacify 'verify_none' to skip server cert verification.
|
47
|
+
|
48
|
+
```
|
49
|
+
127.0.0.1 internal.example.com internal # :8080 tls verify_none
|
50
|
+
```
|
51
|
+
|
52
|
+
**Note**
|
53
|
+
|
54
|
+
The URL scheme in your browser is always 'http'.
|
55
|
+
|
42
56
|
|
43
57
|
|
44
58
|
## Copyright and License
|
45
59
|
|
46
|
-
Copyright (c)
|
60
|
+
Copyright (c) 2021 Shintaro Kojima. Code released under the [MIT license](LICENSE).
|
data/config.ru
CHANGED
@@ -3,9 +3,14 @@ require 'hosty'
|
|
3
3
|
use Rack::ReverseProxy do
|
4
4
|
Hosty::Hosts.mapping do |map|
|
5
5
|
port = map[:port]
|
6
|
+
scheme = map[:options].include?('tls') ? 'https' : 'http'
|
7
|
+
|
8
|
+
proxy_options = {}
|
9
|
+
proxy_options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if map[:options].include?('verify_none')
|
10
|
+
|
6
11
|
|
7
12
|
map[:servers].each do |server|
|
8
|
-
reverse_proxy /(.*)/, "
|
13
|
+
reverse_proxy /(.*)/, "#{scheme}://#{server}:#{port}$1", {vhost: server}.merge(proxy_options)
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
data/exe/hosty
CHANGED
@@ -1,9 +1,36 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'optparse'
|
4
|
+
require 'pathname'
|
3
5
|
require 'rack'
|
4
6
|
|
7
|
+
$: << File.expand_path('../../lib', Pathname.new(__FILE__).realpath)
|
8
|
+
|
9
|
+
require 'hosty'
|
10
|
+
|
11
|
+
|
5
12
|
config = File.expand_path('../../config.ru', __FILE__)
|
6
13
|
|
7
|
-
|
8
|
-
|
14
|
+
opts = OptionParser.new do |opts|
|
15
|
+
opts.banner = 'hosty: /etc/hosts based tiny reverse proxy'
|
16
|
+
opts.define_head 'Usage: hosty [options]'
|
17
|
+
opts.separator ''
|
18
|
+
opts.separator 'Options:'
|
19
|
+
|
20
|
+
opts.on '-d', '--debug', 'Turn on debug mode' do
|
21
|
+
$HOSTY_DEBUG = true
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on_tail '-h', '--help', 'Show this message' do
|
25
|
+
puts opts
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on_tail '-v', '--version', 'Show version' do
|
30
|
+
puts Hosty::VERSION
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
opts.parse!
|
9
35
|
|
36
|
+
Rack::Server.start(config: config, Host: '127.0.0.1', Port: 80)
|
data/hosty.gemspec
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'hosty/version'
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
7
|
spec.name = "hosty"
|
7
|
-
spec.version =
|
8
|
+
spec.version = Hosty::VERSION
|
8
9
|
spec.authors = ["Shintaro Kojima"]
|
9
10
|
spec.email = ["goodies@codeout.net"]
|
10
11
|
|
@@ -28,10 +29,11 @@ It allows you to manage mappings of local server name and port on /etc/hosts.
|
|
28
29
|
spec.require_paths = ["lib"]
|
29
30
|
|
30
31
|
spec.add_runtime_dependency "rack-reverse-proxy"
|
32
|
+
spec.add_runtime_dependency "webrick"
|
31
33
|
|
32
|
-
spec.add_development_dependency "bundler"
|
33
|
-
spec.add_development_dependency "rake"
|
34
|
-
spec.add_development_dependency "test-unit"
|
34
|
+
spec.add_development_dependency "bundler"
|
35
|
+
spec.add_development_dependency "rake"
|
36
|
+
spec.add_development_dependency "test-unit"
|
35
37
|
|
36
38
|
spec.required_ruby_version = '>= 2.1.0'
|
37
39
|
end
|
data/lib/hosty.rb
CHANGED
data/lib/hosty/hosts.rb
CHANGED
@@ -13,19 +13,36 @@ module Hosty
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def parse(str, &block)
|
16
|
-
|
17
|
-
columns = l.split
|
18
|
-
next unless columns[0].local_address?
|
19
|
-
|
20
|
-
if columns.last.port_number?
|
21
|
-
yield servers: columns[1..-2], port: columns.last.port_number
|
22
|
-
end
|
23
|
-
end
|
16
|
+
str.each_line {|l| new(l).parse &block }
|
24
17
|
end
|
18
|
+
end
|
25
19
|
|
26
|
-
|
27
|
-
|
28
|
-
|
20
|
+
|
21
|
+
def initialize(line)
|
22
|
+
@line = line
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse(&block)
|
26
|
+
return unless content
|
27
|
+
yield content
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def content
|
34
|
+
return @content if @content
|
35
|
+
|
36
|
+
columns = @line.split
|
37
|
+
return unless columns[0] && columns[0].local_address?
|
38
|
+
|
39
|
+
mark_index = columns.index('#')
|
40
|
+
return unless mark_index
|
41
|
+
return unless columns[mark_index+1] && columns[mark_index+1].port_number?
|
42
|
+
|
43
|
+
@content = {servers: columns[1..mark_index-1],
|
44
|
+
port: columns[mark_index+1].port_number,
|
45
|
+
options: columns[mark_index+2..-1]}
|
29
46
|
end
|
30
47
|
end
|
31
48
|
end
|
@@ -1,7 +1,30 @@
|
|
1
1
|
module Hosty
|
2
2
|
module VirtualHostable
|
3
|
+
def proxy
|
4
|
+
debug "<= #{env['REQUEST_METHOD']} #{source_request.url}"
|
5
|
+
|
6
|
+
return app.call(env) if uri.nil?
|
7
|
+
return https_redirect if need_https_redirect?
|
8
|
+
|
9
|
+
setup_request
|
10
|
+
setup_response_headers
|
11
|
+
|
12
|
+
debug " -> #{env['REQUEST_METHOD']} #{uri}"
|
13
|
+
|
14
|
+
transform_response(rack_response).tap {|t|
|
15
|
+
debug " <- #{t[0]}"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
3
19
|
def rules
|
4
20
|
super.select {|r| r.options[:vhost] == env['SERVER_NAME'] }
|
5
21
|
end
|
22
|
+
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def debug(message)
|
27
|
+
puts "#{Time.now} #{message}" if $HOSTY_DEBUG
|
28
|
+
end
|
6
29
|
end
|
7
30
|
end
|
data/lib/portable_string.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hosty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shintaro Kojima
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack-reverse-proxy
|
@@ -24,48 +24,62 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: webrick
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - ">="
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - ">="
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- - "
|
59
|
+
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
61
|
+
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- - "
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: test-unit
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '0'
|
69
83
|
description: |
|
70
84
|
/etc/hosts based tiny reverse proxy.
|
71
85
|
|
@@ -93,13 +107,13 @@ files:
|
|
93
107
|
- hosty.gemspec
|
94
108
|
- lib/hosty.rb
|
95
109
|
- lib/hosty/hosts.rb
|
96
|
-
- lib/hosty/
|
110
|
+
- lib/hosty/version.rb
|
97
111
|
- lib/hosty/virtual_hostable.rb
|
98
112
|
- lib/portable_string.rb
|
99
113
|
homepage: https://github.com/codeout/hosty
|
100
114
|
licenses: []
|
101
115
|
metadata: {}
|
102
|
-
post_install_message:
|
116
|
+
post_install_message:
|
103
117
|
rdoc_options: []
|
104
118
|
require_paths:
|
105
119
|
- lib
|
@@ -114,10 +128,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
128
|
- !ruby/object:Gem::Version
|
115
129
|
version: '0'
|
116
130
|
requirements: []
|
117
|
-
|
118
|
-
|
119
|
-
signing_key:
|
131
|
+
rubygems_version: 3.2.15
|
132
|
+
signing_key:
|
120
133
|
specification_version: 4
|
121
134
|
summary: "/etc/hosts based tiny reverse proxy."
|
122
135
|
test_files: []
|
123
|
-
has_rdoc:
|