def update_hardware(id): name = request.json.get('name', None) up = request.json.get('up', None) uuid = request.json.get('uuid', None) humidity_limit = request.json.get('humidity_limit', None) temperature_limit = request.json.get('temperature_limit', None) if name is None or humidity_limit is None or up is None \ or uuid is None or temperature_limit is None \ or temperature_limit is None: raise ContentEmptyException() is_succ = update_hardware_by_id(id, name, humidity_limit, temperature_limit) if not is_succ: raise DBException() mqtt_client.publish( 'setup_threshold', { 'uuid': uuid, 'temperature_limit': temperature_limit, 'humidity_limit': humidity_limit }) return response_success( 'success', { 'id': id, 'up': up, 'uuid': uuid, 'name': name, 'humidity_limit': str(humidity_limit), 'temperature_limit': str(temperature_limit) })
def check_uuid(uuid: str): if uuid is None: raise ContentEmptyException() id = get_id_by_uuid(uuid) if id is None: raise DataNotFoundException() return response_success('success', id)
def getDailySensorData(): uuid = request.args.get('uuid', None) logger.info(uuid) if uuid is None: raise ContentEmptyException() return response_success('success', get_sensor_data_hourly(uuid))
def get_hardware_client_id(): claims = get_jwt_claims() roles = claims.get('roles', None) username = claims.get('username', None) if claims is None or roles is None or username is None: raise UserNotFoundException() res = get( f"http://{config['mqtt']['broker_url']}:{config['mqtt']['http_api_port']}/api/v4/clients", auth=HTTPBasicAuth(config['mqtt']['basic_auth_username'], config['mqtt']['basic_auth_password'])) if res.status_code != 200: raise DBException() page = int(request.args.get('page', 1)) size = int(request.args.get('size', 99999)) ordered = request.args.get('ordered', '+id') query = request.args.get('query', '') if 'admin' in roles: where_sql = '' args = [] if query != '': where_sql += f'WHERE `{ordered[1:]}` LIKE %s' args.append(f'%{query}%') hardware_list = get_hardware_pagination(page, size, ordered, where_sql, *args) total = count_total(where_sql, *args) else: where_sql = '' args = [] if query != '': where_sql += f'AND `{ordered[1:]}` LIKE %s' args.append(f'%{query}%') hardware_list = get_hardware_pagination_by_username( username, page, size, ordered, where_sql, *args) total = count_total( 'WHERE uuid IN (SELECT hardware_uuid FROM user_hardware WHERE user_id = (SELECT id FROM `user` WHERE username = %s))' + where_sql, username, *args) res_json_data = list( map( lambda res: res[:36], filter(lambda res: res.endswith('_sensor_client'), map(lambda res: res['clientid'], res.json()['data'])))) for i in range(len(hardware_list)): if hardware_list[i]['uuid'] in res_json_data: hardware_list[i]['up'] = True else: hardware_list[i]['up'] = False hardware_list[i]['temperature_limit'] = str( hardware_list[i]['temperature_limit']) hardware_list[i]['humidity_limit'] = str( hardware_list[i]['humidity_limit']) return response_success( 'success', Pagination(page, size, hardware_list, total['len']))
def delete_hardware(id): up = request.args.get('up', None) if up is None or not up: raise CannotDeleteOnlineHardwareException() is_succ = delete_hardware_by_id(id) if not is_succ: raise DBException() return response_success('success', None)
def add_role(): name = request.json.get('name', None) if name is None: raise ContentEmptyException() is_succ, id = user_dao.add_role(name) if not is_succ: raise DBException() return response_success('success', {'id': id, 'name': name})
def rfid_get_data(): claims = get_jwt_claims() roles = claims.get('roles', None) username = claims.get('username', None) if claims is None or roles is None or username is None: raise UserNotFoundException() page = int(request.args.get('page', 1)) size = int(request.args.get('size', 9999)) ordered = request.args.get('ordered', '+RFID_log.id') query = request.args.get('query', '') date = request.args.getlist('date[]') if ordered[1:] == 'id': ordered = f'{ordered[0]}RFID_log.{ordered[1:]}' if 'admin' in roles: where_sql = '' args = [] if query != '': where_sql += f'WHERE `{ordered[1:]}` LIKE %s' args.append(f'%{query}%') if len(date) != 0: if len(where_sql) == 0: where_sql += 'WHERE ' else: where_sql += ' AND ' where_sql += 'log_time > %s AND log_time < %s' args.append(date[0]) args.append(date[1]) rfid_list = get_rfid_pagination(page, size, ordered, where_sql, *args) total = count_total(where_sql, *args) else: where_sql = '' args = [] if query != '': where_sql += f'AND `{ordered[1:]}` LIKE %s' args.append(f'%{query}%') if len(date) != 0: where_sql += ' AND log_time > %s AND log_time < %s' args.append(date[0]) args.append(date[1]) rfid_list = get_rfid_pagination_by_username(username, page, size, ordered, where_sql, *args) total = count_total( 'WHERE hardware_uuid IN (SELECT hardware_uuid FROM user_hardware WHERE user_id = (SELECT id FROM `user` WHERE username = %s))' + where_sql, username, *args) for i in range(len(rfid_list)): rfid_list[i]['log_time'] = rfid_list[i]['log_time'].strftime( "%m/%d/%Y, %H:%M:%S") return response_success('success', Pagination(page, size, rfid_list, total['len']))
def update_role(id): name = request.json.get('name', None) if name is None: raise ContentEmptyException() is_succ = user_dao.update_role_by_id(id, name) if not is_succ: raise DBException() return response_success('success', {'id': id, 'name': name})
def insert_user_hardware(): id = request.json.get('id', None) uuidd = request.json.get('uuid', None) if id is None or uuidd is None: raise ContentEmptyException() is_succ = insert_user_hardware_data(id, uuidd) if not is_succ: raise DBException() return response_success('success', None)
def sensor_get_data(): page = int(request.args.get('page', 1)) size = int(request.args.get('size', 9999)) query = request.args.get('query', '') where_sql = '' args = [] if query != '': where_sql += f'WHERE `username` LIKE %s' args.append(f'%{query}%') user_list = get_user_pagination(page, size, where_sql, *args) total = count_total(where_sql, *args) return response_success('success', Pagination(page, size, user_list, total['len']))
def get_roles_list(): page = int(request.args.get('page', 1)) size = int(request.args.get('size', 9999)) query = request.args.get('query', '') where_sql = '' args = [] if query != '': where_sql += f'WHERE `name` LIKE %s' args.append(f'%{query}%') role_list = get_role_pagination(page, size, where_sql, *args) total = count_total_role(where_sql, *args) return response_success('success', Pagination(page, size, role_list, total['len']))
def gen_code(): auth = request.headers['auth'] if auth is None: raise ContentEmptyException() now = datetime.now() spa = b64decode(auth).decode().split('/') if now.hour != int(spa[0]) or now.minute != int(spa[1]): raise UnAuthorizedException() id = uuid.uuid1().__str__() eff_row = insert_hardware(id) if eff_row != 1: raise DBException() return response_success('success', id)
def update_user(id): username = request.json.get('username', None) name = request.json.get('name', None) if username is None or name is None: raise ContentEmptyException() rid = user_dao.select_role_id_by_userid(name)['id'] is_succ1 = user_dao.update_by_rid(rid, id) is_succ2 = user_dao.update_user_by_id(username, id) if not is_succ1 or not is_succ2: raise DBException() return response_success('success', { 'id': id, 'username': username, 'name': name })
def register(): username = request.json.get('username', None) password = request.json.get('password', None) admin_name = request.json.get('adminName', None) if len(password) < 6: raise DataNotSatisfyException() if username is None or password is None or admin_name is None: raise ContentEmptyException() admin = user_dao.select_admin_by_username(admin_name) if admin is None: raise AdminNameErrorException() is_succ = user_dao.insert_user(username, password) if not is_succ: raise DBException() return response_success("success", None)
def change_password(): claims = get_jwt_claims() real_name = claims['username'] username = request.json.get('username', None) password = request.json.get('password', None) if real_name != username: raise UnAuthorizedException() if len(password) < 7: raise DataNotSatisfyException() if username is None or password is None: raise ContentEmptyException() is_succ = user_dao.update_password_by_username(username, password) if not is_succ: raise DBException() return response_success('success', None)
def get_user_hardware(): page = int(request.args.get('page', 1)) size = int(request.args.get('size', 9999)) user_id = request.args.get('userId', '') hardware_uuid = request.args.get('hardwareuuid', '') where_sql = '' args = [] if user_id != '': where_sql += f'WHERE `user`.id = %s' args.append(user_id) if hardware_uuid != '': if len(where_sql) == 0: where_sql += f'WHERE hardware.uuid = %s' else: where_sql += ' AND hardware.uuid = %s' args.append(hardware_uuid) user_hardware_list = get_user_hardware_pagination(page, size, where_sql, *args) total = count_total_user_hardware(where_sql, *args) return response_success( 'success', Pagination(page, size, user_hardware_list, total['len']))
def login(): username = request.json.get('username', None) password = request.json.get('password', None) if len(password) < 6: raise DataNotSatisfyException() if username is None or password is None: raise ContentEmptyException() data = user_dao.select_user_by_username(username) if data is None: raise DataNotFoundException() if not user.check_pwd(password, data['password']): raise PasswordErrorException() roles = list( map(lambda x: x['name'], user_dao.select_roles_by_userid(data['id']))) token = create_access_token(identity=user.User(data['username'], roles)) return response_success('success', {'token': token})
def hello_world(): return response_success('success', int(round(time() * 1000)))
def get_all_roles_list(): return response_success( 'success', list(map(lambda role: role['name'], get_all_role())))
def delete_user_hardware(id): is_succ = delete_user_hardware_by_user_id(id) if not is_succ: raise DBException() return response_success('success', None)
def update_user(): return response_success('success', get_all_hardware_list())
def protected(): return response_success('success', 'success')
def logout(): # TODO: 为了安全考虑的redis退出登录 但是为了api易于测试暂时不写 return response_success('success logout', None)
def delete_role(id): is_succ = user_dao.delete_role_by_id(id) if not is_succ: raise DBException() return response_success('success', None)
def info(): claims = get_jwt_claims() logger.info(claims) return response_success('success', claims)
def get_users_list(): return response_success('success', get_all_users())