Пример #1
0
def post_move():
    new_move = request.get_json()
    move = Move.query.get(new_move['id'])

    if move:
        return jsonify(result='success')

    if not move:
        move = Move(
            id=new_move['id'],
            user=new_move['user'],
            name=new_move['name'],
            signature=new_move['signature'],
            tax=new_move['tax'],
            details=new_move['details'],
            created_at=datetime.datetime.strptime(new_move['created_at'],
                                                  '%Y-%m-%d %H:%M:%S.%f'),
        )

    if not move.valid:
        return jsonify(result='failed',
                       message=f"move {move.id} isn't valid."), 400

    db.session.add(move)
    db.session.commit()

    sent_node = Node()
    if 'sent_node' in new_move:
        sent_node.url = new_move['sent_node']

    move_broadcast.delay(move.id,
                         sent_node_url=sent_node.url,
                         my_node_url=f'{request.scheme}://{request.host}')
    return jsonify(result='success')
Пример #2
0
def post_move():
    new_move = request.get_json()
    move = Move.query.get(new_move['id'])

    if move:
        return jsonify(result='success')

    if not move:
        move = Move.deserialize(new_move)

    if not move.valid:
        return jsonify(result='failed',
                       message=f"move {move.id} isn't valid."), 400

    db.session.add(move)
    try:
        db.session.commit()
    except IntegrityError:
        return jsonify(result='failed',
                       message="This node already has this move."), 400
    sent_node = Node()
    if 'sent_node' in new_move:
        sent_node.url = new_move['sent_node']

    move_broadcast.delay(move.id,
                         sent_node_url=sent_node.url,
                         my_node_url=f'{request.scheme}://{request.host}')
    return jsonify(result='success')
Пример #3
0
def post_block():
    new_block = request.get_json()
    last_block = Block.query.order_by(Block.id.desc()).first()

    if not new_block:
        return jsonify(result='failed', message="empty block."), 400

    if not last_block and new_block['id'] != 1:
        Block.sync(Node.query.order_by(Node.last_connected_at.desc()).first())
        return jsonify(result='failed',
                       message="new block isn't our next block."), 403

    if (new_block['id'] > 1
            and (new_block['id'] != last_block.id + 1
                 or new_block['prev_hash'] != last_block.hash)):
        if new_block['id'] > last_block.id + 1:
            Block.sync(
                Node.query.order_by(Node.last_connected_at.desc()).first())
        return jsonify(result='failed',
                       message="new block isn't our next block."), 403

    block = Block.deserialize(new_block)

    for new_move in new_block['moves']:
        move = Move.query.get(new_move['id'])
        if not move:
            move = Move(
                id=new_move['id'],
                user=new_move['user'],
                name=new_move['name'],
                signature=new_move['signature'],
                tax=new_move['tax'],
                details=new_move['details'],
                created_at=datetime.datetime.strptime(new_move['created_at'],
                                                      '%Y-%m-%d %H:%M:%S.%f'),
                block_id=block.id,
            )
        if not move.valid:
            return jsonify(result='failed',
                           message=f"move {move.id} isn't valid."), 400
        block.moves.append(move)
    if not block.valid:
        return jsonify(result='failed', message="new block isn't valid."), 400

    db.session.add(block)
    try:
        db.session.commit()
    except IntegrityError:
        return jsonify(result='failed',
                       message="This node already has this block."), 400
    sent_node = Node()
    if 'sent_node' in new_block:
        sent_node.url = new_block['sent_node']
    block_broadcast.delay(block.id,
                          sent_node_url=sent_node.url,
                          my_node_url=f'{request.scheme}://{request.host}')
    return jsonify(result='success')