ajout de la route /api/utilisateurs/uploadImage pour uploader une photo de profil de chaque utilisateur
This commit is contained in:
+75
-8
@@ -29,7 +29,8 @@ import uuid
|
||||
import datetime
|
||||
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.exceptions import HTTPException
|
||||
from werkzeug.exceptions import HTTPException, RequestEntityTooLarge
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
import jwt
|
||||
|
||||
@@ -127,6 +128,11 @@ app.config["JWT_ACCESS_TOKEN_EXPIRES"] = datetime.timedelta(hours=1)
|
||||
# This should always be True in production
|
||||
app.config["JWT_COOKIE_CSRF_PROTECT"] = False
|
||||
|
||||
UPLOAD_FOLDER = 'static/img'
|
||||
ALLOWED_EXTENSIONS = {'png', 'jpg', 'gif', 'jpeg'}
|
||||
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
|
||||
app.config['MAX_CONTENT_LENGTH'] = 1 * 1000 * 1000 # 1 megabytes
|
||||
|
||||
jwt = JWTManager(app)
|
||||
|
||||
def dbmanage(func):
|
||||
@@ -243,7 +249,7 @@ def add_user():
|
||||
# Test si l'utilisateur courant est actif et Admin ou pas
|
||||
if not current_user["Actif"] and current_user["Role"] != 'Administrateur':
|
||||
db.disconnect()
|
||||
abort(403)
|
||||
abort(403, description='Utilisateur non autorisé')
|
||||
|
||||
# recuperation des attributs (JSON) de la requete
|
||||
data_json = request.get_json()
|
||||
@@ -286,14 +292,14 @@ def modif_user(userId):
|
||||
# Test si l'utilisateur courant est actif ou pas
|
||||
# Si l'utilisateur courant n'est pas administrateur, il ne peut voir que son profil
|
||||
if not current_user["Actif"] or current_user["Role"] != "Administrateur" and current_user['userId'] != userId:
|
||||
db.disconnect()
|
||||
abort(403)
|
||||
db.disconnect()
|
||||
abort(403, description='Utilisateur non autorisé')
|
||||
|
||||
# test des attributs (JSON) de la requete
|
||||
if not request.data.decode("utf-8"):
|
||||
logger.error("Data not found")
|
||||
db.disconnect()
|
||||
abort(400)
|
||||
abort(400, description='Data not found')
|
||||
|
||||
# recuperation des attributs (JSON) de la requete
|
||||
dataDict = request.get_json()
|
||||
@@ -322,7 +328,7 @@ def del_user(userId):
|
||||
# Test si l'utilisateur courant est Admin ou pas
|
||||
if not current_user["Actif"] or current_user["Role"] != 'Administrateur':
|
||||
db.disconnect()
|
||||
abort(403)
|
||||
abort(403, description='Utilisateur non autorisé')
|
||||
|
||||
# test des attributs (JSON) de la requete
|
||||
if request.data.decode("utf-8"):
|
||||
@@ -364,7 +370,8 @@ def reset_passwd_user(userId):
|
||||
# Test si l'utilisateur courant est Admin ou pas
|
||||
if not current_user["Actif"] or current_user["Role"] != 'Administrateur':
|
||||
db.disconnect()
|
||||
abort(403)
|
||||
abort(403, description='Utilisateur non autorisé')
|
||||
|
||||
# Hash du mot de passe
|
||||
passwd = generate_password_hash('provisoire', method='sha256')
|
||||
sql_statement = "UPDATE utilisateur SET Password='{}' WHERE userId = {}".format(passwd, userId)
|
||||
@@ -385,7 +392,7 @@ def login():
|
||||
if not auth or not auth.username or not auth.password:
|
||||
logger.error("Login and Password required !")
|
||||
db.disconnect()
|
||||
abort(401)
|
||||
abort(401, description='Login and Password required')
|
||||
|
||||
# On vérifie que l'utilisateur existe en base de données
|
||||
sql_statement = "SELECT * FROM utilisateur WHERE Identifiant = \"{}\"".format(auth.username)
|
||||
@@ -426,6 +433,66 @@ def logout():
|
||||
unset_jwt_cookies(content)
|
||||
return content
|
||||
|
||||
def allowed_file(filename):
|
||||
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
||||
|
||||
@app.route('/api/utilisateurs/<int:userId>/uploadImage', methods=['POST'])
|
||||
@jwt_required()
|
||||
@dbmanage
|
||||
def uploadImage(userId):
|
||||
# Access the identity of the current user with get_jwt_identity
|
||||
current_user = get_jwt_identity()
|
||||
# Test si l'utilisateur courant est actif et Admin ou pas
|
||||
# Si l'utilisateur courant n'est pas administrateur, il ne peut voir que son profil
|
||||
if not current_user["Actif"] or current_user["Role"] != "Administrateur" and current_user['userId'] != userId:
|
||||
db.disconnect()
|
||||
logger.error("Utilisateur non autorisé")
|
||||
abort(403, description='Utilisateur non autorisé')
|
||||
|
||||
# On vérifie que l'utilisateur existe en base de données
|
||||
sql_statement = "SELECT * FROM utilisateur WHERE userid = {}".format(userId)
|
||||
# execution de la requete sql
|
||||
etat, ret = db.execute(sql_statement, None, False)
|
||||
if not etat:
|
||||
db.disconnect()
|
||||
abort(500)
|
||||
else:
|
||||
if not ret:
|
||||
db.disconnect()
|
||||
abort(404)
|
||||
user = ret[0]
|
||||
|
||||
# check if the post request has the file part
|
||||
if 'photo' not in request.files:
|
||||
logger.error('No file part in the request')
|
||||
abort(400)
|
||||
try:
|
||||
photo = request.files['photo']
|
||||
except RequestEntityTooLarge as e:
|
||||
logger.error("Fichier trop gros ...")
|
||||
abort(413)
|
||||
# If the user does not select a file, the browser submits an empty file without a filename
|
||||
if photo.filename == '':
|
||||
logger.error('No selected file')
|
||||
abort(401)
|
||||
if photo and allowed_file(photo.filename):
|
||||
filename = secure_filename(photo.filename)
|
||||
### DEBUG ###
|
||||
logger.debug("filename: {}".format(os.path.splitext(filename)))
|
||||
### END DEBUG ###
|
||||
filepath = os.path.join(app.config['UPLOAD_FOLDER'], user['Identifiant'] + os.path.splitext(filename)[1])
|
||||
photo.save(filepath)
|
||||
sql_statement = "UPDATE utilisateur SET Nom=%s, Prenom=%s, Photo=%s, Identifiant=%s, Password=%s, Role=%s, Actif=%d WHERE userId = {}".format(userId)
|
||||
data = (user['Nom'], user['Prenom'], filepath, user['Identifiant'], user['Password'], user['Role'], user['Actif'])
|
||||
|
||||
# Execution de la requete SQL
|
||||
etat, ret = db.execute(sql_statement, data, True)
|
||||
if not etat:
|
||||
db.disconnect()
|
||||
abort(500)
|
||||
content = jsonify({'message': 'photo saved successfuly!'})
|
||||
return content
|
||||
|
||||
def main():
|
||||
logger.setLevel(log.DEBUG)
|
||||
fl = log.StreamHandler()
|
||||
|
||||
Reference in New Issue
Block a user