Search in sources :

Example 1 with Base64

use of org.whispersystems.util.Base64 in project Signal-Android by WhisperSystems.

the class MessagingService method sendToGroup.

public Single<ServiceResponse<SendGroupMessageResponse>> sendToGroup(byte[] body, byte[] joinedUnidentifiedAccess, long timestamp, boolean online) {
    List<String> headers = new LinkedList<String>() {

        {
            add("content-type:application/vnd.signal-messenger.mrm");
            add("Unidentified-Access-Key:" + Base64.encodeBytes(joinedUnidentifiedAccess));
        }
    };
    String path = String.format(Locale.US, "/v1/messages/multi_recipient?ts=%s&online=%s", timestamp, online);
    WebSocketRequestMessage requestMessage = WebSocketRequestMessage.newBuilder().setId(new SecureRandom().nextLong()).setVerb("PUT").setPath(path).addAllHeaders(headers).setBody(ByteString.copyFrom(body)).build();
    return signalWebSocket.request(requestMessage).map(DefaultResponseMapper.extend(SendGroupMessageResponse.class).withCustomError(401, (status, errorBody, getHeader) -> new InvalidUnidentifiedAccessHeaderException()).withCustomError(404, (status, errorBody, getHeader) -> new NotFoundException("At least one unregistered user in message send.")).withCustomError(409, (status, errorBody, getHeader) -> {
        GroupMismatchedDevices[] mismatchedDevices = JsonUtil.fromJsonResponse(errorBody, GroupMismatchedDevices[].class);
        return new GroupMismatchedDevicesException(mismatchedDevices);
    }).withCustomError(410, (status, errorBody, getHeader) -> {
        GroupStaleDevices[] staleDevices = JsonUtil.fromJsonResponse(errorBody, GroupStaleDevices[].class);
        return new GroupStaleDevicesException(staleDevices);
    }).build()::map).onErrorReturn(ServiceResponse::forUnknownError);
}
Also used : Single(io.reactivex.rxjava3.core.Single) SignalWebSocket(org.whispersystems.signalservice.api.SignalWebSocket) Util(org.whispersystems.signalservice.internal.util.Util) SecureRandom(java.security.SecureRandom) UnidentifiedAccess(org.whispersystems.signalservice.api.crypto.UnidentifiedAccess) NotFoundException(org.whispersystems.signalservice.api.push.exceptions.NotFoundException) GroupMismatchedDevicesException(org.whispersystems.signalservice.internal.push.exceptions.GroupMismatchedDevicesException) Locale(java.util.Locale) GroupStaleDevicesException(org.whispersystems.signalservice.internal.push.exceptions.GroupStaleDevicesException) LinkedList(java.util.LinkedList) GroupMismatchedDevices(org.whispersystems.signalservice.internal.push.GroupMismatchedDevices) DefaultResponseMapper(org.whispersystems.signalservice.internal.websocket.DefaultResponseMapper) SendMessageResponse(org.whispersystems.signalservice.internal.push.SendMessageResponse) InvalidUnidentifiedAccessHeaderException(org.whispersystems.signalservice.internal.push.exceptions.InvalidUnidentifiedAccessHeaderException) WebSocketRequestMessage(org.whispersystems.signalservice.internal.websocket.WebSocketProtos.WebSocketRequestMessage) ServiceResponse(org.whispersystems.signalservice.internal.ServiceResponse) JsonUtil(org.whispersystems.signalservice.internal.util.JsonUtil) OutgoingPushMessageList(org.whispersystems.signalservice.internal.push.OutgoingPushMessageList) Optional(org.whispersystems.libsignal.util.guava.Optional) UnregisteredUserException(org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException) ByteString(com.google.protobuf.ByteString) List(java.util.List) GroupStaleDevices(org.whispersystems.signalservice.internal.push.GroupStaleDevices) Base64(org.whispersystems.util.Base64) SendGroupMessageResponse(org.whispersystems.signalservice.internal.push.SendGroupMessageResponse) ResponseMapper(org.whispersystems.signalservice.internal.websocket.ResponseMapper) ServiceResponseProcessor(org.whispersystems.signalservice.internal.ServiceResponseProcessor) GroupMismatchedDevicesException(org.whispersystems.signalservice.internal.push.exceptions.GroupMismatchedDevicesException) WebSocketRequestMessage(org.whispersystems.signalservice.internal.websocket.WebSocketProtos.WebSocketRequestMessage) SecureRandom(java.security.SecureRandom) NotFoundException(org.whispersystems.signalservice.api.push.exceptions.NotFoundException) ByteString(com.google.protobuf.ByteString) LinkedList(java.util.LinkedList) GroupStaleDevicesException(org.whispersystems.signalservice.internal.push.exceptions.GroupStaleDevicesException) ServiceResponse(org.whispersystems.signalservice.internal.ServiceResponse) GroupStaleDevices(org.whispersystems.signalservice.internal.push.GroupStaleDevices) InvalidUnidentifiedAccessHeaderException(org.whispersystems.signalservice.internal.push.exceptions.InvalidUnidentifiedAccessHeaderException)

Aggregations

ByteString (com.google.protobuf.ByteString)1 Single (io.reactivex.rxjava3.core.Single)1 SecureRandom (java.security.SecureRandom)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Locale (java.util.Locale)1 Optional (org.whispersystems.libsignal.util.guava.Optional)1 SignalWebSocket (org.whispersystems.signalservice.api.SignalWebSocket)1 UnidentifiedAccess (org.whispersystems.signalservice.api.crypto.UnidentifiedAccess)1 NotFoundException (org.whispersystems.signalservice.api.push.exceptions.NotFoundException)1 UnregisteredUserException (org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException)1 ServiceResponse (org.whispersystems.signalservice.internal.ServiceResponse)1 ServiceResponseProcessor (org.whispersystems.signalservice.internal.ServiceResponseProcessor)1 GroupMismatchedDevices (org.whispersystems.signalservice.internal.push.GroupMismatchedDevices)1 GroupStaleDevices (org.whispersystems.signalservice.internal.push.GroupStaleDevices)1 OutgoingPushMessageList (org.whispersystems.signalservice.internal.push.OutgoingPushMessageList)1 SendGroupMessageResponse (org.whispersystems.signalservice.internal.push.SendGroupMessageResponse)1 SendMessageResponse (org.whispersystems.signalservice.internal.push.SendMessageResponse)1 GroupMismatchedDevicesException (org.whispersystems.signalservice.internal.push.exceptions.GroupMismatchedDevicesException)1 GroupStaleDevicesException (org.whispersystems.signalservice.internal.push.exceptions.GroupStaleDevicesException)1