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 | |
| 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')
14 files changed, 294 insertions, 226 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java index 9eaaca93..3d13a8de 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java @@ -126,7 +126,7 @@ public abstract class AbstractClient { return res.queryParams(queryParams)
.header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML).get(responseClass);
} catch(UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class), e);
}
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java index dadeadf8..31809c75 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java @@ -74,27 +74,29 @@ public class ClustersClient extends AbstractClient { public static void main(String args[]) { UsersClient usersClient = new UsersClient(); - Status authStatus = usersClient.authenticate("gluster", "gluster"); - if (authStatus.isSuccess()) { - ClustersClient client = new ClustersClient(); - client.setSecurityToken(usersClient.getSecurityToken()); - System.out.println(client.getClusterNames()); - try { - client.createCluster("test1"); - } catch(GlusterRuntimeException e) { - System.out.println(e.getMessage()); - } - - System.out.println(client.getClusterNames()); - - try { - client.deleteCluster("test1"); - } catch (GlusterRuntimeException e) { - System.out.println(e.getMessage()); - } - System.out.println(client.getClusterNames()); - } else { - System.out.println("authentication failed: " + authStatus); + + try { + usersClient.authenticate("gluster", "gluster"); + } catch(Exception e) { + e.printStackTrace(); } + + ClustersClient client = new ClustersClient(); + client.setSecurityToken(usersClient.getSecurityToken()); + System.out.println(client.getClusterNames()); + try { + client.createCluster("test1"); + } catch (GlusterRuntimeException e) { + System.out.println(e.getMessage()); + } + + System.out.println(client.getClusterNames()); + + try { + client.deleteCluster("test1"); + } catch (GlusterRuntimeException e) { + System.out.println(e.getMessage()); + } + System.out.println(client.getClusterNames()); } } diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java index e055a2dd..3704e2ff 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java @@ -18,13 +18,17 @@ *******************************************************************************/ package com.gluster.storage.management.client; +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.List; + import javax.ws.rs.core.MultivaluedMap; import com.gluster.storage.management.core.model.Server; 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 static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS; +import com.gluster.storage.management.core.response.ServerNameListResponse; import com.sun.jersey.core.util.MultivaluedMapImpl; public class DiscoveredServersClient extends AbstractClient { @@ -43,38 +47,36 @@ public class DiscoveredServersClient extends AbstractClient { } @SuppressWarnings("rawtypes") - private Object getDiscoveredServers(Boolean getDetails, Class responseClass) { + private Object getDiscoveredServers(Boolean details, Class responseClass) { MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); - queryParams.putSingle("details", getDetails.toString()); + queryParams.putSingle(QUERY_PARAM_DETAILS, details.toString()); return fetchResource(queryParams, responseClass); } - public StringListResponse getDiscoveredServerNames() { - - return (StringListResponse) getDiscoveredServers(Boolean.FALSE, StringListResponse.class); + public List<String> getDiscoveredServerNames() { + return ((ServerNameListResponse) getDiscoveredServers(Boolean.FALSE, ServerNameListResponse.class)) + .getServerNames(); } - public ServerListResponse getDiscoveredServerDetails() { - return (ServerListResponse) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class); + public List<Server> getDiscoveredServerDetails() { + return ((ServerListResponse) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class)).getServers(); } - @SuppressWarnings("unchecked") public Server getServer(String serverName) { - GenericResponse<Server> response = (GenericResponse<Server>) fetchSubResource(serverName, GenericResponse.class); - return response.getData(); + return (Server) fetchSubResource(serverName, Server.class); } public static void main(String[] args) { UsersClient usersClient = new UsersClient(); - if (usersClient.authenticate("gluster", "gluster").isSuccess()) { + try { + usersClient.authenticate("gluster", "gluster"); DiscoveredServersClient serverResource = new DiscoveredServersClient(usersClient.getSecurityToken()); - StringListResponse discoveredServerNames = serverResource.getDiscoveredServerNames(); - System.out.println(discoveredServerNames.getData()); - ServerListResponse discoveredServers = serverResource.getDiscoveredServerDetails(); - System.out.println(discoveredServers.getData()); - - // Server serverDetails = ServerResource.getServer("localhost"); - // System.out.println(serverDetails.getName()); + List<String> discoveredServerNames = serverResource.getDiscoveredServerNames(); + System.out.println(discoveredServerNames); + List<Server> discoveredServers = serverResource.getDiscoveredServerDetails(); + System.out.println(discoveredServers); + } catch(Exception e) { + e.printStackTrace(); } } } diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java index 3c5aedf5..695fae19 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java @@ -105,14 +105,7 @@ public class GlusterDataModelManager { } private void initializeAutoDiscoveredServers(Cluster cluster) { - ServerListResponse discoveredServerListResponse = new DiscoveredServersClient(securityToken) - .getDiscoveredServerDetails(); - Status status = discoveredServerListResponse.getStatus(); - if (!status.isSuccess() && !status.isPartSuccess()) { - // TODO: Find a way to show warning in case of part success - throw new GlusterRuntimeException(discoveredServerListResponse.getStatus().getMessage()); - } - cluster.setAutoDiscoveredServers(discoveredServerListResponse.getData()); + cluster.setAutoDiscoveredServers(new DiscoveredServersClient(securityToken).getDiscoveredServerDetails()); } private void initializeVolumes(Cluster cluster) { diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java index 5316bdda..b6d0a426 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java @@ -72,7 +72,8 @@ public class GlusterServersClient extends AbstractClient { public static void main(String[] args) { UsersClient usersClient = new UsersClient(); - if (usersClient.authenticate("gluster", "gluster").isSuccess()) { + try { + usersClient.authenticate("gluster", "gluster"); GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken(), "cluster1"); List<GlusterServer> glusterServers = glusterServersClient.getServers(); for (GlusterServer server : glusterServers) { @@ -83,6 +84,8 @@ public class GlusterServersClient extends AbstractClient { Server srv = new Server(); srv.setName("server3"); glusterServersClient.addServer(srv); + } catch(Exception e) { + e.printStackTrace(); } } } diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java index 84ed4e4c..522b87c1 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java @@ -22,6 +22,7 @@ import java.net.ConnectException; import javax.ws.rs.core.Response; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Status; import com.sun.jersey.api.client.UniformInterfaceException; import com.sun.jersey.api.representation.Form; @@ -40,60 +41,57 @@ public class UsersClient extends AbstractClient { super(); } - public Status authenticate(String user, String password) { + public void authenticate(String user, String password) { setSecurityToken(generateSecurityToken(user, password)); try { - Status authStatus = (Status) fetchSubResource(user, Status.class); - if (!authStatus.isSuccess()) { - // authentication failed. clear security token. - setSecurityToken(null); - } - return authStatus; - } catch (UniformInterfaceException e) { - if ((e.getResponse().getStatus() == Response.Status.UNAUTHORIZED.getStatusCode())) { - // authentication failed. clear security token. - setSecurityToken(null); - return new Status(Status.STATUS_CODE_FAILURE, "Invalid user id or password!"); - } else { + fetchSubResource(user, String.class); + } catch (RuntimeException e) { + Throwable cause = e.getCause(); + if(cause == null) { throw e; } - } catch (Exception e) { - // authentication failed. clear security token. - setSecurityToken(null); - Throwable cause = e.getCause(); - if(cause != null && cause instanceof ConnectException) { - return new Status(Status.STATUS_CODE_FAILURE, "Couldn't connect to Gluster Management Gateway!"); + if (cause instanceof UniformInterfaceException) { + UniformInterfaceException e1 = (UniformInterfaceException) cause; + if ((e1.getResponse().getStatus() == Response.Status.UNAUTHORIZED.getStatusCode())) { + // authentication failed. clear security token. + setSecurityToken(null); + throw new GlusterRuntimeException("Invalid user id or password!"); + } else { + // TODO: Log the exception + throw new GlusterRuntimeException("Exception during authentication: [" + + e1.getResponse().getStatus() + "]"); + } + } else if(cause instanceof ConnectException) { + throw new GlusterRuntimeException("Couldn't connect to Gluster Management Gateway!"); + } else { + throw new GlusterRuntimeException("Exception during authentication: [" + e.getMessage() + "]"); } - return new Status(Status.STATUS_CODE_FAILURE, "Exception during authentication: [" + e.getMessage() + "]"); } } - public boolean changePassword(String user, String oldPassword, String newPassword) { + public void changePassword(String user, String oldPassword, String newPassword) { setSecurityToken(generateSecurityToken(user, oldPassword)); Form form = new Form(); form.add(FORM_PARAM_OLD_PASSWORD, oldPassword); form.add(FORM_PARAM_NEW_PASSWORD, newPassword); - try { - putRequest(user, form); - return true; - } catch (Exception e) { - return false; - } + putRequest(user, form); } public static void main(String[] args) { UsersClient authClient = new UsersClient(); // authenticate user - System.out.println(authClient.authenticate("gluster", "gluster")); + authClient.authenticate("gluster", "gluster"); // change password to gluster1 - System.out.println(authClient.changePassword("gluster", "gluster", "gluster1")); + authClient.changePassword("gluster", "gluster", "gluster1"); // change it back to gluster - System.out.println(authClient.changePassword("gluster", "gluster1", "gluster")); + authClient.changePassword("gluster", "gluster1", "gluster"); + + System.out.println("success"); } /* diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java index d237f010..c04389d1 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java @@ -232,10 +232,13 @@ public class VolumesClient extends AbstractClient { public static void main(String[] args) { UsersClient usersClient = new UsersClient(); - if (usersClient.authenticate("gluster", "gluster").isSuccess()) { + try { + usersClient.authenticate("gluster", "gluster"); VolumesClient client = new VolumesClient(usersClient.getSecurityToken()); System.out.println(client.getAllVolumes()); // client.downloadLogs("vol1", "/tmp/temp1.tar.gz"); + } catch(Exception e) { + e.printStackTrace(); } } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java index 93c07a20..deabbde7 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java @@ -25,6 +25,7 @@ package com.gluster.storage.management.core.constants; */ public class RESTConstants { // REST Resource paths + public static final String RESOURCE_PATH_USERS = "/users"; public static final String RESOURCE_PATH_CLUSTERS = "/clusters"; public static final String RESOURCE_PATH_DISCOVERED_SERVERS = "/discoveredservers"; @@ -56,7 +57,6 @@ public class RESTConstants { public static final String FORM_PARAM_ACCESS_PROTOCOLS = "accessProtocols"; public static final String FORM_PARAM_VOLUME_OPTIONS = "options"; - public static final String FORM_PARAM_CLUSTER_NAME = "clusterName"; public static final String FORM_PARAM_SERVER_NAME = "serverName"; public static final String FORM_PARAM_DISKS = "disks"; @@ -74,6 +74,7 @@ public class RESTConstants { public static final String PATH_PARAM_SERVER_NAME = "serverName"; public static final String PATH_PARAM_TASK_ID = "taskId"; public static final String PATH_PARAM_DISK_NAME = "diskName"; + public static final String PATH_PARAM_USER = "user"; public static final String QUERY_PARAM_BRICK_NAME = "brickName"; public static final String QUERY_PARAM_DISKS = "disks"; @@ -86,6 +87,7 @@ public class RESTConstants { public static final String QUERY_PARAM_TO_TIMESTAMP = "toTimestamp"; public static final String QUERY_PARAM_DOWNLOAD = "download"; public static final String QUERY_PARAM_SERVER_NAME = "serverName"; + public static final String QUERY_PARAM_DETAILS = "details"; public static final String FORMAT_XML = "xml"; public static final String FORMAT_JSON = "json"; diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java index 16059b15..05627ab1 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java @@ -22,47 +22,27 @@ import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; import com.gluster.storage.management.core.model.Server; -import com.gluster.storage.management.core.model.Status; -@XmlRootElement(name = "response") -public class ServerListResponse extends AbstractResponse { +@XmlRootElement(name = "servers") +public class ServerListResponse { private List<Server> servers = new ArrayList<Server>(); public ServerListResponse() { } - public ServerListResponse(Status status, List<Server> servers) { - setStatus(status); + public ServerListResponse(List<Server> servers) { setServers(servers); } - @XmlElementWrapper(name = "servers") @XmlElement(name = "server", type=Server.class) public List<Server> getServers() { return servers; } - /** - * @param servers - * the servers to set - */ public void setServers(List<Server> servers) { this.servers = servers; } - - /* - * (non-Javadoc) - * - * @see com.gluster.storage.management.core.model.Response#getData() - */ - @Override - @XmlTransient - public List<Server> getData() { - return getServers(); - } } diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java new file mode 100644 index 00000000..2211f29f --- /dev/null +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * <http://www.gnu.org/licenses/>. + *******************************************************************************/ +package com.gluster.storage.management.core.response; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Response object for transferring cluster names during REST communication. This is just a wrapper over a list of + * Strings, and is required because the jersey rest framework can't transfer lists directly. + */ +@XmlRootElement(name="servers") +public class ServerNameListResponse { +private List<String> serverNames = new ArrayList<String>(); + + public ServerNameListResponse() { + } + + public ServerNameListResponse(List<String> serverNames) { + this.serverNames = serverNames; + } + + @XmlElement(name = "server", type = String.class) + public List<String> getServerNames() { + return serverNames; + } +} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/LoginDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/LoginDialog.java index 563e6416..5cdb2648 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/LoginDialog.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/LoginDialog.java @@ -199,56 +199,60 @@ public class LoginDialog extends Dialog { String password = connectionDetails.getPassword(); UsersClient usersClient = new UsersClient(); - Status loginStatus = usersClient.authenticate(user, password); - if (loginStatus.isSuccess()) { - // authentication successful. close the login dialog and open the next one. - close(); - - ClustersClient clustersClient = new ClustersClient(usersClient.getSecurityToken()); - - IEclipsePreferences preferences = new ConfigurationScope().getNode(Application.PLUGIN_ID); - boolean showClusterSelectionDialog = preferences.getBoolean(PreferenceConstants.P_SHOW_CLUSTER_SELECTION_DIALOG, true); - - String clusterName = null; - if(!showClusterSelectionDialog) { - clusterName = preferences.get(PreferenceConstants.P_DEFAULT_CLUSTER_NAME, null); - if(clusterName == null || clusterName.isEmpty()) { - // Cluster name not available in preferences. Hence we must show the cluster selection dialog. - showClusterSelectionDialog = true; - } - } - - CLUSTER_MODE mode; - String serverName = null; - - if (showClusterSelectionDialog) { - ClusterSelectionDialog clusterDialog = new ClusterSelectionDialog(getParentShell(), - clustersClient.getClusterNames()); - int userAction = clusterDialog.open(); - if (userAction == Window.CANCEL) { - MessageDialog.openError(getShell(), "Login Cancelled", - "User cancelled login at cluster selection. Application will close!"); - cancelPressed(); - return; - } - mode = clusterDialog.getClusterMode(); - clusterName = clusterDialog.getClusterName(); - serverName = clusterDialog.getServerName(); - } else { - mode = CLUSTER_MODE.SELECT; + try { + usersClient.authenticate(user, password); + } catch(Exception e) { + MessageDialog.openError(getShell(), "Authentication Failed", e.getMessage()); + setReturnCode(RETURN_CODE_ERROR); + return; + } + + // authentication successful. close the login dialog and open the next one. + close(); + + ClustersClient clustersClient = new ClustersClient(usersClient.getSecurityToken()); + + IEclipsePreferences preferences = new ConfigurationScope().getNode(Application.PLUGIN_ID); + boolean showClusterSelectionDialog = preferences.getBoolean( + PreferenceConstants.P_SHOW_CLUSTER_SELECTION_DIALOG, true); + + String clusterName = null; + if (!showClusterSelectionDialog) { + clusterName = preferences.get(PreferenceConstants.P_DEFAULT_CLUSTER_NAME, null); + if (clusterName == null || clusterName.isEmpty()) { + // Cluster name not available in preferences. Hence we must show the cluster selection dialog. + showClusterSelectionDialog = true; } - - try { - createOrRegisterCluster(clustersClient, clusterName, serverName, mode); - GlusterDataModelManager.getInstance().initializeModel(usersClient.getSecurityToken(), clusterName); - super.okPressed(); - } catch (Exception e) { - setReturnCode(RETURN_CODE_ERROR); - MessageDialog.openError(getShell(), "Initialization Error", e.getMessage()); - close(); + } + + CLUSTER_MODE mode; + String serverName = null; + + if (showClusterSelectionDialog) { + ClusterSelectionDialog clusterDialog = new ClusterSelectionDialog(getParentShell(), + clustersClient.getClusterNames()); + int userAction = clusterDialog.open(); + if (userAction == Window.CANCEL) { + MessageDialog.openError(getShell(), "Login Cancelled", + "User cancelled login at cluster selection. Application will close!"); + cancelPressed(); + return; } + mode = clusterDialog.getClusterMode(); + clusterName = clusterDialog.getClusterName(); + serverName = clusterDialog.getServerName(); } else { - MessageDialog.openError(getShell(), "Authentication Failed", loginStatus.getMessage()); + mode = CLUSTER_MODE.SELECT; + } + + try { + createOrRegisterCluster(clustersClient, clusterName, serverName, mode); + GlusterDataModelManager.getInstance().initializeModel(usersClient.getSecurityToken(), clusterName); + super.okPressed(); + } catch (Exception e) { + setReturnCode(RETURN_CODE_ERROR); + MessageDialog.openError(getShell(), "Initialization Error", e.getMessage()); + close(); } } 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(); } } |
