api.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. from flask import Flask, jsonify, request, json
  2. from types import SimpleNamespace
  3. from xmpp import cli
  4. from flask_jwt_extended import JWTManager, jwt_required, get_jwt_identity, create_access_token
  5. from datetime import date, timedelta, datetime
  6. import sqlalchemy as db
  7. from sqlalchemy import create_engine, Integer, Date, DateTime, Column, String, Boolean, or_
  8. from sqlalchemy.orm import sessionmaker, scoped_session, declarative_base
  9. from BackendApi.connect import connect
  10. from api_config import Config
  11. app = Flask(__name__)
  12. #Добавление секртного слова для шифрования JWT
  13. app.config.from_object(Config)
  14. engine = create_engine(connect())
  15. session = scoped_session(sessionmaker(
  16. autocommit=False,
  17. autoflush=False,
  18. bind=engine
  19. ))
  20. Base = declarative_base()
  21. class UserModel(Base):
  22. __tablename__ = 'rest_user'
  23. id = Column(Integer, primary_key=True, autoincrement=True, )
  24. name = Column(String, unique=True, nullable=False)
  25. birthday = Column(Date)
  26. insys = Column(Boolean)
  27. idrole = Column(Integer)
  28. lastlogintime = Column(DateTime)
  29. email = Column(String, unique=True, nullable=False)
  30. password = Column(String)
  31. def as_dict(self):
  32. return {c.name: getattr(self, c.name) for c in self.__table__.columns}
  33. #Инициализация класса шифрования
  34. jwt = JWTManager(app)
  35. #Переменные чтобы не ошибиться
  36. data = 'data'
  37. code = 'httpcode'
  38. #Генерация токена (id - данные которые шифруются, min - время действия токена)
  39. #Используются при авторизации или регистрации (возможно выдавать и при других обстоятельствах)
  40. def gen_token(id, min):
  41. token = {"access_token" : create_access_token(identity=id, expires_delta=timedelta(minutes=min))}
  42. return jsonify(token)
  43. #Ошибка сервера (возвращает ошибку и код ошибки)
  44. def err_mes(ex):
  45. return jsonify({"msg":str(ex)}), 500
  46. def data_for_model(data):
  47. return json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
  48. #Авторизация пользователя
  49. # @app.route('/auth', methods=['POST'])
  50. # def post_auth():
  51. # try:
  52. # result = db_query.auth_query(request.get_json())
  53. # return gen_token(result[data]['id'], 5), result[code]
  54. # except Exception as ex:
  55. # return err_mes(ex)
  56. #Добавление пользователя и проверка на сходства
  57. @app.route('/adduser', methods=['POST'])
  58. def add_user():
  59. try:
  60. user = UserModel(**request.get_json())
  61. chek = session.query(UserModel).filter(or_(UserModel.email==user.email, UserModel.name==user.name)).first()
  62. if chek is None:
  63. session.add(user)
  64. session.flush()
  65. session.commit()
  66. return str(user.id), 200
  67. else:
  68. return "User exist", 400
  69. except Exception as ex:
  70. return err_mes(ex)
  71. #Запрос на получение данных об одном пользователе
  72. # @app.route('/user/<int:id>', methods=['GET'])
  73. # def get_user(id):
  74. # try:
  75. # result = db_query.get_user_query(id)
  76. # return jsonify(result[data]), result[code]
  77. # except Exception as ex:
  78. # return err_mes(ex)
  79. #Запрос на получение данных всех пользователей
  80. @app.route('/users', methods=['GET'])
  81. def get_show_user():
  82. try:
  83. data = []
  84. for user in session.query(UserModel).all():
  85. data.append(user.as_dict())
  86. #result = db_query.get_all_user_query()
  87. return jsonify(data), 200
  88. except Exception as ex:
  89. return err_mes(ex)
  90. #Удаление пользователя
  91. @app.route('/deleteuser', methods=['POST'])
  92. def delete_user():
  93. try:
  94. user = UserModel(**request.get_json())
  95. session.query(UserModel).filter_by(id=user.id).delete()
  96. session.commit()
  97. return "Success delete"
  98. #result = db_query.delete_user_query(request.get_json())
  99. #return jsonify(result[data]), result[code]
  100. except Exception as ex:
  101. return err_mes(ex)
  102. #Обновление данных пользователя
  103. # @app.route('/updateuser', methods=['POST'])
  104. # @jwt_required()
  105. # def test_api():
  106. # try:
  107. # result = db_query.update_user_query(request.get_json(), get_jwt_identity())
  108. # return jsonify(result[data]), result[code]
  109. # except Exception as ex:
  110. # return err_mes(ex)
  111. #Отправка сообщения через XMPP
  112. @app.route('/testmessage', methods=['POST'])
  113. def send_mess():
  114. try:
  115. request_data = request.get_json()
  116. for to in request_data['to']:
  117. cli.send_message(request_data['from'], request_data['password'], to, request_data['message'])
  118. return jsonify({"msg":"Succes send!"}), 200
  119. except Exception as ex:
  120. return err_mes(ex)
  121. # @app.route('/testaddcarlog', methods=['POST'])
  122. # def test_add_car_log():
  123. # try:
  124. # result = db_query.add_car_log(request.get_json())
  125. # return gen_token(result[data], 5), result[code]
  126. # except Exception as ex:
  127. # return err_mes(ex)
  128. if __name__ == '__main__':
  129. #from waitress import serve
  130. #serve(app, host='127.0.0.2', port='8080')
  131. app.run(host='0.0.0.0', debug=True, load_dotenv=True )