You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.7 KiB

import json
from flask import Flask, Response, redirect, url_for, request, session, abort, render_template
from flask_login import LoginManager, UserMixin, login_required, login_user, logout_user
app = Flask(__name__)
# config
app.config.update(
DEBUG = True,
SECRET_KEY = 'secret_xxx'
)
class User(UserMixin):
def __init__(self, id):
self.id = id
with open('users.json') as jsonfile:
data = json.load(jsonfile)
self.name = data[str(id)]['name']
self.password = data[str(id)]['password']
def __repr__(self):
return "%d/%s/%s" % (self.id, self.name, self.password)
leaderboard = []
davide = {}
davide['name'] = 'Davide'
davide['score'] = 20
leaderboard.append(davide)
pawel = {}
pawel['name'] = 'Pawel'
pawel['score'] = 10
leaderboard.append(pawel)
mark = {}
mark['name'] = 'Mark'
mark['score'] = 1
leaderboard.append(mark)
sven = {}
sven['name'] = 'Sven'
sven['score'] = -5
leaderboard.append(sven)
wille = {}
wille['name'] = 'Wille'
wille['score'] = -15
leaderboard.append(wille)
c_davide = {}
c_davide['name'] = 'Davide'
c_davide['confirmed'] = 'yes'
cook = c_davide
eaters = ["Pawel", "Mark", "Sven"]
# flask-login
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"
@app.route("/")
@login_required
def index():
return render_template('index.html', leaderboard=leaderboard, cook=cook, eaters=eaters)
# somewhere to login
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
jsonfile = open('users.json')
data = json.load(jsonfile)
for i in range(1, 1 + int(data['nofusers'])):
if data[str(i)]['name'] == username and data[str(i)]['password'] == password:
id = i
jsonfile.close()
user = User(id)
login_user(user)
return redirect(request.args.get("next"))
jsonfile.close()
return abort(401)
else:
return Response('''
<form action="" method="post">
<p><input type=text name=username>
<p><input type=password name=password>
<p><input type=submit value=Login>
</form>
''')
# somewhere to logout
@app.route("/logout")
@login_required
def logout():
logout_user()
return Response('<p>Logged out</p>')
# handle login failed
@app.errorhandler(401)
def page_not_found(e):
return Response('<p>Login failed</p>')
# callback to reload the user object
@login_manager.user_loader
def load_user(userid):
return User(userid)