async def create_new_user(request):
    required_fields = ['name', 'password']
    utils.validate_fields(required_fields, request.json)

    # Generate keys
    private_key = signing.generate_privkey(privkey_format='bytes')
    public_key = signing.generate_pubkey(private_key, privkey_format='bytes')
    txn_key = Key(public_key, private_key)
    encrypted_private_key = utils.encrypt_private_key(
        request.app.config.AES_KEY, public_key, private_key)

    # Build create user transaction
    batch_list = create_user(txn_key, request.app.config.BATCHER_KEY_PAIR,
                             request.json.get('name'), public_key,
                             request.json.get('metadata'),
                             request.json.get('manager'))

    # Submit transaction and wait for complete
    await utils.send(request.app.config.VAL_CONN, batch_list[0],
                     request.app.config.TIMEOUT)

    # Save new user in auth table
    hashed_password = hashlib.sha256(
        request.json.get('password').encode('utf-8')).hexdigest()

    auth_entry = {
        'user_id': public_key,
        'hashed_password': hashed_password,
        'encrypted_private_key': encrypted_private_key,
        'email': request.json.get('email')
    }
    await auth_query.create_auth_entry(request.app.config.DB_CONN, auth_entry)

    # Send back success response
    return create_user_response(request, public_key)
Beispiel #2
0
async def create_new_role(request):
    required_fields = ['name', 'administrators', 'owners']
    utils.validate_fields(required_fields, request.json)

    txn_key = await utils.get_transactor_key(request)
    role_id = str(uuid4())
    batch_list = role_transaction_creation.create_role(
        txn_key, request.app.config.BATCHER_KEY_PAIR, request.json.get('name'),
        role_id, request.json.get('metadata'),
        request.json.get('administrators'), request.json.get('owners'))
    await utils.send(request.app.config.VAL_CONN, batch_list[0],
                     request.app.config.TIMEOUT)
    return create_role_response(request, role_id)
async def update_manager(request, user_id):
    required_fields = ['id']
    utils.validate_fields(required_fields, request.json)

    txn_key = await utils.get_transactor_key(request)
    proposal_id = str(uuid4())
    batch_list, _ = propose_manager(
        txn_key=txn_key,
        batch_key=request.app.config.BATCHER_KEY_PAIR,
        proposal_id=proposal_id,
        user_id=user_id,
        new_manager_id=request.json.get('id'),
        reason=request.json.get('reason'),
        metadata=request.json.get('metadata'))
    await utils.send(request.app.config.VAL_CONN, batch_list,
                     request.app.config.TIMEOUT)
    return json({'proposal_id': proposal_id})
Beispiel #4
0
async def delete_role_task(request, role_id):
    required_fields = ['id']
    utils.validate_fields(required_fields, request.json)

    txn_key = await utils.get_transactor_key(request)
    proposal_id = str(uuid4())
    batch_list, _ = role_transaction_creation.propose_remove_role_tasks(
        txn_key=txn_key,
        batch_key=request.app.config.BATCHER_KEY_PAIR,
        proposal_id=proposal_id,
        role_id=role_id,
        task_id=request.json.get('id'),
        reason=request.json.get('reason'),
        metadata=request.json.get('metadata'))
    await utils.send(request.app.config.VAL_CONN, batch_list,
                     request.app.config.TIMEOUT)
    return json({'proposal_id': proposal_id})
Beispiel #5
0
async def authorize(request):
    required_fields = ['id', 'password']
    utils.validate_fields(required_fields, request.json)

    password = request.json.get('password')
    hashed_pwd = hashlib.sha256(password.encode('utf-8')).hexdigest()
    auth_info = await auth_query.fetch_info_by_user_name(
        request.app.config.DB_CONN, request.json.get('id'))
    if auth_info is None or auth_info.get('hashed_password') != hashed_pwd:
        raise ApiUnauthorized("Unauthorized: Incorrect user id or password")
    token = utils.generate_apikey(request.app.config.SECRET_KEY,
                                  auth_info.get('user_id'))
    return json({
        'data': {
            'authorization': token,
            'user_id': auth_info.get('user_id')
        }
    })
async def update_proposal(request, proposal_id):
    required_fields = ['reason', 'status']
    utils.validate_fields(required_fields, request.json)
    if request.json['status'] not in [Status.REJECTED, Status.APPROVED]:
        raise ApiBadRequest(
            "Bad Request: status must be either 'REJECTED' or 'APPROVED'")
    txn_key = await utils.get_transactor_key(request=request)
    block = await utils.get_request_block(request)
    proposal_resource = await proposals_query.fetch_proposal_resource(
        request.app.config.DB_CONN,
        proposal_id=proposal_id,
        head_block_num=block.get('num'))

    batch_list, _ = PROPOSAL_TRANSACTION[proposal_resource.get('type')][
        request.json['status']](txn_key, request.app.config.BATCHER_KEY_PAIR,
                                proposal_id, proposal_resource.get('object'),
                                proposal_resource.get('target'),
                                request.json.get('reason'))
    await utils.send(request.app.config.VAL_CONN, batch_list,
                     request.app.config.TIMEOUT)
    return json({'proposal_id': proposal_id})