fixed conflict

This commit is contained in:
mdipierro
2014-10-16 15:47:57 -05:00
+28 -11
View File
@@ -70,8 +70,8 @@ Here is a complete sample web2py action:
'http://127.0.0.1:8888', form.vars.message, 'mykey', 'mygroup') 'http://127.0.0.1:8888', form.vars.message, 'mykey', 'mygroup')
return form return form
https is possible too using 'https://127.0.0.1:8888' instead of 'http://127.0.0.1:8888', https is possible too using 'https://127.0.0.1:8888' instead of 'http://127.0.0.1:8888', but need to
but needs to be started with be started with
python gluon/contrib/websocket_messaging.py -k mykey -p 8888 -s keyfile.pem -c certfile.pem python gluon/contrib/websocket_messaging.py -k mykey -p 8888 -s keyfile.pem -c certfile.pem
@@ -113,7 +113,7 @@ class PostHandler(tornado.web.RequestHandler):
""" """
def post(self): def post(self):
if hmac_key and not 'signature' in self.request.arguments: if hmac_key and not 'signature' in self.request.arguments:
return None self.send_error(401)
if 'message' in self.request.arguments: if 'message' in self.request.arguments:
message = self.request.arguments['message'][0] message = self.request.arguments['message'][0]
group = self.request.arguments.get('group', ['default'])[0] group = self.request.arguments.get('group', ['default'])[0]
@@ -121,11 +121,9 @@ class PostHandler(tornado.web.RequestHandler):
if hmac_key: if hmac_key:
signature = self.request.arguments['signature'][0] signature = self.request.arguments['signature'][0]
if not hmac.new(hmac_key, message).hexdigest() == signature: if not hmac.new(hmac_key, message).hexdigest() == signature:
return None self.send_error(401)
for client in listeners.get(group, []): for client in listeners.get(group, []):
client.write_message(message) client.write_message(message)
return None
return 'false'
class TokenHandler(tornado.web.RequestHandler): class TokenHandler(tornado.web.RequestHandler):
@@ -136,16 +134,14 @@ class TokenHandler(tornado.web.RequestHandler):
""" """
def post(self): def post(self):
if hmac_key and not 'message' in self.request.arguments: if hmac_key and not 'message' in self.request.arguments:
return None self.send_error(401)
if 'message' in self.request.arguments: if 'message' in self.request.arguments:
message = self.request.arguments['message'][0] message = self.request.arguments['message'][0]
if hmac_key: if hmac_key:
signature = self.request.arguments['signature'][0] signature = self.request.arguments['signature'][0]
if not hmac.new(hmac_key, message).hexdigest() == signature: if not hmac.new(hmac_key, message).hexdigest() == signature:
return None self.send_error(401)
tokens[message] = None tokens[message] = None
return None
class DistributeHandler(tornado.websocket.WebSocketHandler): class DistributeHandler(tornado.websocket.WebSocketHandler):
def open(self, params): def open(self, params):
@@ -180,6 +176,13 @@ class DistributeHandler(tornado.websocket.WebSocketHandler):
client.write_message('-' + self.name) client.write_message('-' + self.name)
print '%s:DISCONNECT from %s' % (time.time(), self.group) print '%s:DISCONNECT from %s' % (time.time(), self.group)
#if your webserver is different from tornado server uncomment this
#or override using something more restrictive:
#http://tornado.readthedocs.org/en/latest/websocket.html#tornado.websocket.WebSocketHandler.check_origin
#def check_origin(self, origin):
# return True
if __name__ == "__main__": if __name__ == "__main__":
usage = __doc__ usage = __doc__
version = "" version = ""
@@ -205,6 +208,16 @@ if __name__ == "__main__":
default=False, default=False,
dest='tokens', dest='tokens',
help='require tockens to join') help='require tockens to join')
parser.add_option('-s',
'--sslkey',
default=False,
dest='keyfile',
help='require ssl keyfile full path')
parser.add_option('-c',
'--sslcert',
default=False,
dest='certfile',
help='require ssl certfile full path')
(options, args) = parser.parse_args() (options, args) = parser.parse_args()
hmac_key = options.hmac_key hmac_key = options.hmac_key
DistributeHandler.tokens = options.tokens DistributeHandler.tokens = options.tokens
@@ -213,6 +226,10 @@ if __name__ == "__main__":
(r'/token', TokenHandler), (r'/token', TokenHandler),
(r'/realtime/(.*)', DistributeHandler)] (r'/realtime/(.*)', DistributeHandler)]
application = tornado.web.Application(urls, auto_reload=True) application = tornado.web.Application(urls, auto_reload=True)
http_server = tornado.httpserver.HTTPServer(application) if options.keyfile and options.certfile:
ssl_options = dict(certfile=options.certfile, keyfile=options.keyfile)
else:
ssl_options = None
http_server = tornado.httpserver.HTTPServer(application, ssl_options=ssl_options)
http_server.listen(int(options.port), address=options.address) http_server.listen(int(options.port), address=options.address)
tornado.ioloop.IOLoop.instance().start() tornado.ioloop.IOLoop.instance().start()