making sure keys are valid

This commit is contained in:
Jeff Lindsay 2010-05-12 16:16:03 -07:00
parent 4c81112eb8
commit 727cb11381
3 changed files with 14 additions and 5 deletions

View File

@ -9,6 +9,6 @@ Echoe.new('localtunnel', '0.1') do |p|
p.email = "jeff.lindsay@twilio.com"
p.ignore_pattern = ["tmp/*", "script/*"]
p.executable_pattern = ["bin/*"]
p.runtime_dependencies = ["json >=1.2.4", "httpclient >=2.1.5.2", "net-ssh >=2.0.22", "net-ssh-gateway >=1.0.1"]
p.runtime_dependencies = ["json >=1.2.4", "net-ssh >=2.0.22", "net-ssh-gateway >=1.0.1"]
p.development_dependencies = []
end

View File

@ -33,12 +33,17 @@ require 'json'
def register_tunnel(key=nil)
url = URI.parse("http://open.localtunnel.com/")
if key
return JSON.parse(Net::HTTP.post_form(url, {"key" => key}).body)
resp = JSON.parse(Net::HTTP.post_form(url, {"key" => key}).body)
else
return JSON.parse(Net::HTTP.get(url))
resp = JSON.parse(Net::HTTP.get(url))
end
if resp.has_key? 'error'
puts " [Error] #{resp['error']}"
exit
end
return resp
rescue
puts " Unable to register tunnel. Perhaps service is down?"
puts " [Error] Unable to register tunnel. Perhaps service is down?"
exit
end

View File

@ -12,6 +12,7 @@ AUTHORIZED_KEYS = '/home/localtunnel/.ssh/authorized_keys'
PORT_RANGE = [32000, 64000]
BANNER = "This localtunnel service is brought to you by Twilio."
SSH_OPTIONS = 'command="/bin/echo Shell access denied",no-agent-forwarding,no-pty,no-user-rc,no-X11-forwarding '
KEY_REGEX = re.compile(r'^ssh-(\w{3}) [^\n]+$')
def port_available(port):
try:
@ -54,6 +55,8 @@ class LocalTunnelReverseProxy(proxy.ReverseProxyResource):
del self.tunnels[name]
def install_key(self, key):
if not KEY_REGEX.match(key.strip()):
return False
key = ''.join([SSH_OPTIONS, key.strip(), "\n"])
fr = open(AUTHORIZED_KEYS, 'r')
if not key in fr.readlines():
@ -61,9 +64,10 @@ class LocalTunnelReverseProxy(proxy.ReverseProxyResource):
fa.write(key)
fa.close()
fr.close()
return True
def register_tunnel(self, superhost, key=None):
if key: self.install_key(key)
if key and not self.install_key(key): return simplejson.dumps(dict(error="Invalid key."))
name = self.find_tunnel_name()
port = self.find_tunnel_port()
self.tunnels[name] = port