diff options
| author | Dhandapani <dhandapani@gluster.com> | 2011-06-24 10:49:34 +0530 |
|---|---|---|
| committer | Dhandapani <dhandapani@gluster.com> | 2011-06-24 10:49:34 +0530 |
| commit | 6dde8626a781ae07d449984d14d63e534059706c (patch) | |
| tree | c3352ba08bad061d7161dd206b2048dc6b23169e /src/com.gluster.storage.management.server | |
| parent | e6518b703800c986b90f2fe570d64edb8c32a813 (diff) | |
| parent | 83e384323d8c9ac3ad78084663c477eb6729eeaa (diff) | |
Merge branch 'master' of git@github.com:gluster/console
Conflicts:
src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java
Diffstat (limited to 'src/com.gluster.storage.management.server')
3 files changed, 108 insertions, 73 deletions
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java index ee65add0..4523ff75 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java @@ -123,6 +123,15 @@ public class AbstractResource { protected Response badRequestResponse(String errMessage) { return Response.status(Status.BAD_REQUEST).type(MediaType.TEXT_HTML).entity(errMessage).build(); } + + /** + * Creates a response with HTTP status code of 401 (unauthorized) + * + * @return the {@link Response} object + */ + protected Response unauthorizedResponse() { + return Response.status(Status.UNAUTHORIZED).build(); + } /** * Creates an OK response and sets the entity in the response body. @@ -138,6 +147,17 @@ public class AbstractResource { } /** + * Creates an OK response without any entity in the response body. + * + * @param mediaType + * Media type to be set on the response + * @return the {@link Response} object + */ + protected Response okResponse(String mediaType) { + return Response.ok().type(mediaType).build(); + } + + /** * Creates a streaming output response and sets the given streaming output in the response. Typically used for * "download" requests * diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java index aba88d82..ee9d3600 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java @@ -18,6 +18,8 @@ *******************************************************************************/ package com.gluster.storage.management.server.resources; +import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME; +import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS; import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS; import java.util.ArrayList; @@ -29,16 +31,13 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import org.springframework.stereotype.Component; -import com.gluster.storage.management.core.constants.CoreConstants; -import com.gluster.storage.management.core.model.Response; import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.model.Status; -import com.gluster.storage.management.core.response.GenericResponse; import com.gluster.storage.management.core.response.ServerListResponse; -import com.gluster.storage.management.core.response.StringListResponse; +import com.gluster.storage.management.core.response.ServerNameListResponse; import com.sun.jersey.spi.resource.Singleton; @Component @@ -67,57 +66,76 @@ public class DiscoveredServersResource extends AbstractServersResource { @GET @Produces(MediaType.APPLICATION_XML) - @SuppressWarnings("rawtypes") - public Response getDiscoveredServers(@QueryParam("details") Boolean getDetails) { - if(getDetails != null && getDetails == true) { - return getDiscoveredServerDetails(); + public Response getDiscoveredServersXML(@QueryParam(QUERY_PARAM_DETAILS) Boolean details) { + return getDiscoveredServersResponse(details, MediaType.APPLICATION_XML); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getDiscoveredServersJSON(@QueryParam(QUERY_PARAM_DETAILS) Boolean details) { + return getDiscoveredServersResponse(details, MediaType.APPLICATION_JSON); + } + + private Response getDiscoveredServersResponse(Boolean details, String mediaType) { + if(details != null && details == true) { + try { + List<Server> discoveredServers = getDiscoveredServerDetails(); + return okResponse(new ServerListResponse(discoveredServers), mediaType); + } catch(Exception e) { + return errorResponse(e.getMessage()); + } + } else { + return okResponse(new ServerNameListResponse(getDiscoveredServerNames()), mediaType); } - return new StringListResponse(getDiscoveredServerNames()); } - private ServerListResponse getDiscoveredServerDetails() { + private List<Server> getDiscoveredServerDetails() { List<Server> discoveredServers = new ArrayList<Server>(); - List<String> serverNames = getDiscoveredServerNames(); - GenericResponse<Server> discoveredServerResponse; - int errCount = 0; - StringBuilder errMsg = new StringBuilder("Couldn't fetch details for server(s): "); - for (String serverName : serverNames) { - discoveredServerResponse = getDiscoveredServer(serverName); - if (!discoveredServerResponse.getStatus().isSuccess()) { - errMsg.append(CoreConstants.NEWLINE + serverName + " : " + discoveredServerResponse.getStatus()); - errCount++; - } else { - discoveredServers.add(discoveredServerResponse.getData()); + for (String serverName : getDiscoveredServerNames()) { + try { + discoveredServers.add(getDiscoveredServer(serverName)); + } catch(Exception e) { + // TODO: Log the exception + // continue with next discovered server } } - Status status = null; - if(errCount == 0) { - status = new Status(Status.STATUS_CODE_SUCCESS, "Success"); - } else if(errCount == serverNames.size()) { - status = new Status(Status.STATUS_CODE_FAILURE, errMsg.toString()); - } else { - status = new Status(Status.STATUS_CODE_PART_SUCCESS, errMsg.toString()); - } - return new ServerListResponse(status, discoveredServers); + return discoveredServers; } - @Path("/{serverName}") + @Path("{" + PATH_PARAM_SERVER_NAME + "}") @GET @Produces(MediaType.APPLICATION_XML) - public GenericResponse<Server> getDiscoveredServer(@PathParam("serverName") String serverName) { - Server server = new Server(serverName); + public Response getDiscoveredServerXML(@PathParam(PATH_PARAM_SERVER_NAME) String serverName) { + return getDiscoveredServerResponse(serverName, MediaType.APPLICATION_XML); + } + + @Path("{" + PATH_PARAM_SERVER_NAME + "}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getDiscoveredServerJSON(@PathParam(PATH_PARAM_SERVER_NAME) String serverName) { + return getDiscoveredServerResponse(serverName, MediaType.APPLICATION_JSON); + } + + private Response getDiscoveredServerResponse(String serverName, String mediaType) { + if(serverName == null || serverName.isEmpty()) { + return badRequestResponse("Server name must not be empty!"); + } try { - fetchServerDetails(server); + return okResponse(getDiscoveredServer(serverName), mediaType); } catch (Exception e) { - return new GenericResponse<Server>(new Status(e), null); + // TODO: Log the exception + return errorResponse(e.getMessage()); } - return new GenericResponse<Server>(Status.STATUS_SUCCESS, server); + } + + private Server getDiscoveredServer(String serverName) { + Server server = new Server(serverName); + fetchServerDetails(server); + return server; } public static void main(String[] args) { - StringListResponse listResponse = (StringListResponse)new DiscoveredServersResource().getDiscoveredServers(false); - for (String server : listResponse.getData()) { - System.out.println(server); - } + Response response = (Response)new DiscoveredServersResource().getDiscoveredServersXML(false); + System.out.println(response.getEntity()); } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java index 0326793b..1b1f0d72 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java @@ -18,6 +18,9 @@ *******************************************************************************/ package com.gluster.storage.management.server.resources; +import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_USER; +import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_USERS; + import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.PUT; @@ -25,6 +28,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.encoding.PasswordEncoder; @@ -38,55 +42,48 @@ import com.sun.jersey.spi.resource.Singleton; @Singleton @Component -@Path("/users") -public class UsersResource { +@Path(RESOURCE_PATH_USERS) +public class UsersResource extends AbstractResource { @Autowired private JdbcUserDetailsManager jdbcUserService; @Autowired private PasswordEncoder passwordEncoder; - /** - * Authenticates given user with given password for login on current system - * - * @param user - * @param password - * @return true is user can be successfully authenticated using given password, else false - */ - /* - * NOTE: This method is no more required as user authentication is performed on every request by the spring security - * framework. Can be removed after testing. - */ - /* - * private boolean authenticate(String user, String password) { String tmpFileName = "tmp"; File saltFile = new - * File(tmpFileName); ProcessResult result = new ProcessUtil().executeCommand("get-user-password.py", user, - * tmpFileName); if (result.isSuccess()) { String salt = new FileUtil().readFileAsString(saltFile); String - * encryptedPassword = MD5Crypt.crypt(password, salt); return encryptedPassword.equals(salt); } - * - * return false; } - */ - - @Path("{user}") + @Path("{" + PATH_PARAM_USER + "}") @GET @Produces(MediaType.APPLICATION_XML) - public Status authenticate(@PathParam("user") String user) { + public Response authenticateXML(@PathParam("user") String user) { + // success only if the user passed in query is same as the one passed in security header + // spring security would have already authenticated the user credentials + return getAuthenticationResponse(user, MediaType.APPLICATION_XML); + } + + @Path("{" + PATH_PARAM_USER + "}") + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response authenticateJSON(@PathParam("user") String user) { // success only if the user passed in query is same as the one passed in security header // spring security would have already authenticated the user credentials - return (SecurityContextHolder.getContext().getAuthentication().getName().equals(user) ? Status.STATUS_SUCCESS - : Status.STATUS_FAILURE); + return getAuthenticationResponse(user, MediaType.APPLICATION_JSON); } - @Path("{user}") + public Response getAuthenticationResponse(String user, String mediaType) { + return (SecurityContextHolder.getContext().getAuthentication().getName().equals(user) ? okResponse(mediaType) + : unauthorizedResponse()); + } + + @Path("{" + PATH_PARAM_USER + "}") @PUT - @Produces(MediaType.APPLICATION_XML) - public Status changePassword(@FormParam("oldpassword") String oldPassword, + public Response changePassword(@FormParam("oldpassword") String oldPassword, @FormParam("newpassword") String newPassword) { try { jdbcUserService.changePassword(oldPassword, passwordEncoder.encodePassword(newPassword, null)); - } catch (AuthenticationException ex) { + } catch (Exception ex) { + // TODO: Log the exception ex.printStackTrace(); - return new Status(Status.STATUS_CODE_FAILURE, "Could not change password: [" + ex.getMessage() + "]"); + return errorResponse("Could not change password. Error: [" + ex.getMessage() + "]"); } - return Status.STATUS_SUCCESS; + return noContentResponse(); } } |
