2929import javax .validation .constraints .NotNull ;
3030import javax .ws .rs .Consumes ;
3131import javax .ws .rs .GET ;
32+ import javax .ws .rs .NotFoundException ;
3233import javax .ws .rs .POST ;
3334import javax .ws .rs .Path ;
3435import javax .ws .rs .Produces ;
3536import 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" )
4044public 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}
0 commit comments