Appli_demo/app.py

147 lines
3.7 KiB
Python

from flask import Flask, request, jsonify, make_response, session, render_template, abort
from flask_restful import Api, Resource
import jwt
from datetime import datetime, timedelta
from functools import wraps
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
api = Api(app)
classes = {'1':
{
'nom': 'A1',
'nombre_eleve': '15',
'eleves': {
'1': ['Mariue', 'Julien', '12'],
'2': ['Koene', 'Morice', '13'],
'3': ['Moatir', 'Pierre', '12'],
'4': ['Poiti', 'Marc', '12'],
'5': ['Areop', 'Tome', '12'],
'6': ['Cenois', 'Louis', '13'],
'7': ['Quotine', 'Maxime', '12'],
'8': ['Reval', 'Adrien', '12'],
'9': ['Fonduri', 'Juliette', '11'],
'10': ['Graconti', 'Marie', '12'],
'11': ['Henvio', 'Louise', '12'],
'12': ['Kenano', 'Bertran', '14'],
'13': ['Vertille', 'Jean-Pierre', '12'],
'14': ['Provern', 'Jean', '14'],
'15': ['Secinoi', 'Celine', '12'],
}
},
'2':
{
'nom': 'A2',
'nombre_eleve': '5',
'eleves': {
'1': ['Benar', 'Leo', '15'],
'2': ['Grovin', 'Benois', '16'],
'3': ['Xeroi', 'Amelie', '15'],
'4': ['Amonie', 'Julien', '14'],
'5': ['Surois', 'Camille', '15']
}
}
}
def token_required(func):
@wraps(func)
def decorated(*args, **kwargs):
token = None
if 'token' in request.headers:
token = request.headers['token']
if not token:
return jsonify({'Alert!': 'Pas de Token!'})
# abort(403, 'pas de token')
try:
payload = jwt.decode(token, app.config['SECRET_KEY'])
except:
# abort(403, 'token invalid')
return make_response(jsonify({'Alert!': 'Token invalid!'}))
return func(*args, **kwargs)
return decorated
@app.route('/')
def home():
if not session.get('logged_in'):
return render_template('login.html')
else:
return 'Déjà connecté'
@app.route('/public')
def public():
return 'Vous êtes bien sur la page public !'
@app.route('/auth', methods=['GET'])
@token_required
def auth():
return 'Vous êtes bien sur la page auth !'
@app.route('/login', methods=['POST'])
def login():
if request.form['username'] and request.form['password'] == '123':
session['logged_in'] = True
token = jwt.encode({
'user': 0
# 'expiration': str(datetime.utcnow() + timedelta(seconds=30))
},
app.config['SECRET_KEY'], algorithm="HS256")
return jsonify({'token': token.decode('utf-8')})
else:
return make_response('Unable to verify', 403, {'WWW-Authenticate': 'Basic realm:"Authentication Failed!'})
class Classes(Resource):
@token_required
def get(self):
return classes
@token_required
def post(self):
return classes
api.add_resource(Classes, "/classes")
class Classe(Resource):
@token_required
def get(self, id_classe):
return classes[id_classe]
@token_required
def post(self, id_classe):
return classes[id_classe]
api.add_resource(Classe, "/classes/<string:id_classe>")
class Eleve(Resource):
@token_required
def get(self, id_classe, id_eleve):
return classes[id_classe]['eleves'][id_eleve]
@token_required
def post(self, id_classe, id_eleve):
return classes[id_classe]['eleves'][id_eleve]
api.add_resource(Eleve, "/<string:id_classe>/<string:id_eleve>")
@app.route("/reset")
def reset():
session.clear()