making sure keys are valid
This commit is contained in:
parent
4c81112eb8
commit
727cb11381
2
Rakefile
2
Rakefile
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue