envoy-proxy 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b37ea6c959f8c114427789454f1b57839190d78f
4
- data.tar.gz: 5160742eaafd4c19c7dc7d5dae52ea9f778840f1
3
+ metadata.gz: 2ed79185e2aad87adb4349b67cc291736ba715e0
4
+ data.tar.gz: b4c8f976611a606f40cc4cad0b4242f0e1f8b3ee
5
5
  SHA512:
6
- metadata.gz: 7278fc984cc99dfb7761bcaf94a2a2fcef994e468ba46ea53a36976b43c5a2a57c3ad74da662cd2b0e03bf019c5dfed11f149d24e5eb19dc43056916ec9140d0
7
- data.tar.gz: fa1f633ac93d12a3a72fe71f21ef9767f80aef9677f263ce839fd24da2030c0b13fdb567a5af8add464566484a424635992f81212590a226315357149af6b24b
6
+ metadata.gz: c0041100f109dbee5cfd0d33a5eb8bffd88acda65fa810bba1c8f3ac1c184d5bcbbae50bc6bf9f535bd9ac9485a4a1a9f28b3e0a886f5b2dced6944aef5bb622
7
+ data.tar.gz: d9a0a9017b0dc3457385c9717db2ff3acf72c549cfc76a23eb43b7e8caeca06af98b8ac67ea94b07c139b47ef3379e7e5d48e832c2b27fd8e19348c5e1ab7394
@@ -33,7 +33,7 @@ def load_config
33
33
  conf["dir"] = File.expand_path(conf["dir"], path + "/..") if conf["dir"]
34
34
  end
35
35
  else
36
- [{"local_port" => "80"}]
36
+ [{}]
37
37
  end
38
38
  end
39
39
 
@@ -42,8 +42,8 @@ options = parse_options
42
42
  unless EM.reactor_running?
43
43
  EM.run do
44
44
  load_config.each do |config|
45
- config = options.merge(config)
46
- config["local_port"] ||= rand(16383) + 49152
45
+ config = config.merge(options)
46
+ config["local_port"] ||= config["command"] ? rand(16383) + 49152 : 80
47
47
  config["hosts"] ||= [config.delete("host")] if config["host"]
48
48
  config = config.each_with_object({}) do |(k, v), h|
49
49
  h[k.to_sym] = v
@@ -51,4 +51,4 @@ unless EM.reactor_running?
51
51
  Envoy::Client::Trunk.start config
52
52
  end
53
53
  end
54
- end
54
+ end
@@ -16,41 +16,39 @@ end
16
16
  def parse_options
17
17
  options = default_options
18
18
  OptionParser.new do |op|
19
- op.banner = "Usage: #{$0} [options] [[HOST:]PORT]"
20
- op.on "--host HOST", "Allocate this domain label on the proxy" do |v|
19
+ op.banner = "Usage: #{$0} [options] [[HOST:]PORT] [LABEL]"
20
+ op.on "-l LABEL", "--label", "--host", "Allocate this domain label on the proxy" do |v|
21
21
  options["hosts"] ||= []
22
22
  options["hosts"] << v
23
23
  end
24
- op.on "-k", "--key KEY" do |v|
24
+ op.on "-k KEY", "--key", "Secure access to the label with this key" do |v|
25
25
  options["key"] = v
26
26
  end
27
- op.on "-t", "--[no-]tls", "Encrypt communications with the envoy server" do |v|
28
- options["tls"] = v
29
- end
30
- op.on "-s", "--server SERVER", "Specify envoy/proxylocal server" do |v|
27
+ op.on "-s SERVER", "--server", "Specify envoy server" do |v|
31
28
  host, port = v.split(":")
32
29
  options["server_host"] = host
33
30
  options["server_port"] ||= port
34
31
  end
35
- op.on "-v", "--[no-]verbose", "Be noisy about what's happening" do |v|
36
- options["verbose"] = v
37
- end
38
- op.on "--no-log", "Don't show HTTP log" do |v|
39
- options["log"] = false
40
- end
41
- op.on "l", "--log FILE", "Write HTTP log to this file" do |v|
42
- options["log"] = v
32
+ op.on "-c COMMAND", "Run this command" do |v|
33
+ options["command"] = v
43
34
  end
44
35
  op.on "-h", "--help", "Show this message" do
45
36
  puts op
46
37
  exit
47
38
  end
48
- op.on "--version" do
39
+ op.on "-V", "--version", "Show version number" do
49
40
  puts Envoy::VERSION
50
41
  exit
51
42
  end
52
43
  op.parse!
53
44
  case ARGV[0]
45
+ when "rails"
46
+ options["pidfile"] = "tmp/pids/server.pid"
47
+ options["command"] = "rails s -p %{local_port}"
48
+ options["delay"] = 10
49
+ when "rackup"
50
+ options["command"] = "rackup -p %{local_port}"
51
+ options["delay"] = 10
54
52
  when /^(\d+)$/
55
53
  options["local_port"] = $1
56
54
  when /^(\[[^\]+]\]|[^:]+):(\d+)$/x
@@ -59,6 +57,10 @@ def parse_options
59
57
  when /^(.*)$/
60
58
  options["local_host"] = $1
61
59
  end
