Skip to content

Instantly share code, notes, and snippets.

@setomits
Created February 23, 2019 07:30
Show Gist options
  • Save setomits/7af5df74114aa1e4a46c98b0b6511c1b to your computer and use it in GitHub Desktop.
Save setomits/7af5df74114aa1e4a46c98b0b6511c1b to your computer and use it in GitHub Desktop.
Authorization for WebSockets with Flask-Sockets
from flask import Flask, request
from flask_sockets import Sockets
app = Flask(__name__)
sockets = Sockets(app)
@app.route('/')
def hey():
name = request.args.get('name', '')
if name:
return 'hey {}, how are you doin?'.format(name)
else:
return 'hey!'
@sockets.route('/mirror')
def mirror(ws):
# broadcasts reversed string
while not ws.closed:
message = ws.receive()[::-1]
for client in ws.handler.server.clients.values():
client.ws.send(message)
@sockets.route('/mirror_bearer')
def mirror_bearer(ws):
# checks Bearer token
# can't work with JavaScript's WebSocket API
token = request.headers.get('Authorization')
if token == 'Bearer secret_token':
print('Authorized!!')
else:
print('Bad authorization')
ws.close()
return
while not ws.closed:
message = ws.receive()[::-1]
for client in ws.handler.server.clients.values():
client.ws.send(message)
@sockets.route('/mirror_get_parameter')
def mirror_get_parameter(ws):
# receives token via GET parameter
token = request.args.get('token')
if token == 'secret_token':
print('Authorized!!')
else:
print('Bad authorization')
ws.close()
return
while not ws.closed:
message = ws.receive()[::-1]
for client in ws.handler.server.clients.values():
client.ws.send(message)
if __name__ == "__main__":
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment