summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java8
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java8
-rw-r--r--src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java1
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java2
-rw-r--r--src/com.gluster.storage.management.server/.project1
-rw-r--r--src/com.gluster.storage.management.server/.pydevproject7
-rw-r--r--src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml8
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/filters/AuthenticationFailureFilter.java105
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java39
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/UsersResource.java3
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java43
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java3
12 files changed, 187 insertions, 41 deletions
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 41d76e58..e639f615 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
@@ -112,13 +112,13 @@ public class GlusterDataModelManager {
servers.add(server);
}
- public void initializeModel(String securityToken) {
+ public void initializeModel(String securityToken, String knownServer) {
model = new GlusterDataModel("Gluster Data Model");
setSecurityToken(securityToken);
Cluster cluster = new Cluster("Home", model);
- initializeGlusterServers(cluster);
+ initializeGlusterServers(cluster, knownServer);
initializeVolumes(cluster);
initializeAutoDiscoveredServers(cluster);
@@ -227,8 +227,8 @@ public class GlusterDataModelManager {
volume5.addDisk("server5:sdb");
}
- private void initializeGlusterServers(Cluster cluster) {
- cluster.setServers(new GlusterServersClient(securityToken).getServers());
+ private void initializeGlusterServers(Cluster cluster, String knownServer) {
+ cluster.setServers(new GlusterServersClient(securityToken).getServers(knownServer));
}
private void initializeAutoDiscoveredServers(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 d4809daf..98b8878c 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
@@ -44,8 +44,10 @@ public class GlusterServersClient extends AbstractClient {
return RESOURCE_NAME;
}
- public List<GlusterServer> getServers() {
- GlusterServerListResponse response = (GlusterServerListResponse) fetchResource(GlusterServerListResponse.class);
+ public List<GlusterServer> getServers(String knownServer) {
+ MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
+ queryParams.add(RESTConstants.QUERY_PARAM_KNOWN_SERVER, knownServer);
+ GlusterServerListResponse response = (GlusterServerListResponse) fetchResource(queryParams, GlusterServerListResponse.class);
return response.getServers();
}
@@ -76,7 +78,7 @@ public class GlusterServersClient extends AbstractClient {
if (usersClient.authenticate("gluster", "gluster").isSuccess()) {
GlusterServersClient serverResource = new GlusterServersClient(usersClient.getSecurityToken());
- List<GlusterServer> glusterServers = serverResource.getServers();
+ List<GlusterServer> glusterServers = serverResource.getServers("127.0.0.1");
for (GlusterServer server : glusterServers) {
System.out.println(server.getName());
}
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 d5c1bad3..c25d186a 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
@@ -56,6 +56,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_KNOWN_SERVER = "knownServer";
// Running tasks resource
public static final String RESOURCE_PATH_RUNNING_TASKS = "/cluster/runningtasks";
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java
index c6ffa8d5..7705a631 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java
@@ -193,7 +193,7 @@ public class LoginDialog extends Dialog {
UsersClient usersClient = new UsersClient();
if (usersClient.authenticate(user, password).isSuccess()) {
try {
- GlusterDataModelManager.getInstance().initializeModel(usersClient.getSecurityToken());
+ GlusterDataModelManager.getInstance().initializeModel(usersClient.getSecurityToken(), "127.0.0.1");
super.okPressed();
} catch (Exception e) {
setReturnCode(RETURN_CODE_ERROR);
diff --git a/src/com.gluster.storage.management.server/.project b/src/com.gluster.storage.management.server/.project
index 86d34a3b..259b3726 100644
--- a/src/com.gluster.storage.management.server/.project
+++ b/src/com.gluster.storage.management.server/.project
@@ -37,6 +37,5 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
- <nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>
diff --git a/src/com.gluster.storage.management.server/.pydevproject b/src/com.gluster.storage.management.server/.pydevproject
deleted file mode 100644
index a9cca037..00000000
--- a/src/com.gluster.storage.management.server/.pydevproject
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?eclipse-pydev version="1.0"?>
-
-<pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
-</pydev_project>
diff --git a/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml b/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml
index 6d7d1406..7c7d42d3 100644
--- a/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml
+++ b/src/com.gluster.storage.management.server/WebContent/WEB-INF/web.xml
@@ -64,6 +64,14 @@
<!-- Spring Security -->
<filter>
+ <filter-name>authFailureFilter</filter-name>
+ <filter-class>com.gluster.storage.management.server.filters.AuthenticationFailureFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>authFailureFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/filters/AuthenticationFailureFilter.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/filters/AuthenticationFailureFilter.java
new file mode 100644
index 00000000..5f828f65
--- /dev/null
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/filters/AuthenticationFailureFilter.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * 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.server.filters;
+
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import javax.ws.rs.core.Response;
+
+/**
+ * @author root
+ *
+ */
+public class AuthenticationFailureFilter implements Filter {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.Filter#destroy()
+ */
+ @Override
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public class CharResponseWrapper extends HttpServletResponseWrapper {
+ private CharArrayWriter output;
+
+ public String toString() {
+ return output.toString();
+ }
+
+ public CharResponseWrapper(HttpServletResponse response) {
+ super(response);
+ output = new CharArrayWriter();
+ }
+
+ public PrintWriter getWriter() {
+ return new PrintWriter(output);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,
+ * javax.servlet.FilterChain)
+ */
+ @Override
+ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
+ ServletException {
+ HttpServletRequest request = (HttpServletRequest) req;
+ if (request.getRequestURI().contains("download")) {
+ chain.doFilter(req, res);
+ return;
+ }
+
+ CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse) res);
+ chain.doFilter(req, wrapper);
+
+ if(wrapper.getStatus() == Response.Status.UNAUTHORIZED.ordinal()) {
+ PrintWriter out = res.getWriter();
+ out.println("<status><code>1</code><message>Authentication Failed!</message></status>");
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
+ */
+ @Override
+ public void init(FilterConfig arg0) throws ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
index 4f2850ee..3092e80d 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/GlusterServersResource.java
@@ -32,6 +32,7 @@ import javax.ws.rs.core.MediaType;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Server;
@@ -39,21 +40,32 @@ import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.GlusterServerResponse;
import com.gluster.storage.management.server.utils.GlusterUtil;
+import com.gluster.storage.management.server.utils.SshUtil;
+import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.resource.Singleton;
@Component
@Singleton
@Path("/cluster/servers")
public class GlusterServersResource extends AbstractServersResource {
- private GlusterUtil glusterUtil = new GlusterUtil();
+ @InjectParam
+ private GlusterUtil glusterUtil;
+
public static final String HOSTNAMETAG = "hostname:";
- private List<GlusterServer> getServerDetails() {
- List<GlusterServer> glusterServers = glusterUtil.getGlusterServers();
+ public void setGlusterUtil(GlusterUtil glusterUtil) {
+ this.glusterUtil = glusterUtil;
+ }
+
+ public GlusterUtil getGlusterUtil() {
+ return glusterUtil;
+ }
+
+ private List<GlusterServer> getServerDetails(String knownServer) {
+ List<GlusterServer> glusterServers = glusterUtil.getGlusterServers(knownServer);
for (GlusterServer server : glusterServers) {
if (server.getStatus() == SERVER_STATUS.ONLINE) {
fetchServerDetails(server);
- // server.setPreferredNetworkInterface(server.getNetworkInterfaces().get(0));
}
}
return glusterServers;
@@ -61,17 +73,17 @@ public class GlusterServersResource extends AbstractServersResource {
@GET
@Produces(MediaType.TEXT_XML)
- public GlusterServerListResponse getGlusterServers() {
- return new GlusterServerListResponse(Status.STATUS_SUCCESS, getServerDetails());
+ public GlusterServerListResponse getGlusterServers(@QueryParam(RESTConstants.QUERY_PARAM_KNOWN_SERVER) String knownServer) {
+ return new GlusterServerListResponse(Status.STATUS_SUCCESS, getServerDetails(knownServer));
}
@GET
@Path("{serverName}")
@Produces(MediaType.TEXT_XML)
public GlusterServer getGlusterServer(@PathParam("serverName") String serverName) {
+ // TODO: Implement logic to fetch details of a single gluster server (peer)
GlusterServer server = new GlusterServer(serverName);
fetchServerDetails(server);
- // server.setPreferredNetworkInterface(server.getNetworkInterfaces().get(0));
server.setStatus(SERVER_STATUS.ONLINE);
return server;
}
@@ -93,8 +105,8 @@ public class GlusterServersResource extends AbstractServersResource {
@POST
@Produces(MediaType.TEXT_XML)
- public GlusterServerResponse addServer(@FormParam("serverName") String serverName) {
- Status status = glusterUtil.addServer(serverName);
+ public GlusterServerResponse addServer(@FormParam("serverName") String serverName, @FormParam("existingServer") String existingServer) {
+ Status status = glusterUtil.addServer(serverName, existingServer);
if (!status.isSuccess()) {
return new GlusterServerResponse(status, null);
@@ -110,10 +122,13 @@ public class GlusterServersResource extends AbstractServersResource {
public static void main(String[] args) {
GlusterServersResource glusterServersResource = new GlusterServersResource();
- System.out.println(glusterServersResource.getServerDetails());
+ GlusterUtil glusterUtil = new GlusterUtil();
+ glusterUtil.setSshUtil(new SshUtil());
+ glusterServersResource.setGlusterUtil(glusterUtil);
+ System.out.println(glusterServersResource.getServerDetails("127.0.0.1").size());
// To add a server
- GlusterServerResponse response = glusterServersResource.addServer("my-server");
- System.out.println(response.getData().getName());
+// GlusterServerResponse response = glusterServersResource.addServer("my-server");
+// System.out.println(response.getData().getName());
}
}
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 51134317..5e9c1945 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
@@ -69,8 +69,9 @@ public class UsersResource {
@Path("{user}")
@GET
@Produces(MediaType.TEXT_XML)
- public Status login(@PathParam("user") String user) {
+ public Status authenticate(@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);
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index 7299a135..13b8ef28 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -20,11 +20,13 @@
*/
package com.gluster.storage.management.server.utils;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.gluster.storage.management.core.constants.CoreConstants;
@@ -56,11 +58,22 @@ public class GlusterUtil {
private static final String VOLUME_TRANSPORT_TYPE_PFX = "Transport-type:";
private static final String VOLUME_BRICKS_GROUP_PFX = "Bricks";
private static final String VOLUME_OPTIONS_RECONFIG_PFX = "Options Reconfigured";
- private static final String VOLUME_OPTION_AUTH_ALLOW = "auth.allow:";
+ private static final String VOLUME_OPTION_AUTH_ALLOW_PFX = "auth.allow:";
private static final String VOLUME_LOG_LOCATION_PFX = "log file location:";
private static final String VOLUME_TYPE_DISTRIBUTE = "Distribute";
private static final String VOLUME_TYPE_REPLICATE = "Replicate";
private static final ProcessUtil processUtil = new ProcessUtil();
+
+ @Autowired
+ private SshUtil sshUtil;
+
+ public void setSshUtil(SshUtil sshUtil) {
+ this.sshUtil = sshUtil;
+ }
+
+ public SshUtil getSshUtil() {
+ return sshUtil;
+ }
/**
* Extract value of given token from given line. It is assumed that the token, if present, will be of the following
@@ -79,8 +92,8 @@ public class GlusterUtil {
return null;
}
- public List<GlusterServer> getGlusterServers() {
- String output = getPeerStatus();
+ public List<GlusterServer> getGlusterServers(String knownServer) {
+ String output = getPeerStatus(knownServer);
if (output == null) {
return null;
}
@@ -127,8 +140,8 @@ public class GlusterUtil {
return glusterServers;
}
- public List<String> getGlusterServerNames() {
- String output = getPeerStatus();
+ public List<String> getGlusterServerNames(String knownServer) {
+ String output = getPeerStatus(knownServer);
if (output == null) {
return null;
}
@@ -143,9 +156,15 @@ public class GlusterUtil {
return glusterServerNames;
}
- private String getPeerStatus() {
+ /**
+ * @param knownServer
+ * A known server on which the gluster command will be executed to fetch peer status
+ * @return Outout of the "gluster peer status" command
+ */
+ private String getPeerStatus(String knownServer) {
String output;
- ProcessResult result = processUtil.executeCommand("gluster", "peer", "status");
+ //ProcessResult result = processUtil.executeCommand("gluster", "peer", "status");
+ ProcessResult result = getSshUtil().executeRemote(knownServer, "gluster peer status");
if (!result.isSuccess()) {
output = null;
}
@@ -153,8 +172,8 @@ public class GlusterUtil {
return output;
}
- public Status addServer(String serverName) {
- return new Status(processUtil.executeCommand("gluster", "peer", "probe", serverName));
+ public Status addServer(String serverName, String existingServer) {
+ return new Status(sshUtil.executeRemote(existingServer, "gluster peer probe " + serverName));
}
public Status startVolume(String volumeName) {
@@ -465,10 +484,10 @@ public class GlusterUtil {
public String getLogFileNameForBrickDir(String brickDir) {
String logFileName = brickDir;
- if (logFileName.startsWith(CoreConstants.FILE_SEPARATOR)) {
- logFileName = logFileName.replaceFirst(CoreConstants.FILE_SEPARATOR, "");
+ if (logFileName.startsWith(File.separator)) {
+ logFileName = logFileName.replaceFirst(File.separator, "");
}
- logFileName = logFileName.replaceAll(CoreConstants.FILE_SEPARATOR, "-") + ".log";
+ logFileName = logFileName.replaceAll(File.separator, "-") + ".log";
return logFileName;
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java
index 258bdea3..5816533b 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/SshUtil.java
@@ -26,6 +26,8 @@ import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Date;
+import org.springframework.stereotype.Component;
+
import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
@@ -39,6 +41,7 @@ import com.gluster.storage.management.core.utils.ProcessResult;
/**
*
*/
+@Component
public class SshUtil {
private LRUCache<String, Connection> sshConnCache = new LRUCache<String, Connection>(10);
private static final File PEM_FILE = new File(CoreConstants.USER_HOME + "/" + ".ssh/id_rsa");