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();
}
}
Aggregations