Make WebSocket optional, disabled by default. Add tests.

This commit is contained in:
Moxie Marlinspike
2014-02-12 14:39:45 -08:00
parent a9994ef5aa
commit a6463df5bb
13 changed files with 250 additions and 4 deletions

View File

@@ -29,6 +29,7 @@ import org.whispersystems.textsecuregcm.configuration.RateLimitsConfiguration;
import org.whispersystems.textsecuregcm.configuration.RedisConfiguration;
import org.whispersystems.textsecuregcm.configuration.S3Configuration;
import org.whispersystems.textsecuregcm.configuration.TwilioConfiguration;
import org.whispersystems.textsecuregcm.configuration.WebsocketConfiguration;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@@ -83,6 +84,14 @@ public class WhisperServerConfiguration extends Configuration {
@JsonProperty
private GraphiteConfiguration graphite = new GraphiteConfiguration();
@Valid
@JsonProperty
private WebsocketConfiguration websocket = new WebsocketConfiguration();
public WebsocketConfiguration getWebsocketConfiguration() {
return websocket;
}
public TwilioConfiguration getTwilioConfiguration() {
return twilio;
}

View File

@@ -147,8 +147,11 @@ public class WhisperServerService extends Service<WhisperServerConfiguration> {
environment.addResource(keysController);
environment.addResource(messageController);
environment.addServlet(new WebsocketControllerFactory(deviceAuthenticator, storedMessageManager, pubSubManager),
"/v1/websocket/");
if (config.getWebsocketConfiguration().isEnabled()) {
environment.addServlet(new WebsocketControllerFactory(deviceAuthenticator, storedMessageManager, pubSubManager),
"/v1/websocket/");
environment.addFilter(new CORSHeaderFilter(), "/*");
}
environment.addHealthCheck(new RedisHealthCheck(redisClient));
environment.addHealthCheck(new MemcacheHealthCheck(memcachedClient));
@@ -156,8 +159,6 @@ public class WhisperServerService extends Service<WhisperServerConfiguration> {
environment.addProvider(new IOExceptionMapper());
environment.addProvider(new RateLimitExceededExceptionMapper());
environment.addFilter(new CORSHeaderFilter(), "/*");
if (config.getGraphiteConfiguration().isEnabled()) {
GraphiteReporter.enable(15, TimeUnit.SECONDS,
config.getGraphiteConfiguration().getHost(),

View File

@@ -0,0 +1,14 @@
package org.whispersystems.textsecuregcm.configuration;
import com.fasterxml.jackson.annotation.JsonProperty;
public class WebsocketConfiguration {
@JsonProperty
private boolean enabled = false;
public boolean isEnabled() {
return enabled;
}
}

View File

@@ -1,6 +1,7 @@
package org.whispersystems.textsecuregcm.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.annotations.VisibleForTesting;
import java.util.List;
@@ -12,6 +13,9 @@ public class MismatchedDevices {
@JsonProperty
public List<Long> extraDevices;
@VisibleForTesting
public MismatchedDevices() {}
public MismatchedDevices(List<Long> missingDevices, List<Long> extraDevices) {
this.missingDevices = missingDevices;
this.extraDevices = extraDevices;

View File

@@ -19,6 +19,7 @@ package org.whispersystems.textsecuregcm.storage;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
import java.io.Serializable;
@@ -51,6 +52,13 @@ public class Account implements Serializable {
this.supportsSms = supportsSms;
}
@VisibleForTesting
public Account(String number, boolean supportsSms, List<Device> devices) {
this.number = number;
this.supportsSms = supportsSms;
this.devices = devices;
}
public long getId() {
return id;
}