summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java2
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java44
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java42
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java9
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java5
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java58
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java5
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java4
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java26
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java46
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/LoginDialog.java98
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/AbstractResource.java20
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/DiscoveredServersResource.java100
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java61
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();
}
}