Exemple #1
0
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)
        })
Exemple #2
0
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)
Exemple #3
0
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))
Exemple #4
0
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']))
Exemple #5
0
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)
Exemple #6
0
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})
Exemple #7
0
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']))
Exemple #8
0
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})
Exemple #9
0
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)
Exemple #10
0
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']))
Exemple #11
0
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']))
Exemple #12
0
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)
Exemple #13
0
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
    })
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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']))
Exemple #17
0
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})
Exemple #18
0
def hello_world():
    return response_success('success', int(round(time() * 1000)))
Exemple #19
0
def get_all_roles_list():
    return response_success(
        'success', list(map(lambda role: role['name'], get_all_role())))
Exemple #20
0
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)
Exemple #21
0
def update_user():
    return response_success('success', get_all_hardware_list())
Exemple #22
0
def protected():
    return response_success('success', 'success')
Exemple #23
0
def logout():
    # TODO: 为了安全考虑的redis退出登录 但是为了api易于测试暂时不写
    return response_success('success logout', None)
Exemple #24
0
def delete_role(id):
    is_succ = user_dao.delete_role_by_id(id)
    if not is_succ:
        raise DBException()
    return response_success('success', None)
Exemple #25
0
def info():
    claims = get_jwt_claims()
    logger.info(claims)
    return response_success('success', claims)
Exemple #26
0
def get_users_list():
    return response_success('success', get_all_users())