lib/envoy/server/trunk.rb in envoy-proxy-0.0.10 vs lib/envoy/server/trunk.rb in envoy-proxy-0.0.11
- old
+ new
@@ -31,28 +31,44 @@
def receive_stream id, data
channels[id].web.send_data data
end
+ def key
+ @options[:key]
+ end
+
+ def halt
+ send_object :halt
+ close_connection(true)
+ end
+
def receive_options options
@options = options
hosts = @options[:hosts] || []
- hosts.delete_if do |label|
+ hosts.any? do |label|
if label == "s"
- send_object :message, "`s' is a reserved label"
+ send_object :message, "#{label}: label is reserved"
true
elsif label =~ /\./
- send_object :message, "labels may not contain dots"
+ send_object :message, "#{label}: labels may not contain dots"
true
+ elsif other_trunk = Trunk.trunks[label][0]
+ unless other_trunk.key == key
+ send_object :message, "#{label}: label in use, and you don't have the key"
+ true
+ end
end
- end
+ end && halt
hosts << SecureRandom.random_number(36 ** 4).to_s(36) if hosts.empty?
- m = ["Local server on port #{options[:local_port]} is now publicly available via:"]
+ m = ["#{options[:local_host]}:#{options[:local_port]} now available at:"]
@hosts = hosts.each do |host|
Trunk.trunks[host] << self
m << "http://#{host}.#{$zone}/"
end
- send_object :message, m.join("\n")
+ @options[:key] ||= SecureRandom.hex(8)
+ send_object :message, m.join(" ")
+ send_object :message, "Your key is #{@options[:key]}"
end
def unbind
hosts.each do |host|
Trunk.trunks[host].delete self