Search in sources :

Example 1 with GroupsV2AuthorizationString

use of org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString in project Signal-Android by WhisperSystems.

the class PushServiceSocket method getGroupJoinInfo.

public GroupJoinInfo getGroupJoinInfo(Optional<byte[]> groupLinkPassword, GroupsV2AuthorizationString authorization) throws NonSuccessfulResponseCodeException, PushNetworkException, InvalidProtocolBufferException {
    String passwordParam = groupLinkPassword.transform(Base64UrlSafe::encodeBytesWithoutPadding).or("");
    ResponseBody response = makeStorageRequest(authorization.toString(), String.format(GROUPSV2_GROUP_JOIN, passwordParam), "GET", null, GROUPS_V2_GET_JOIN_INFO_HANDLER);
    return GroupJoinInfo.parseFrom(readBodyBytes(response));
}
Also used : GroupsV2AuthorizationString(org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString) ResponseBody(okhttp3.ResponseBody)

Example 2 with GroupsV2AuthorizationString

use of org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString in project Signal-Android by WhisperSystems.

the class GroupsV2Authorization method getAuthorizationForToday.

public GroupsV2AuthorizationString getAuthorizationForToday(@NonNull ACI self, @NonNull GroupSecretParams groupSecretParams) throws IOException, VerificationFailedException {
    final int today = currentTimeDays();
    Map<Integer, AuthCredentialResponse> credentials = cache.read();
    try {
        return getAuthorization(self, groupSecretParams, credentials, today);
    } catch (NoCredentialForRedemptionTimeException e) {
        Log.i(TAG, "Auth out of date, will update auth and try again");
        cache.clear();
    } catch (VerificationFailedException e) {
        Log.w(TAG, "Verification failed, will update auth and try again", e);
        cache.clear();
    }
    Log.i(TAG, "Getting new auth credential responses");
    credentials = groupsV2Api.getCredentials(today);
    cache.write(credentials);
    try {
        return getAuthorization(self, groupSecretParams, credentials, today);
    } catch (NoCredentialForRedemptionTimeException e) {
        Log.w(TAG, "The credentials returned did not include the day requested");
        throw new IOException("Failed to get credentials");
    }
}
Also used : IOException(java.io.IOException) AuthCredentialResponse(org.signal.zkgroup.auth.AuthCredentialResponse) NoCredentialForRedemptionTimeException(org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException) VerificationFailedException(org.signal.zkgroup.VerificationFailedException)

Example 3 with GroupsV2AuthorizationString

use of org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString in project Signal-Android by signalapp.

the class GroupsV2Authorization method getAuthorizationForToday.

public GroupsV2AuthorizationString getAuthorizationForToday(@NonNull ACI self, @NonNull GroupSecretParams groupSecretParams) throws IOException, VerificationFailedException {
    final int today = currentTimeDays();
    Map<Integer, AuthCredentialResponse> credentials = cache.read();
    try {
        return getAuthorization(self, groupSecretParams, credentials, today);
    } catch (NoCredentialForRedemptionTimeException e) {
        Log.i(TAG, "Auth out of date, will update auth and try again");
        cache.clear();
    } catch (VerificationFailedException e) {
        Log.w(TAG, "Verification failed, will update auth and try again", e);
        cache.clear();
    }
    Log.i(TAG, "Getting new auth credential responses");
    credentials = groupsV2Api.getCredentials(today);
    cache.write(credentials);
    try {
        return getAuthorization(self, groupSecretParams, credentials, today);
    } catch (NoCredentialForRedemptionTimeException e) {
        Log.w(TAG, "The credentials returned did not include the day requested");
        throw new IOException("Failed to get credentials");
    }
}
Also used : IOException(java.io.IOException) AuthCredentialResponse(org.signal.zkgroup.auth.AuthCredentialResponse) NoCredentialForRedemptionTimeException(org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException) VerificationFailedException(org.signal.zkgroup.VerificationFailedException)

Example 4 with GroupsV2AuthorizationString

use of org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString in project Signal-Android by signalapp.

the class PushServiceSocket method getGroupJoinInfo.

public GroupJoinInfo getGroupJoinInfo(Optional<byte[]> groupLinkPassword, GroupsV2AuthorizationString authorization) throws NonSuccessfulResponseCodeException, PushNetworkException, InvalidProtocolBufferException {
    String passwordParam = groupLinkPassword.transform(Base64UrlSafe::encodeBytesWithoutPadding).or("");
    ResponseBody response = makeStorageRequest(authorization.toString(), String.format(GROUPSV2_GROUP_JOIN, passwordParam), "GET", null, GROUPS_V2_GET_JOIN_INFO_HANDLER);
    return GroupJoinInfo.parseFrom(readBodyBytes(response));
}
Also used : GroupsV2AuthorizationString(org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString) ResponseBody(okhttp3.ResponseBody)

