Remove deprecated user-group web-service for API v1.1 (#769)
Change-Id: Iaf660040892e692194e1ba3fdd8298f68e6b42cd
diff --git a/Changes b/Changes
index 9c7da74..e7d2949 100644
--- a/Changes
+++ b/Changes
@@ -2,7 +2,10 @@
- Introduced APIDeprecationFilter (#759)
- Deprecated matchInfo web-service has been removed for API v1.1.
-- Remove deprecated Authorization Post web-service for API v1.1.
+- Remove deprecated Authorization Post web-service for API v1.1 (#767)
+- Remove deprecated user-group web-services for API v1.1 (#769)
+
+
# version 0.79.1
diff --git a/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java b/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
index fa3607c..6e7d1fd 100644
--- a/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
+++ b/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
@@ -15,6 +15,7 @@
import de.ids_mannheim.korap.security.context.TokenContext;
import de.ids_mannheim.korap.service.UserGroupService;
import de.ids_mannheim.korap.web.KustvaktResponseHandler;
+import de.ids_mannheim.korap.web.filter.APIDeprecationFilter;
import de.ids_mannheim.korap.web.filter.APIVersionFilter;
import de.ids_mannheim.korap.web.filter.AuthenticationFilter;
import de.ids_mannheim.korap.web.filter.BlockingFilter;
@@ -203,6 +204,8 @@
@POST
@Path("@{groupName}/invite")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @ResourceFilters({APIDeprecationFilter.class,
+ AuthenticationFilter.class, BlockingFilter.class})
public Response inviteGroupMembers (
@Context SecurityContext securityContext,
@PathParam("groupName") String groupName,
@@ -251,6 +254,8 @@
@POST
@Path("@{groupName}/role/add")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @ResourceFilters({APIDeprecationFilter.class,
+ AuthenticationFilter.class, BlockingFilter.class})
public Response addMemberRoles (@Context SecurityContext securityContext,
@PathParam("groupName") String groupName,
@FormParam("memberUsername") String memberUsername,
@@ -350,6 +355,8 @@
@Deprecated
@POST
@Path("@{groupName}/subscribe")
+ @ResourceFilters({APIDeprecationFilter.class,
+ AuthenticationFilter.class, BlockingFilter.class})
public Response subscribeToGroup (@Context SecurityContext securityContext,
@PathParam("groupName") String groupName) {
throw kustvaktResponseHandler.throwit(new KustvaktException(
@@ -373,6 +380,8 @@
@Deprecated
@DELETE
@Path("@{groupName}/unsubscribe")
+ @ResourceFilters({APIDeprecationFilter.class,
+ AuthenticationFilter.class, BlockingFilter.class})
public Response unsubscribeFromGroup (
@Context SecurityContext securityContext,
@PathParam("groupName") String groupName) {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/usergroup/UserGroupDeprecationTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/usergroup/UserGroupDeprecationTest.java
new file mode 100644
index 0000000..12d803b
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/usergroup/UserGroupDeprecationTest.java
@@ -0,0 +1,107 @@
+package de.ids_mannheim.korap.web.controller.usergroup;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
+import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.SpringJerseyTest;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.utils.JsonUtils;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.core.Form;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
+
+public class UserGroupDeprecationTest extends SpringJerseyTest{
+
+ private String groupName= "GroupV1_0";
+
+ private void testDeprecation (Response response) throws KustvaktException {
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+ String entity = response.readEntity(String.class);
+ JsonNode node = JsonUtils.readTree(entity);
+ assertEquals(StatusCodes.DEPRECATED,
+ node.at("/errors/0/0").asInt());
+ }
+
+ @Test
+ public void testV1_0 () throws KustvaktException {
+ Form form = new Form();
+ form.param("members", "marlin");
+
+ // invite member
+ Response response = target().path(API_VERSION_V1_0).path("group")
+ .path("@" + groupName+"/invite").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .post(Entity.form(form));
+ testDeprecation(response);
+
+ // add member role
+ response = target().path(API_VERSION_V1_0).path("group")
+ .path("@" + groupName+"/role/add").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .post(Entity.form(form));
+ testDeprecation(response);
+
+ // subscribe
+ response = target().path(API_VERSION_V1_0).path("group")
+ .path("@" + groupName+"/subscribe").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .post(Entity.form(form));
+ testDeprecation(response);
+
+ // unsusbcribe
+ response = target().path(API_VERSION_V1_0).path("group")
+ .path("@" + groupName+"/unsubscribe").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .delete();
+ testDeprecation(response);
+ }
+
+ @Test
+ public void testCurrentVersion () throws KustvaktException {
+ Form form = new Form();
+ form.param("members", "marlin");
+
+ // invite member
+ Response response = target().path(API_VERSION).path("group")
+ .path("@" + groupName+"/invite").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .post(Entity.form(form));
+ assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+
+ // add member role
+ response = target().path(API_VERSION).path("group")
+ .path("@" + groupName+"/role/add").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .post(Entity.form(form));
+ assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+
+ // subscribe
+ response = target().path(API_VERSION).path("group")
+ .path("@" + groupName+"/subscribe").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .post(Entity.form(form));
+ assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+
+ // unsusbcribe
+ response = target().path(API_VERSION).path("group")
+ .path("@" + groupName+"/unsubscribe").request()
+ .header(Attributes.AUTHORIZATION, HttpAuthorizationHandler
+ .createBasicAuthorizationHeaderValue("dory", "pass"))
+ .delete();
+ assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+ }
+}