Introduce a filter for correcting numeric "online" flags
This commit is contained in:
parent
1461bcc2c2
commit
888cec3d56
|
@ -79,6 +79,7 @@ import org.whispersystems.textsecuregcm.badges.ConfiguredProfileBadgeConverter;
|
||||||
import org.whispersystems.textsecuregcm.badges.ResourceBundleLevelTranslator;
|
import org.whispersystems.textsecuregcm.badges.ResourceBundleLevelTranslator;
|
||||||
import org.whispersystems.textsecuregcm.configuration.DirectoryServerConfiguration;
|
import org.whispersystems.textsecuregcm.configuration.DirectoryServerConfiguration;
|
||||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
|
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
|
||||||
|
import org.whispersystems.textsecuregcm.controllers.AcceptNumericOnlineFlagRequestFilter;
|
||||||
import org.whispersystems.textsecuregcm.controllers.AccountController;
|
import org.whispersystems.textsecuregcm.controllers.AccountController;
|
||||||
import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV1;
|
import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV1;
|
||||||
import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV2;
|
import org.whispersystems.textsecuregcm.controllers.AttachmentControllerV2;
|
||||||
|
@ -610,7 +611,12 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
.addFilter("RemoteDeprecationFilter", new RemoteDeprecationFilter(dynamicConfigurationManager))
|
.addFilter("RemoteDeprecationFilter", new RemoteDeprecationFilter(dynamicConfigurationManager))
|
||||||
.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
|
.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
|
||||||
|
|
||||||
|
// TODO Remove on or after 2022-03-01
|
||||||
|
final AcceptNumericOnlineFlagRequestFilter acceptNumericOnlineFlagRequestFilter =
|
||||||
|
new AcceptNumericOnlineFlagRequestFilter("v1/messages/multi_recipient");
|
||||||
|
|
||||||
environment.jersey().register(new ContentLengthFilter(TrafficSource.HTTP));
|
environment.jersey().register(new ContentLengthFilter(TrafficSource.HTTP));
|
||||||
|
environment.jersey().register(acceptNumericOnlineFlagRequestFilter);
|
||||||
environment.jersey().register(MultiRecipientMessageProvider.class);
|
environment.jersey().register(MultiRecipientMessageProvider.class);
|
||||||
environment.jersey().register(new MetricsApplicationEventListener(TrafficSource.HTTP));
|
environment.jersey().register(new MetricsApplicationEventListener(TrafficSource.HTTP));
|
||||||
environment.jersey()
|
environment.jersey()
|
||||||
|
@ -632,6 +638,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
clientPresenceManager, retrySchedulingExecutor));
|
clientPresenceManager, retrySchedulingExecutor));
|
||||||
webSocketEnvironment.jersey().register(new WebsocketRefreshApplicationEventListener(accountsManager, clientPresenceManager));
|
webSocketEnvironment.jersey().register(new WebsocketRefreshApplicationEventListener(accountsManager, clientPresenceManager));
|
||||||
webSocketEnvironment.jersey().register(new ContentLengthFilter(TrafficSource.WEBSOCKET));
|
webSocketEnvironment.jersey().register(new ContentLengthFilter(TrafficSource.WEBSOCKET));
|
||||||
|
webSocketEnvironment.jersey().register(acceptNumericOnlineFlagRequestFilter);
|
||||||
webSocketEnvironment.jersey().register(MultiRecipientMessageProvider.class);
|
webSocketEnvironment.jersey().register(MultiRecipientMessageProvider.class);
|
||||||
webSocketEnvironment.jersey().register(new MetricsApplicationEventListener(TrafficSource.WEBSOCKET));
|
webSocketEnvironment.jersey().register(new MetricsApplicationEventListener(TrafficSource.WEBSOCKET));
|
||||||
webSocketEnvironment.jersey().register(new KeepAliveController(clientPresenceManager));
|
webSocketEnvironment.jersey().register(new KeepAliveController(clientPresenceManager));
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013-2021 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.whispersystems.textsecuregcm.controllers;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
|
import javax.ws.rs.container.ContainerRequestFilter;
|
||||||
|
import javax.ws.rs.container.PreMatching;
|
||||||
|
|
||||||
|
@PreMatching
|
||||||
|
public class AcceptNumericOnlineFlagRequestFilter implements ContainerRequestFilter {
|
||||||
|
|
||||||
|
private final String pathPrefix;
|
||||||
|
|
||||||
|
public AcceptNumericOnlineFlagRequestFilter(final String pathPrefix) {
|
||||||
|
this.pathPrefix = pathPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void filter(final ContainerRequestContext requestContext) throws IOException {
|
||||||
|
if (requestContext.getUriInfo().getPath().startsWith(pathPrefix)) {
|
||||||
|
if ("1".equals(requestContext.getUriInfo().getQueryParameters().getFirst("online"))) {
|
||||||
|
requestContext.setRequestUri(requestContext.getUriInfo().getRequestUriBuilder()
|
||||||
|
.replaceQueryParam("online", "true")
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013-2021 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.whispersystems.textsecuregcm.controllers;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
import io.dropwizard.testing.junit5.DropwizardExtensionsSupport;
|
||||||
|
import io.dropwizard.testing.junit5.ResourceExtension;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.CsvSource;
|
||||||
|
|
||||||
|
@ExtendWith(DropwizardExtensionsSupport.class)
|
||||||
|
class AcceptNumericOnlineFlagRequestFilterTest {
|
||||||
|
|
||||||
|
@Path("/test")
|
||||||
|
public static class TestResource {
|
||||||
|
|
||||||
|
@Path("/convert-boolean")
|
||||||
|
@GET
|
||||||
|
public boolean convertBoolean(@QueryParam("online") final boolean online) {
|
||||||
|
return online;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("/no-conversion")
|
||||||
|
@GET
|
||||||
|
public boolean noConversion(@QueryParam("online") final boolean online) {
|
||||||
|
return online;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final ResourceExtension RESOURCE_EXTENSION = ResourceExtension.builder()
|
||||||
|
.addProvider(new AcceptNumericOnlineFlagRequestFilter("test/convert-boolean"))
|
||||||
|
.setTestContainerFactory(new GrizzlyWebTestContainerFactory())
|
||||||
|
.addResource(new TestResource())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@CsvSource({
|
||||||
|
"/test/convert-boolean, true, true",
|
||||||
|
"/test/convert-boolean, false, false",
|
||||||
|
"/test/convert-boolean, 1, true",
|
||||||
|
"/test/convert-boolean, 0, false",
|
||||||
|
"/test/no-conversion, true, true",
|
||||||
|
"/test/no-conversion, false, false",
|
||||||
|
"/test/no-conversion, 1, false",
|
||||||
|
"/test/no-conversion, 0, false"
|
||||||
|
})
|
||||||
|
void filter(final String path, final String value, final boolean expected) {
|
||||||
|
final boolean response =
|
||||||
|
RESOURCE_EXTENSION.getJerseyTest()
|
||||||
|
.target(path)
|
||||||
|
.queryParam("online", value)
|
||||||
|
.request()
|
||||||
|
.get(boolean.class);
|
||||||
|
|
||||||
|
assertEquals(expected, response);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue