/** * Upload new crypto/keys. * * @param keys new keys. * @param keyUploadDelegate a delegate. */ public void uploadKeys(final CollectionKeys keys, final KeyUploadDelegate keyUploadDelegate) { SyncStorageRecordRequest request; try { request = new SyncStorageRecordRequest(this.config.keysURI()); } catch (URISyntaxException e) { keyUploadDelegate.onKeyUploadFailed(e); return; } request.delegate = new SyncStorageRequestDelegate() { @Override public String ifUnmodifiedSince() { return null; } @Override public void handleRequestSuccess(SyncStorageResponse response) { Logger.debug(LOG_TAG, "Keys uploaded."); BaseResource.consumeEntity(response); // We don't need the response at all. keyUploadDelegate.onKeysUploaded(); } @Override public void handleRequestFailure(SyncStorageResponse response) { Logger.debug(LOG_TAG, "Failed to upload keys."); GlobalSession.this.interpretHTTPFailure(response.httpResponse()); BaseResource.consumeEntity( response); // The exception thrown should not need the body of the response. keyUploadDelegate.onKeyUploadFailed(new HTTPFailureException(response)); } @Override public void handleRequestError(Exception ex) { Logger.warn(LOG_TAG, "Got exception trying to upload keys", ex); keyUploadDelegate.onKeyUploadFailed(ex); } @Override public AuthHeaderProvider getAuthHeaderProvider() { return GlobalSession.this.getAuthHeaderProvider(); } }; // Convert keys to an encrypted crypto record. CryptoRecord keysRecord; try { keysRecord = keys.asCryptoRecord(); keysRecord.setKeyBundle(config.syncKeyBundle); keysRecord.encrypt(); } catch (Exception e) { Logger.warn(LOG_TAG, "Got exception trying creating crypto record from keys", e); keyUploadDelegate.onKeyUploadFailed(e); return; } request.put(keysRecord); }