Skip to content
This repository was archived by the owner on Dec 23, 2017. It is now read-only.

Commit 2ee23c2

Browse files
committed
Merge pull request #10 from Graylog2/opt-out-extension
Secure opt-out JAX-RS resource
2 parents 48af772 + a11e6de commit 2ee23c2

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

src/main/java/org/graylog/plugins/usagestatistics/UsageStatsOptOutResource.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,21 @@
2929
import javax.validation.constraints.NotNull;
3030
import javax.ws.rs.Consumes;
3131
import javax.ws.rs.GET;
32+
import javax.ws.rs.NotFoundException;
3233
import javax.ws.rs.POST;
3334
import javax.ws.rs.Path;
3435
import javax.ws.rs.Produces;
3536
import javax.ws.rs.core.MediaType;
3637

38+
import static org.graylog2.shared.security.RestPermissions.CLUSTER_CONFIG_ENTRY_CREATE;
39+
import static org.graylog2.shared.security.RestPermissions.CLUSTER_CONFIG_ENTRY_READ;
40+
3741
@RequiresAuthentication
3842
@Api(value = "Usage Statistics Opt-Out", description = "Anonymous usage statistics opt-out state of this Graylog setup")
3943
@Path("/opt-out")
4044
public class UsageStatsOptOutResource extends RestResource implements PluginRestResource {
45+
private static final String CLUSTER_CONFIG_INSTANCE = UsageStatsOptOutState.class.getCanonicalName();
46+
4147
private final UsageStatsOptOutService usageStatsOptOutService;
4248

4349
@Inject
@@ -50,10 +56,19 @@ public UsageStatsOptOutResource(UsageStatsOptOutService usageStatsOptOutService)
5056
@Timed
5157
@ApiOperation(value = "Get opt-out status")
5258
@ApiResponses(value = {
59+
@ApiResponse(code = 404, message = "Opt-out status does not exist"),
5360
@ApiResponse(code = 500, message = "Internal Server Error")
5461
})
5562
public UsageStatsOptOutState getOptOutState() {
56-
return usageStatsOptOutService.getOptOutState();
63+
checkPermission(CLUSTER_CONFIG_ENTRY_READ, CLUSTER_CONFIG_INSTANCE);
64+
65+
final UsageStatsOptOutState optOutState = usageStatsOptOutService.getOptOutState();
66+
67+
if (optOutState == null) {
68+
throw new NotFoundException();
69+
}
70+
71+
return optOutState;
5772
}
5873

5974
@POST
@@ -66,6 +81,8 @@ public UsageStatsOptOutState getOptOutState() {
6681
@ApiResponse(code = 500, message = "Internal Server Error")
6782
})
6883
public void setOptOutState(@Valid @NotNull UsageStatsOptOutState optOutState) {
84+
checkPermission(CLUSTER_CONFIG_ENTRY_CREATE, CLUSTER_CONFIG_INSTANCE);
85+
6986
usageStatsOptOutService.setOptOutState(optOutState);
7087
}
7188
}

src/main/java/org/graylog/plugins/usagestatistics/UsageStatsOptOutService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,9 @@ public UsageStatsOptOutService(ClusterConfigService clusterConfigService,
6060
this.objectMapper = objectMapper;
6161
}
6262

63+
@Nullable
6364
public UsageStatsOptOutState getOptOutState() {
64-
return clusterConfigService.getOrDefault(UsageStatsOptOutState.class, UsageStatsOptOutState.create(false));
65+
return clusterConfigService.get(UsageStatsOptOutState.class);
6566
}
6667

6768
public void setOptOutState(final UsageStatsOptOutState optOutState) {

src/test/java/org/graylog/plugins/usagestatistics/UsageStatsOptOutServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void tearDown() throws Exception {
8484
@Test
8585
public void testGetOptOutState() throws Exception {
8686
clusterConfigService.clear();
87-
assertThat(optOutService.getOptOutState().isOptOut()).isFalse();
87+
assertThat(optOutService.getOptOutState()).isNull();
8888

8989
clusterConfigService.write(UsageStatsOptOutState.create(false));
9090
assertThat(optOutService.getOptOutState().isOptOut()).isFalse();

0 commit comments

Comments
 (0)