Example 5 with GroupsV2AuthorizationString

use of org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString in project Signal-Android by WhisperSystems.

the class PushServiceSocket method getGroupsV2GroupHistory.

public GroupHistory getGroupsV2GroupHistory(int fromVersion, GroupsV2AuthorizationString authorization, int highestKnownEpoch, boolean includeFirstState) throws IOException {
    Response response = makeStorageRequestResponse(authorization.toString(), String.format(Locale.US, GROUPSV2_GROUP_CHANGES, fromVersion, highestKnownEpoch, includeFirstState), "GET", null, GROUPS_V2_GET_LOGS_HANDLER);
    if (response.body() == null) {
        throw new PushNetworkException("No body!");
    }
    GroupChanges groupChanges;
    try (InputStream input = response.body().byteStream()) {
        groupChanges = GroupChanges.parseFrom(input);
    } catch (IOException e) {
        throw new PushNetworkException(e);
    }
    if (response.code() == 206) {
        String contentRangeHeader = response.header("Content-Range");
        Optional<ContentRange> contentRange = ContentRange.parse(contentRangeHeader);
        if (contentRange.isPresent()) {
            Log.i(TAG, "Additional logs for group: " + contentRangeHeader);
            return new GroupHistory(groupChanges, contentRange);
        } else {
            Log.w(TAG, "Unable to parse Content-Range header: " + contentRangeHeader);
            throw new MalformedResponseException("Unable to parse content range header on 206");
        }
    }
    return new GroupHistory(groupChanges, Optional.absent());
}
Also used : CallingResponse(org.whispersystems.signalservice.api.messages.calls.CallingResponse) Response(okhttp3.Response) KeyBackupResponse(org.whispersystems.signalservice.internal.contacts.entities.KeyBackupResponse) ReceiptCredentialResponse(org.signal.zkgroup.receipts.ReceiptCredentialResponse) CredentialResponse(org.whispersystems.signalservice.api.groupsv2.CredentialResponse) StorageAuthResponse(org.whispersystems.signalservice.api.storage.StorageAuthResponse) VerifyDeviceResponse(org.whispersystems.signalservice.api.messages.multidevice.VerifyDeviceResponse) DiscoveryResponse(org.whispersystems.signalservice.internal.contacts.entities.DiscoveryResponse) ProfileKeyCredentialResponse(org.signal.zkgroup.profiles.ProfileKeyCredentialResponse) TokenResponse(org.whispersystems.signalservice.internal.contacts.entities.TokenResponse) PushNetworkException(org.whispersystems.signalservice.api.push.exceptions.PushNetworkException) GroupChanges(org.signal.storageservice.protos.groups.GroupChanges) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) IOException(java.io.IOException) GroupsV2AuthorizationString(org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString) MalformedResponseException(org.whispersystems.signalservice.api.push.exceptions.MalformedResponseException)

Aggregations

IOException (java.io.IOException)4 GroupsV2AuthorizationString (org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString)4 ByteArrayInputStream (java.io.ByteArrayInputStream)2 InputStream (java.io.InputStream)2 Response (okhttp3.Response)2 ResponseBody (okhttp3.ResponseBody)2 GroupChanges (org.signal.storageservice.protos.groups.GroupChanges)2 VerificationFailedException (org.signal.zkgroup.VerificationFailedException)2 AuthCredentialResponse (org.signal.zkgroup.auth.AuthCredentialResponse)2 ProfileKeyCredentialResponse (org.signal.zkgroup.profiles.ProfileKeyCredentialResponse)2 ReceiptCredentialResponse (org.signal.zkgroup.receipts.ReceiptCredentialResponse)2 CredentialResponse (org.whispersystems.signalservice.api.groupsv2.CredentialResponse)2 NoCredentialForRedemptionTimeException (org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException)2 CallingResponse (org.whispersystems.signalservice.api.messages.calls.CallingResponse)2 VerifyDeviceResponse (org.whispersystems.signalservice.api.messages.multidevice.VerifyDeviceResponse)2 MalformedResponseException (org.whispersystems.signalservice.api.push.exceptions.MalformedResponseException)2 PushNetworkException (org.whispersystems.signalservice.api.push.exceptions.PushNetworkException)2 StorageAuthResponse (org.whispersystems.signalservice.api.storage.StorageAuthResponse)2 DiscoveryResponse (org.whispersystems.signalservice.internal.contacts.entities.DiscoveryResponse)2 KeyBackupResponse (org.whispersystems.signalservice.internal.contacts.entities.KeyBackupResponse)2