Created
February 23, 2019 07:30
-
-
Save setomits/7af5df74114aa1e4a46c98b0b6511c1b to your computer and use it in GitHub Desktop.
Authorization for WebSockets with Flask-Sockets
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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