def process_compute_request(data, user_nonce: UserNonce): required_attributes = ['signature', 'consumerAddress'] msg, status = check_required_attributes(required_attributes, data, 'compute') if msg: raise BadRequestError(msg) provider_wallet = get_provider_wallet() did = data.get('documentId') owner = data.get('consumerAddress') job_id = data.get('jobId') body = dict() body['providerAddress'] = provider_wallet.address if owner is not None: body['owner'] = owner if job_id is not None: body['jobId'] = job_id if did is not None: body['documentId'] = did # Consumer signature signature = data.get('signature') original_msg = f'{body.get("owner", "")}{body.get("jobId", "")}{body.get("documentId", "")}' verify_signature(owner, signature, original_msg, user_nonce.get_nonce(owner)) msg_to_sign = f'{provider_wallet.address}{body.get("jobId", "")}{body.get("documentId", "")}' msg_hash = add_ethereum_prefix_and_hash_msg(msg_to_sign) body['providerSignature'] = Web3Helper.sign_hash(msg_hash, provider_wallet) return body
def process_consume_request(data: dict, method: str, user_nonce: UserNonce = None, additional_params: list = None, require_signature: bool = True): required_attributes = [ 'documentId', 'serviceId', 'serviceType', 'dataToken', 'consumerAddress' ] if additional_params: required_attributes += additional_params if require_signature: required_attributes.append('signature') msg, status = check_required_attributes(required_attributes, data, method) if msg: raise AssertionError(msg) did = data.get('documentId') token_address = data.get('dataToken') consumer_address = data.get('consumerAddress') service_id = data.get('serviceId') service_type = data.get('serviceType') # grab asset for did from the metadatastore associated with the Data Token address asset = get_asset_from_metadatastore(get_metadata_url(), did) service = ServiceAgreement.from_ddo(service_type, asset) if service.type != service_type: raise AssertionError( f'Requested service with id {service_id} has type {service.type} which ' f'does not match the requested service type {service_type}.') if require_signature: assert user_nonce, '`user_nonce` is required when signature is required.' # Raises ValueError when signature is invalid signature = data.get('signature') verify_signature(consumer_address, signature, did, user_nonce.get_nonce(consumer_address)) return asset, service, did, consumer_address, token_address
validate_algorithm_dict, validate_order, validate_transfer_not_used_for_other_service) from ocean_provider.utils.accounts import verify_signature from ocean_provider.utils.basics import (LocalFileAdapter, get_asset_from_metadatastore, get_config, get_datatoken_minter, get_provider_wallet, setup_network) from ocean_provider.utils.encryption import do_encrypt setup_logging() services = Blueprint('services', __name__) setup_network() provider_wallet = get_provider_wallet() requests_session = get_requests_session() requests_session.mount('file://', LocalFileAdapter()) user_nonce = UserNonce(get_config().storage_path) logger = logging.getLogger(__name__) @services.route('/nonce', methods=['GET']) def nonce(): required_attributes = [ 'userAddress', ] data = get_request_data(request) msg, status = check_required_attributes(required_attributes, data, 'nonce') if msg: return jsonify(error=msg), status