Search in sources :

Example 6 with ReceiptCredentialPresentation

use of org.signal.zkgroup.receipts.ReceiptCredentialPresentation in project Signal-Android by signalapp.

the class BoostReceiptRequestResponseJob method onRun.

@Override
protected void onRun() throws Exception {
    if (requestContext == null) {
        Log.d(TAG, "Creating request context..");
        SecureRandom secureRandom = new SecureRandom();
        byte[] randomBytes = new byte[ReceiptSerial.SIZE];
        secureRandom.nextBytes(randomBytes);
        ReceiptSerial receiptSerial = new ReceiptSerial(randomBytes);
        ClientZkReceiptOperations operations = ApplicationDependencies.getClientZkReceiptOperations();
        requestContext = operations.createReceiptCredentialRequestContext(secureRandom, receiptSerial);
    } else {
        Log.d(TAG, "Reusing request context from previous run", true);
    }
    Log.d(TAG, "Submitting credential to server", true);
    ServiceResponse<ReceiptCredentialResponse> response = ApplicationDependencies.getDonationsService().submitBoostReceiptCredentialRequest(paymentIntentId, requestContext.getRequest()).blockingGet();
    if (response.getApplicationError().isPresent()) {
        handleApplicationError(context, response);
    } else if (response.getResult().isPresent()) {
        ReceiptCredential receiptCredential = getReceiptCredential(response.getResult().get());
        if (!isCredentialValid(receiptCredential)) {
            DonationError.routeDonationError(context, DonationError.genericBadgeRedemptionFailure(DonationErrorSource.BOOST));
            throw new IOException("Could not validate receipt credential");
        }
        Log.d(TAG, "Validated credential. Handing off to redemption job.", true);
        ReceiptCredentialPresentation receiptCredentialPresentation = getReceiptCredentialPresentation(receiptCredential);
        setOutputData(new Data.Builder().putBlobAsString(DonationReceiptRedemptionJob.INPUT_RECEIPT_CREDENTIAL_PRESENTATION, receiptCredentialPresentation.serialize()).build());
    } else {
        Log.w(TAG, "Encountered a retryable exception: " + response.getStatus(), response.getExecutionError().orNull(), true);
        throw new RetryableException();
    }
}
Also used : ReceiptCredential(org.signal.zkgroup.receipts.ReceiptCredential) ReceiptSerial(org.signal.zkgroup.receipts.ReceiptSerial) ReceiptCredentialPresentation(org.signal.zkgroup.receipts.ReceiptCredentialPresentation) ClientZkReceiptOperations(org.signal.zkgroup.receipts.ClientZkReceiptOperations) ReceiptCredentialResponse(org.signal.zkgroup.receipts.ReceiptCredentialResponse) SecureRandom(java.security.SecureRandom) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)6 ReceiptCredentialPresentation (org.signal.zkgroup.receipts.ReceiptCredentialPresentation)6 ReceiptCredential (org.signal.zkgroup.receipts.ReceiptCredential)4 ReceiptCredentialResponse (org.signal.zkgroup.receipts.ReceiptCredentialResponse)4 SecureRandom (java.security.SecureRandom)2 InvalidInputException (org.signal.zkgroup.InvalidInputException)2 VerificationFailedException (org.signal.zkgroup.VerificationFailedException)2 ClientZkReceiptOperations (org.signal.zkgroup.receipts.ClientZkReceiptOperations)2 ReceiptSerial (org.signal.zkgroup.receipts.ReceiptSerial)2 Data (org.thoughtcrime.securesms.jobmanager.Data)2 ActiveSubscription (org.whispersystems.signalservice.api.subscriptions.ActiveSubscription)2 EmptyResponse (org.whispersystems.signalservice.internal.EmptyResponse)2