from flask import Flask, jsonify, request from xmpp import cli from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token from datetime import timedelta from BackendApi.Models import RoleModel, UserModel from BackendApi.SharixQuery import SharixQuery, ReturnData from api_config import Config app = Flask(__name__) #Добавление секртного слова для шифрования JWT app.config.from_object(Config) #Инициализация класса шифрования jwt = JWTManager(app) db_query = SharixQuery() #Авторизация пользователя @app.route('/auth', methods=['POST']) def post_auth(): try: result = db_query.auth_query(request.get_json()) return gen_token(result.data.id, 5), result.code except Exception as ex: return err_mes(ex) #Добавление пользователя и проверка на сходства @app.route('/adduser', methods=['POST']) def add_user(): try: result = db_query.add_user(request.get_json()) return jsonify(result.data), result.code except Exception as ex: return err_mes(ex) #Запрос на получение данных об одном пользователе @app.route('/user/', methods=['GET']) def get_user(id): try: result = db_query.get_user(id) if type(result) == UserModel: result.password = None result.insys = None result.id = None return jsonify(result.as_dict()) else: return result.data, result.code except Exception as ex: return err_mes(ex) #Запрос на получение данных всех пользователей @app.route('/users', methods=['GET']) def get_show_user(): try: data = [] result = db_query.get_all_user() if type(result) == list: for user in result: user.lastlogintime = None user.insys = None data.append(user.as_dict()) return jsonify(data), 200 else: return result.data, result.code except Exception as ex: return err_mes(ex) #Удаление пользователя @app.route('/deleteuser', methods=['POST']) def delete_user(): try: result = db_query.delete_user_query(UserModel.id, request.get_json()["id"]) return jsonify(result.data), result.code except Exception as ex: return err_mes(ex) #Обновление данных пользователя @app.route('/updateuser', methods=['POST']) def test_api(): try: result = db_query.update_user(request.get_json()) return jsonify(result.data), result.code except Exception as ex: return err_mes(ex) #Отправка сообщения через XMPP @app.route('/testmessage', methods=['POST']) def send_mess(): try: request_data = request.get_json() for to in request_data['to']: cli.send_message(request_data['from'], request_data['password'], to, request_data['message']) return jsonify({"msg":"Succes send!"}), 200 except Exception as ex: return err_mes(ex) #Список ролей @app.route('/roles', methods=['GET']) def get_all_roles(): try: data = [] result = db_query.get_roles() if type(result) == list: for role in result: data.append(role.as_dict()) return jsonify(data), 200 else: return result.data, result.code except Exception as ex: return err_mes(ex) #Удалить роль @app.route('/deleterole', methods=['POST']) def delete_role(): try: result = db_query.delete_role(RoleModel.id, request.get_json()["id"]) return result.data, result.code except Exception as ex: return err_mes(ex) #Добавить роль @app.route('/addrole', methods=['POST']) def add_role(): try: result = db_query.add_role(request.get_json()) return result.data, result.code except Exception as ex: return err_mes(ex) #Генерация токена (id - данные которые шифруются, min - время действия токена) #Используются при авторизации или регистрации (возможно выдавать и при других обстоятельствах) def gen_token(id, min): token = {"access_token" : create_access_token(identity=id, expires_delta=timedelta(minutes=min))} return jsonify(token) #Ошибка сервера (возвращает ошибку и код ошибки) def err_mes(ex): return jsonify({"msg":str(ex)}), 500 #Запуск сервера if __name__ == '__main__': app.run(host='0.0.0.0', debug=True, load_dotenv=True )