diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java index c91a644c0..ba2bb8ceb 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java @@ -46,7 +46,7 @@ public class ProvisioningController { { rateLimiters.getMessagesLimiter().validate(source.getNumber()); - if (!websocketSender.sendProvisioningMessage(new ProvisioningAddress(destinationName), + if (!websocketSender.sendProvisioningMessage(new ProvisioningAddress(destinationName, 0), Base64.decode(message.getBody()))) { throw new WebApplicationException(Response.Status.NOT_FOUND); diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java b/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java index f0019928f..fcdcb30b2 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java +++ b/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningAddress.java @@ -7,15 +7,16 @@ import java.security.SecureRandom; public class ProvisioningAddress extends WebsocketAddress { - private final String address; + public ProvisioningAddress(String address, int id) throws InvalidWebsocketAddressException { + super(address, id); + } - public ProvisioningAddress(String address) throws InvalidWebsocketAddressException { - super(address, 0); - this.address = address; + public ProvisioningAddress(String serialized) throws InvalidWebsocketAddressException { + super(serialized); } public String getAddress() { - return address; + return getNumber(); } public static ProvisioningAddress generate() { @@ -24,7 +25,7 @@ public class ProvisioningAddress extends WebsocketAddress { SecureRandom.getInstance("SHA1PRNG").nextBytes(random); return new ProvisioningAddress(Base64.encodeBytesWithoutPadding(random) - .replace('+', '-').replace('/', '_')); + .replace('+', '-').replace('/', '_'), 0); } catch (NoSuchAlgorithmException | InvalidWebsocketAddressException e) { throw new AssertionError(e); } diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java b/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java index 1fb0af3c2..694b23d46 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java +++ b/src/main/java/org/whispersystems/textsecuregcm/websocket/ProvisioningConnection.java @@ -52,10 +52,16 @@ public class ProvisioningConnection implements DispatchChannel { @Override public void onDispatchSubscribed(String channel) { - this.client.sendRequest("PUT", "/v1/address", Optional.of(ProvisioningUuid.newBuilder() - .setUuid(channel) - .build() - .toByteArray())); + try { + ProvisioningAddress address = new ProvisioningAddress(channel); + this.client.sendRequest("PUT", "/v1/address", Optional.of(ProvisioningUuid.newBuilder() + .setUuid(address.getAddress()) + .build() + .toByteArray())); + } catch (InvalidWebsocketAddressException e) { + logger.warn("Badly formatted address", e); + this.client.close(1001, "Server Error"); + } } @Override