JAMES-2099 Swagger API for User and Domains
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9ed12378 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9ed12378 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9ed12378 Branch: refs/heads/master Commit: 9ed12378ac12f5318cf5a3b5daa215023fb37930 Parents: 5c2baa7 Author: quynhn <qngu...@linagora.com> Authored: Wed Jul 26 15:21:20 2017 +0700 Committer: quynhn <qngu...@linagora.com> Committed: Mon Jul 31 10:57:08 2017 +0700 ---------------------------------------------------------------------- .../james/webadmin/routes/DomainRoutes.java | 83 ++++++++++++++++++-- .../james/webadmin/routes/UserRoutes.java | 69 +++++++++++++++- 2 files changed, 143 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/9ed12378/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainRoutes.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainRoutes.java index 2008278..60c8952 100644 --- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainRoutes.java +++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainRoutes.java @@ -21,13 +21,26 @@ package org.apache.james.webadmin.routes; import static org.apache.james.webadmin.Constants.SEPARATOR; +import java.util.List; import javax.inject.Inject; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; import org.apache.james.domainlist.api.DomainList; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.webadmin.Constants; import org.apache.james.webadmin.Routes; import org.apache.james.webadmin.utils.JsonTransformer; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,6 +51,9 @@ import spark.Request; import spark.Response; import spark.Service; +@Api(tags = "Domains") +@Path(DomainRoutes.DOMAINS) +@Produces("application/json") public class DomainRoutes implements Routes { private static final String DOMAIN_NAME = ":domainName"; @@ -50,6 +66,7 @@ public class DomainRoutes implements Routes { private final DomainList domainList; private final JsonTransformer jsonTransformer; + private Service service; @Inject public DomainRoutes(DomainList domainList, JsonTransformer jsonTransformer) { @@ -59,17 +76,73 @@ public class DomainRoutes implements Routes { @Override public void define(Service service) { - service.get(DOMAINS, - (request, response) -> domainList.getDomains(), - jsonTransformer); + this.service = service; - service.get(SPECIFIC_DOMAIN, this::exists); + defineGetDomains(); - service.put(SPECIFIC_DOMAIN, this::addDomain); + defineDomainExists(); + + defineAddDomain(); + defineDeleteDomain(); + } + + @DELETE + @Path("/{domainName}") + @ApiOperation(value = "Deleting a domain") + @ApiImplicitParams({ + @ApiImplicitParam(required = true, dataType = "string", name = "domainName", paramType = "path") + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "OK. Domain is removed."), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineDeleteDomain() { service.delete(SPECIFIC_DOMAIN, this::removeDomain); } + @PUT + @Path("/{domainName}") + @ApiOperation(value = "Creating new domain") + @ApiImplicitParams({ + @ApiImplicitParam(required = true, dataType = "string", name = "domainName", paramType = "path") + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "OK. New domain is created."), + @ApiResponse(code = 400, message = "Invalid request for domain creation"), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineAddDomain() { + service.put(SPECIFIC_DOMAIN, this::addDomain); + } + + @GET + @Path("/{domainName}") + @ApiImplicitParams({ + @ApiImplicitParam(required = true, dataType = "string", name = "domainName", paramType = "path") + }) + @ApiOperation(value = "Testing existence of a domain.") + @ApiResponses(value = { + @ApiResponse(code = 204, message = "The domain exists", response = String.class), + @ApiResponse(code = 404, message = "The domain does not exist."), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineDomainExists() { + service.get(SPECIFIC_DOMAIN, this::exists); + } + + @GET + @ApiOperation(value = "Getting all domains") + @ApiResponses(value = { + @ApiResponse(code = 204, message = "OK", response = List.class), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineGetDomains() { + service.get(DOMAINS, + (request, response) -> domainList.getDomains(), + jsonTransformer); + } + private String removeDomain(Request request, Response response) { try { String domain = request.params(DOMAIN_NAME); http://git-wip-us.apache.org/repos/asf/james-project/blob/9ed12378/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java index 0ead90a..9c73542 100644 --- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java +++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java @@ -22,15 +22,28 @@ package org.apache.james.webadmin.routes; import static org.apache.james.webadmin.Constants.SEPARATOR; import javax.inject.Inject; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; import org.apache.james.user.api.UsersRepositoryException; import org.apache.james.webadmin.Constants; import org.apache.james.webadmin.Routes; import org.apache.james.webadmin.dto.AddUserRequest; +import org.apache.james.webadmin.dto.UserResponse; import org.apache.james.webadmin.service.UserService; import org.apache.james.webadmin.utils.JsonExtractException; import org.apache.james.webadmin.utils.JsonExtractor; import org.apache.james.webadmin.utils.JsonTransformer; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,6 +51,9 @@ import spark.Request; import spark.Response; import spark.Service; +@Api(tags = "Users") +@Path(UserRoutes.USERS) +@Produces("application/json") public class UserRoutes implements Routes { private static final String USER_NAME = ":userName"; @@ -49,6 +65,8 @@ public class UserRoutes implements Routes { private final JsonTransformer jsonTransformer; private final JsonExtractor<AddUserRequest> jsonExtractor; + private Service service; + @Inject public UserRoutes(UserService userService, JsonTransformer jsonTransformer) { this.userService = userService; @@ -58,15 +76,58 @@ public class UserRoutes implements Routes { @Override public void define(Service service) { - service.get(USERS, - (request, response) -> userService.getUsers(), - jsonTransformer); + this.service = service; - service.put(USERS + SEPARATOR + USER_NAME, this::upsertUser); + defineGetUsers(); + + defineCreateUser(); + + defineDeleteUser(); + } + @DELETE + @Path("/{username}") + @ApiOperation(value = "Deleting an user") + @ApiImplicitParams({ + @ApiImplicitParam(required = true, dataType = "string", name = "username", paramType = "path") + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "OK. User is removed."), + @ApiResponse(code = 400, message = "Invalid input user."), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineDeleteUser() { service.delete(USERS + SEPARATOR + USER_NAME, this::removeUser); } + @PUT + @Path("/{username}") + @ApiOperation(value = "Creating an user") + @ApiImplicitParams({ + @ApiImplicitParam(required = true, dataType = "string", name = "username", paramType = "path"), + @ApiImplicitParam(required = true, dataType = "org.apache.james.webadmin.dto.AddUserRequest", paramType = "body") + }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "OK. New user is added."), + @ApiResponse(code = 400, message = "Invalid input user."), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineCreateUser() { + service.put(USERS + SEPARATOR + USER_NAME, this::upsertUser); + } + + @GET + @ApiOperation(value = "Getting all users") + @ApiResponses(value = { + @ApiResponse(code = 204, message = "OK.", response = UserResponse.class), + @ApiResponse(code = 500, message = "Internal server error - Something went bad on the server side.") + }) + public void defineGetUsers() { + service.get(USERS, + (request, response) -> userService.getUsers(), + jsonTransformer); + } + private String removeUser(Request request, Response response) { String username = request.params(USER_NAME); try { --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org