Exemple #1
0
def attack(data: dict, user: str, service: Service):
    if service.running:
        return attack_already_running

    target_device: str = data["target_device"]
    target_service_uuid: str = data["target_service"]

    target_service: Service = wrapper.session.query(Service).filter_by(
        uuid=target_service_uuid, device=target_device).first()
    if target_service is None:
        return service_not_found
    if not target_service.running:
        return service_not_running

    speed: float = register_service(service.device, service.uuid, service.name,
                                    service.owner)
    if speed == -1:
        return could_not_start_service

    bruteforce: Bruteforce = wrapper.session.query(Bruteforce).get(
        service.uuid)
    bruteforce.target_service = target_service_uuid
    bruteforce.target_device = target_device
    bruteforce.started = int(time.time())
    bruteforce.progress = 0
    service.speed = speed
    service.running = True

    wrapper.session.commit()

    return success_scheme
Exemple #2
0
def toggle(data: dict, user: str, service: Service) -> dict:
    if not config["services"][service.name]["toggleable"]:
        return cannot_toggle_directly

    if service.running:
        stop_service(service.device, service.uuid, service.owner)
    else:
        if register_service(service.device, service.uuid, service.name, service.owner) == -1:
            return could_not_start_service

    service.running = not service.running
    wrapper.session.commit()

    return service.serialize
Exemple #3
0
def stop(data: dict, user: str, service: Service):
    if not service.running:
        return attack_not_running

    bruteforce: Bruteforce = wrapper.session.query(Bruteforce).get(
        service.uuid)

    target_device: str = bruteforce.target_device

    target_service: Service = wrapper.session.query(Service).filter_by(
        uuid=bruteforce.target_service, device=target_device).first()

    bruteforce.update_progress(service.speed)

    progress: float = bruteforce.progress

    bruteforce.target_device = None
    bruteforce.target_service = None
    bruteforce.started = None
    bruteforce.progress = 0
    service.running = False
    wrapper.session.commit()

    stop_service(service.device, service.uuid, service.owner)

    access: bool = False
    if target_service is None:
        return service_not_found
    elif not target_service.running:
        return service_not_running
    elif random.random() + 0.1 < calculate_pos(progress):
        target_service.part_owner = user
        wrapper.session.commit()
        access: bool = True

    return {
        "ok": True,
        "access": access,
        "progress": progress,
        "target_device": target_device
    }
Exemple #4
0
def set_power(data: dict, user: str, service: Service) -> dict:
    miner: Miner = wrapper.session.query(Miner).get(service.uuid)

    if not exists_wallet(miner.wallet):
        return wallet_not_found

    power: int = data["power"]

    update_miner(miner)

    speed: float = change_miner_power(power, service.uuid, service.device,
                                      service.owner)
    if speed == -1:
        return could_not_start_service

    service.speed = speed
    service.running = power > 0
    miner.power = power
    if service.running:
        miner.started = int(time.time() * 1000)
    else:
        miner.started = None

    # notify wallet owner
    wallet_owner: Optional[str] = get_wallet_owner(miner.wallet)
    if wallet_owner is not None:
        m.contact_user(
            wallet_owner, {
                "notify-id": "miner-rate-changed",
                "origin": "miner/power",
                "wallet_uuid": miner.wallet
            })

    wrapper.session.commit()

    return miner.serialize