|
@@ -1,129 +1,80 @@
|
|
|
-from flask import Flask, jsonify, request, json
|
|
|
-from types import SimpleNamespace
|
|
|
+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 date, timedelta, datetime
|
|
|
-
|
|
|
-import sqlalchemy as db
|
|
|
-from sqlalchemy import create_engine, Integer, Date, DateTime, Column, String, Boolean, or_
|
|
|
-from sqlalchemy.orm import sessionmaker, scoped_session, declarative_base
|
|
|
-from BackendApi.connect import connect
|
|
|
-
|
|
|
-
|
|
|
+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)
|
|
|
-
|
|
|
-engine = create_engine(connect())
|
|
|
-session = scoped_session(sessionmaker(
|
|
|
- autocommit=False,
|
|
|
- autoflush=False,
|
|
|
- bind=engine
|
|
|
-))
|
|
|
-Base = declarative_base()
|
|
|
-
|
|
|
-class UserModel(Base):
|
|
|
- __tablename__ = 'rest_user'
|
|
|
- id = Column(Integer, primary_key=True, autoincrement=True, )
|
|
|
- name = Column(String, unique=True, nullable=False)
|
|
|
- birthday = Column(Date)
|
|
|
- insys = Column(Boolean)
|
|
|
- idrole = Column(Integer)
|
|
|
- lastlogintime = Column(DateTime)
|
|
|
- email = Column(String, unique=True, nullable=False)
|
|
|
- password = Column(String)
|
|
|
-
|
|
|
- def as_dict(self):
|
|
|
- return {c.name: getattr(self, c.name) for c in self.__table__.columns}
|
|
|
#Инициализация класса шифрования
|
|
|
jwt = JWTManager(app)
|
|
|
-
|
|
|
-#Переменные чтобы не ошибиться
|
|
|
-data = 'data'
|
|
|
-code = 'httpcode'
|
|
|
-
|
|
|
-#Генерация токена (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
|
|
|
-def data_for_model(data):
|
|
|
- return json.loads(data, object_hook=lambda d: SimpleNamespace(**d))
|
|
|
+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('/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:
|
|
|
- user = UserModel(**request.get_json())
|
|
|
- chek = session.query(UserModel).filter(or_(UserModel.email==user.email, UserModel.name==user.name)).first()
|
|
|
- if chek is None:
|
|
|
- session.add(user)
|
|
|
- session.flush()
|
|
|
- session.commit()
|
|
|
- return str(user.id), 200
|
|
|
+ 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/<int:id>', 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 "User exist", 400
|
|
|
+ return result.data, result.code
|
|
|
except Exception as ex:
|
|
|
return err_mes(ex)
|
|
|
-
|
|
|
-#Запрос на получение данных об одном пользователе
|
|
|
-# @app.route('/user/<int:id>', methods=['GET'])
|
|
|
-# def get_user(id):
|
|
|
-# try:
|
|
|
-# result = db_query.get_user_query(id)
|
|
|
-# return jsonify(result[data]), result[code]
|
|
|
-# except Exception as ex:
|
|
|
-# return err_mes(ex)
|
|
|
-
|
|
|
#Запрос на получение данных всех пользователей
|
|
|
@app.route('/users', methods=['GET'])
|
|
|
def get_show_user():
|
|
|
try:
|
|
|
data = []
|
|
|
- for user in session.query(UserModel).all():
|
|
|
- data.append(user.as_dict())
|
|
|
- #result = db_query.get_all_user_query()
|
|
|
- return jsonify(data), 200
|
|
|
+ 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:
|
|
|
- user = UserModel(**request.get_json())
|
|
|
- session.query(UserModel).filter_by(id=user.id).delete()
|
|
|
- session.commit()
|
|
|
- return "Success delete"
|
|
|
- #result = db_query.delete_user_query(request.get_json())
|
|
|
- #return jsonify(result[data]), result[code]
|
|
|
+ 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'])
|
|
|
-# @jwt_required()
|
|
|
-# def test_api():
|
|
|
-# try:
|
|
|
-# result = db_query.update_user_query(request.get_json(), get_jwt_identity())
|
|
|
-# 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():
|
|
@@ -134,18 +85,45 @@ def send_mess():
|
|
|
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)
|
|
|
|
|
|
-# @app.route('/testaddcarlog', methods=['POST'])
|
|
|
-# def test_add_car_log():
|
|
|
-# try:
|
|
|
-# result = db_query.add_car_log(request.get_json())
|
|
|
-# return gen_token(result[data], 5), 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__':
|
|
|
- #from waitress import serve
|
|
|
- #serve(app, host='127.0.0.2', port='8080')
|
|
|
app.run(host='0.0.0.0', debug=True, load_dotenv=True )
|