60
+ if ARGV[1]
61
+ options["hosts"] ||= []
62
+ options["hosts"] << ARGV[1]
63
+ end
62
64
  end
63
65
  options
64
66
  end
@@ -77,6 +77,8 @@ module Envoy
77
77
  end
78
78
  if version? "< #{Envoy::VERSION}"
79
79
  send_object :message, "Your client is out of date. Please upgrade to #{Envoy::VERSION}."
80
+ elsif version? "> #{Envoy::VERSION}"
81
+ send_object :message, "Your client is from the future. The server is expecting #{Envoy::VERSION}."
80
82
  end
81
83
  if @key and @key != @options[:key]
82
84
  halt "Key is invalid"
@@ -85,14 +87,14 @@ module Envoy
85
87
  hosts = @options[:hosts] || []
86
88
  hosts.any? do |label|
87
89
  if label == "s"
88
- send_object :message, "#{label}: label is reserved"
90
+ send_object :message, "label is reserved: `#{label}'"
89
91
  true
90
92
  elsif label =~ /\./
91
- send_object :message, "#{label}: labels may not contain dots"
93
+ send_object :message, "label is invalid: `#{label}'"
92
94
  true
93
95
  elsif other_trunk = Trunk.trunks[label][0]
94
96
  unless other_trunk.key == key
95
- send_object :message, "#{label}: label in use, and you don't have the key"
97
+ send_object :message, "label is protected with a key: `#{label}'"
96
98
  true
97
99
  end
98
100
  end
@@ -101,12 +103,11 @@ module Envoy
101
103
  m = ["#{options[:local_host]}:#{options[:local_port]} now available at:"]
102
104
  @hosts = hosts.each do |host|
103
105
  Trunk.trunks[host] << self
104
- m << "http://#{host}.#{$zone}/"
106
+ send_object :message, "host: #{host}.#{$zone}"
105
107
  end
106
- send_object :message, m.join(" ")
107
108
  unless @options[:key]
108
109
  @options[:key] ||= SecureRandom.hex(8)
109
- send_object :message, "Your key is #{@options[:key]}"
110
+ send_object :message, "key: #{@options[:key]}"
110
111
  end
111
112
  end
112
113
 
@@ -11,17 +11,24 @@ module Envoy
11
11
  @connection = "close"
12
12
  end
13
13
 
14
- def send_page status, message
14
+ def send_page status, title, message
15
15
  send_data "HTTP/1.0 #{status} Message\r\n"
16
- send_data "Content-Type: text/plain\r\n"
16
+ send_data "Content-Type: text/html\r\n"
17
17
  send_data "\r\n"
18
- send_data "#{message}\r\n"
18
+ send_data "<title>#{title}</title>\r\n"
19
+ send_data "<h1>#{title}</h1>\r\n"
20
+ send_data "<p>#{message}\r\n"
21
+ end
22
+
23
+ def fail (status, title, message)
24
+ send_page(500, title, message)
25
+ close_connection true
19
26
  end
20
27
 
21
28
  def close code
22
29
  case code
23
30
  when 502
24
- send_page code, "The service isn't running, and couldn't be started."
31
+ send_page 502, "Bad Gateway", "The service isn't running, and couldn't be started."
25
32
  end
26
33
  close_connection(true)
27
34
  end
@@ -33,7 +40,7 @@ module Envoy
33
40
  def receive_line line
34
41
  @first_line ||= line
35
42
  if line == ""
36
- trunk = Trunk.trunks[@host].sample || raise("No trunk for #{@host}.#{$zone}")
43
+ trunk = Trunk.trunks[@host].sample || (return fail(404, "Not Found", "No trunk for #{@host}.#{$zone}"))
37
44
  @header << "Connection: #{@connection}\r\n\r\n"
38
45
  @channel = Channel.new(trunk, self, @header)
39
46
  @channel.message "%s %s" % [Socket.unpack_sockaddr_in(get_peername)[1], @first_line]
@@ -48,12 +55,12 @@ module Envoy
48
55
  @host = @host.split(".").last
49
56
  @header << line + "\r\n"
50
57
  elsif @header.size > 4096
51
- raise "Header's too long for my liking"
58
+ return fail(400, "Bad Request", "Header's too long for my liking")
52
59
  else
53
60
  @header << line + "\r\n"
54
61
  end
55
62
  rescue RuntimeError => e
56
- send_page 500, e.inspect
63
+ send_page 500, "Internal Server Error", e.inspect
57
64
  close_connection true
58
65
  end
59
66
 
data/lib/envoy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Envoy
2
- VERSION = '0.1.5'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envoy-proxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Baum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-03 00:00:00.000000000 Z
11
+ date: 2014-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bert
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description:
@@ -75,7 +75,7 @@ executables:
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - .gitignore
78
+ - ".gitignore"
79
79
  - Gemfile
80
80
  - LICENSE.txt
81
81
  - README.md
@@ -103,17 +103,17 @@ require_paths:
103
103
  - lib
104
104
  required_ruby_version: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - '>='
106
+ - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  required_rubygems_version: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - '>='
111
+ - - ">="
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
- rubygems_version: 2.0.3
116
+ rubygems_version: 2.2.2
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: Proxy your local web-server and make it publicly available over the internet