-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsessions.py
executable file
·70 lines (55 loc) · 1.7 KB
/
sessions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from flask import Flask, render_template, session, request, jsonify
from flask_login import LoginManager, UserMixin, current_user, login_user, \
logout_user
from flask_session import Session
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'top-secret!'
app.config['SESSION_TYPE'] = 'filesystem'
login = LoginManager(app)
Session(app)
socketio = SocketIO(app, manage_session=False)
class User(UserMixin, object):
def __init__(self, id=None):
self.id = id
@login.user_loader
def load_user(id):
return User(id)
@app.route('/')
def index():
return render_template('sessions.html')
@app.route('/session', methods=['GET', 'POST'])
def session_access():
if request.method == 'GET':
return jsonify({
'session': session.get('value', ''),
'user': current_user.id
if current_user.is_authenticated else 'anonymous'
})
data = request.get_json()
if 'session' in data:
session['value'] = data['session']
elif 'user' in data:
if data['user']:
login_user(User(data['user']))
else:
logout_user()
return '', 204
@socketio.on('get-session')
def get_session():
emit('refresh-session', {
'session': session.get('value', ''),
'user': current_user.id
if current_user.is_authenticated else 'anonymous'
})
@socketio.on('set-session')
def set_session(data):
if 'session' in data:
session['value'] = data['session']
elif 'user' in data:
if data['user'] is not None:
login_user(User(data['user']))
else:
logout_user()
if __name__ == '__main__':
socketio.run(app)