예제 #1
0
def get_task(id):
    try:
        pkh_str = request.headers.get('X-Bitcoin-PKH')
        sig_str = request.headers.get('X-Bitcoin-Sig')

        tstamp = int(request.headers.get('X-Timestamp'))
        if not check_timestamp(tstamp):
            return ("Clock drift", 403, {'Content-Type': 'text/plain'})

        msg = util.hash_task_phdr(id, pkh_str, tstamp)
        if not wallet.verify_bitcoin_message(msg, sig_str, pkh_str):
            return ("Permission denied", 403, {'Content-Type': 'text/plain'})
    except:
        return ("Permission denied", 403, {'Content-Type': 'text/plain'})

    try:
        worker = db.worker_get(pkh_str)
        if worker is None:
            return ("Permission denied", 403, {'Content-Type': 'text/plain'})

        task = db.task_get(id)
        if task is None:
            abort(404)

        db.worker_inc_req(pkh_str)
    except:
        abort(500)

    body = json.dumps(task, indent=2)
    return (body, 200, {
        'Content-length': len(body),
        'Content-type': 'application/json',
    })
예제 #2
0
def get_task(id):
    try:
        pkh_str = request.headers.get('X-Bitcoin-PKH')
        sig_str = request.headers.get('X-Bitcoin-Sig')

        tstamp = int(request.headers.get('X-Timestamp'))
        if not check_timestamp(tstamp):
            return ("Clock drift", 403, {'Content-Type':'text/plain'})

        msg = util.hash_task_phdr(id, pkh_str, tstamp)
        if not wallet.verify_bitcoin_message(msg, sig_str, pkh_str):
            return ("Permission denied", 403, {'Content-Type':'text/plain'})
    except:
        return ("Permission denied", 403, {'Content-Type':'text/plain'})

    try:
        worker = db.worker_get(pkh_str)
        if worker is None:
            return ("Permission denied", 403, {'Content-Type':'text/plain'})

        task = db.task_get(id)
        if task is None:
            abort(404)

        db.worker_inc_req(pkh_str)
    except:
        abort(500)

    body = json.dumps(task, indent=2)
    return (body, 200, {
        'Content-length': len(body),
        'Content-type': 'application/json',
    })
예제 #3
0
def cmd_task_get(ctx, id, pkh):
    # Build, hash and sign pseudo-header
    tstamp = int(time.time())
    msg = util.hash_task_phdr(id, pkh, tstamp)
    sig_str = wallet.sign_bitcoin_message(msg, pkh)
    if not wallet.verify_bitcoin_message(msg, sig_str, pkh):
        print("Error: cannot self-verify signed message")
        sys.exit(1)

    # Send request to endpoint
    sel_url = ctx.obj["endpoint"] + "task/" + id
    headers = {"X-Bitcoin-PKH": pkh, "X-Bitcoin-Sig": sig_str, "X-Timestamp": str(tstamp)}
    answer = requests.get(url=sel_url.format(), headers=headers)
    print(answer.text)
예제 #4
0
def cmd_task_get(ctx, id, pkh):
    # Build, hash and sign pseudo-header
    tstamp = int(time.time())
    msg = util.hash_task_phdr(id, pkh, tstamp)
    sig_str = wallet.sign_bitcoin_message(msg, pkh)
    if not wallet.verify_bitcoin_message(msg, sig_str, pkh):
        print("Error: cannot self-verify signed message")
        sys.exit(1)

    # Send request to endpoint
    sel_url = ctx.obj['endpoint'] + 'task/' + id
    headers = {
        'X-Bitcoin-PKH': pkh,
        'X-Bitcoin-Sig': sig_str,
        'X-Timestamp': str(tstamp),
    }
    answer = requests.get(url=sel_url.format(), headers=headers)
    print(answer.text)