41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from app.api import bp_user
|
|
from flask import request, jsonify
|
|
from flask_jwt_extended import jwt_required, get_jwt_identity, get_jwt
|
|
|
|
from flasgger import swag_from
|
|
|
|
import app.messages.api_errors as errors
|
|
from app.doc.user_swag import update_swagger
|
|
|
|
from app.services.user import logout_service, update_user_service
|
|
|
|
|
|
@bp_user.route("/update", methods=["PUT"])
|
|
@swag_from(update_swagger)
|
|
@jwt_required()
|
|
def update_user():
|
|
data = request.get_json()
|
|
|
|
possible_fields = ["new_username", "new_displayname", "new_email", "new_password"]
|
|
selected_fields = [field for field in possible_fields if field in data]
|
|
|
|
if not selected_fields:
|
|
result, status_code = errors.NO_FIELD_PROVIDED(possible_fields)
|
|
return jsonify(result), status_code
|
|
|
|
user_id = get_jwt_identity()
|
|
|
|
new_username = data.get("new_username")
|
|
new_displayname = data.get("new_displayname")
|
|
new_email = data.get("new_email")
|
|
new_password = data.get("new_password")
|
|
|
|
result, status_code = update_user_service.update_user(user_id, new_username, new_displayname, new_email, new_password)
|
|
|
|
if status_code < 300:
|
|
jwt = get_jwt()
|
|
logout_service.logout(jwt, user_id, False)
|
|
|
|
return result, status_code
|
|
|