api.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. from flask import Flask, jsonify, request
  2. from xmpp import cli
  3. from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token
  4. from datetime import timedelta
  5. from BackendApi.Models import RoleModel, UserModel
  6. from BackendApi.SharixQuery import SharixQuery, ReturnData
  7. from api_config import Config
  8. app = Flask(__name__)
  9. #Добавление секртного слова для шифрования JWT
  10. app.config.from_object(Config)
  11. #Инициализация класса шифрования
  12. jwt = JWTManager(app)
  13. db_query = SharixQuery()
  14. #Авторизация пользователя
  15. @app.route('/auth', methods=['POST'])
  16. def post_auth():
  17. try:
  18. result = db_query.auth_query(request.get_json())
  19. return gen_token(result.data.id, 5), result.code
  20. except Exception as ex:
  21. return err_mes(ex)
  22. #Добавление пользователя и проверка на сходства
  23. @app.route('/adduser', methods=['POST'])
  24. def add_user():
  25. try:
  26. result = db_query.add_user(request.get_json())
  27. return jsonify(result.data), result.code
  28. except Exception as ex:
  29. return err_mes(ex)
  30. #Запрос на получение данных об одном пользователе
  31. @app.route('/user/<int:id>', methods=['GET'])
  32. def get_user(id):
  33. try:
  34. result = db_query.get_user(id)
  35. if type(result) == UserModel:
  36. result.password = None
  37. result.insys = None
  38. result.id = None
  39. return jsonify(result.as_dict())
  40. else:
  41. return result.data, result.code
  42. except Exception as ex:
  43. return err_mes(ex)
  44. #Запрос на получение данных всех пользователей
  45. @app.route('/users', methods=['GET'])
  46. def get_show_user():
  47. try:
  48. data = []
  49. result = db_query.get_all_user()
  50. if type(result) == list:
  51. for user in result:
  52. user.lastlogintime = None
  53. user.insys = None
  54. data.append(user.as_dict())
  55. return jsonify(data), 200
  56. else:
  57. return result.data, result.code
  58. except Exception as ex:
  59. return err_mes(ex)
  60. #Удаление пользователя
  61. @app.route('/deleteuser', methods=['POST'])
  62. def delete_user():
  63. try:
  64. result = db_query.delete_user_query(UserModel.id, request.get_json()["id"])
  65. return jsonify(result.data), result.code
  66. except Exception as ex:
  67. return err_mes(ex)
  68. #Обновление данных пользователя
  69. @app.route('/updateuser', methods=['POST'])
  70. def test_api():
  71. try:
  72. result = db_query.update_user(request.get_json())
  73. return jsonify(result.data), result.code
  74. except Exception as ex:
  75. return err_mes(ex)
  76. #Отправка сообщения через XMPP
  77. @app.route('/testmessage', methods=['POST'])
  78. def send_mess():
  79. try:
  80. request_data = request.get_json()
  81. for to in request_data['to']:
  82. cli.send_message(request_data['from'], request_data['password'], to, request_data['message'])
  83. return jsonify({"msg":"Succes send!"}), 200
  84. except Exception as ex:
  85. return err_mes(ex)
  86. #Список ролей
  87. @app.route('/roles', methods=['GET'])
  88. def get_all_roles():
  89. try:
  90. data = []
  91. result = db_query.get_roles()
  92. if type(result) == list:
  93. for role in result:
  94. data.append(role.as_dict())
  95. return jsonify(data), 200
  96. else:
  97. return result.data, result.code
  98. except Exception as ex:
  99. return err_mes(ex)
  100. #Удалить роль
  101. @app.route('/deleterole', methods=['POST'])
  102. def delete_role():
  103. try:
  104. result = db_query.delete_role(RoleModel.id, request.get_json()["id"])
  105. return result.data, result.code
  106. except Exception as ex:
  107. return err_mes(ex)
  108. #Добавить роль
  109. @app.route('/addrole', methods=['POST'])
  110. def add_role():
  111. try:
  112. result = db_query.add_role(request.get_json())
  113. return result.data, result.code
  114. except Exception as ex:
  115. return err_mes(ex)
  116. #Генерация токена (id - данные которые шифруются, min - время действия токена)
  117. #Используются при авторизации или регистрации (возможно выдавать и при других обстоятельствах)
  118. def gen_token(id, min):
  119. token = {"access_token" : create_access_token(identity=id, expires_delta=timedelta(minutes=min))}
  120. return jsonify(token)
  121. #Ошибка сервера (возвращает ошибку и код ошибки)
  122. def err_mes(ex):
  123. return jsonify({"msg":str(ex)}), 500
  124. #Запуск сервера
  125. if __name__ == '__main__':
  126. app.run(host='0.0.0.0', debug=True, load_dotenv=True )