summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShireesh Anjal <shireesh@gluster.com>2011-03-16 14:35:50 +0530
committerShireesh Anjal <shireesh@gluster.com>2011-03-16 14:35:50 +0530
commitd8426e9287c37a8e6e277a0e84929239269fd0d5 (patch)
tree227ab12adf2fb53375d2b3fa3236b09ffd733f8f
parent608ec97c38e95b1e3bfec57daaa0244854c7c3be (diff)
Introduced security token for REST clients
Signed-off-by: Shireesh Anjal <shireesh@gluster.com>
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java27
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java37
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java37
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java28
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java50
-rw-r--r--com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java47
-rw-r--r--com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java7
7 files changed, 148 insertions, 85 deletions
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
index 17fa84a5..61641d7f 100644
--- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
+++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
@@ -10,7 +10,6 @@ import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.representation.Form;
-import com.sun.jersey.core.util.Base64;
import com.sun.jersey.core.util.MultivaluedMapImpl;
public abstract class AbstractClient {
@@ -18,12 +17,17 @@ public abstract class AbstractClient {
protected static final MultivaluedMap<String, String> NO_PARAMS = new MultivaluedMapImpl();
protected WebResource resource;
+ private String securityToken;
private String authHeader;
-
- public AbstractClient(String serverName, String user, String password) {
+
+ public AbstractClient(String serverName) {
URI baseURI = new ClientUtil().getServerBaseURI(serverName);
resource = Client.create(new DefaultClientConfig()).resource(baseURI).path(getResourceName());
- authHeader = "Basic " + new String(Base64.encode(user + ":" + password));
+ }
+
+ public AbstractClient(String serverName, String securityToken) {
+ this(serverName);
+ setSecurityToken(securityToken);
}
/**
@@ -136,4 +140,19 @@ public abstract class AbstractClient {
}
public abstract String getResourceName();
+
+ /**
+ * @return the securityToken
+ */
+ protected String getSecurityToken() {
+ return securityToken;
+ }
+
+ /**
+ * @param securityToken the securityToken to set
+ */
+ protected void setSecurityToken(String securityToken) {
+ this.securityToken = securityToken;
+ authHeader = "Basic " + securityToken;
+ }
}
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
index 6d9ebdd6..16be2604 100644
--- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
+++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
@@ -32,19 +32,19 @@ import com.sun.jersey.core.util.MultivaluedMapImpl;
public class DiscoveredServersClient extends AbstractClient {
private static final String RESOURCE_NAME = "discoveredservers";
- public DiscoveredServersClient(String serverName, String user, String password) {
- super(serverName, user, password);
+ public DiscoveredServersClient(String serverName, String securityToken) {
+ super(serverName, securityToken);
}
@Override
public String getResourceName() {
return RESOURCE_NAME;
}
-
+
private Object getDiscoveredServers(Boolean getDetails, Class responseClass) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.putSingle("details", getDetails.toString());
-
+
// TODO: Used during development to check the response contents.
// to be removed later
String response = (String) fetchResource(queryParams, String.class);
@@ -54,28 +54,31 @@ public class DiscoveredServersClient extends AbstractClient {
}
public List<String> getDiscoveredServerNames() {
- return (List<String>)getDiscoveredServers(Boolean.FALSE, StringListResponse.class);
+ return (List<String>) getDiscoveredServers(Boolean.FALSE, StringListResponse.class);
}
-
+
public List<Server> getDiscoveredServerDetails() {
- return (List<Server>)getDiscoveredServers(Boolean.TRUE, ServerListResponse.class);
+ return (List<Server>) getDiscoveredServers(Boolean.TRUE, ServerListResponse.class);
}
+ @SuppressWarnings("unchecked")
public Server getServer(String serverName) {
- @SuppressWarnings("unchecked")
- GenericResponse<Server> response = (GenericResponse<Server>) fetchSubResource(serverName,
- GenericResponse.class);
+ GenericResponse<Server> response = (GenericResponse<Server>) fetchSubResource(serverName, GenericResponse.class);
return response.getData();
}
public static void main(String[] args) {
- DiscoveredServersClient serverResource = new DiscoveredServersClient("localhost", "gluster", "gluster");
- List<String> discoveredServerNames = serverResource.getDiscoveredServerNames();
- System.out.println(discoveredServerNames);
- List<Server> discoveredServers = serverResource.getDiscoveredServerDetails();
- System.out.println(discoveredServers);
+ UsersClient usersClient = new UsersClient("localhost");
+ if (usersClient.authenticate("gluster", "gluster")) {
+ DiscoveredServersClient serverResource = new DiscoveredServersClient("localhost",
+ usersClient.getSecurityToken());
+ List<String> discoveredServerNames = serverResource.getDiscoveredServerNames();
+ System.out.println(discoveredServerNames);
+ List<Server> discoveredServers = serverResource.getDiscoveredServerDetails();
+ System.out.println(discoveredServers);
- // Server serverDetails = ServerResource.getServer("localhost");
- // System.out.println(serverDetails.getName());
+ // Server serverDetails = ServerResource.getServer("localhost");
+ // System.out.println(serverDetails.getName());
+ }
}
}
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
index c192a52c..e15f28a5 100644
--- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
+++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterDataModelManager.java
@@ -25,15 +25,15 @@ import java.util.List;
import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.Disk;
+import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
import com.gluster.storage.management.core.model.Entity;
import com.gluster.storage.management.core.model.GlusterDataModel;
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.LogMessage;
import com.gluster.storage.management.core.model.NetworkInterface;
import com.gluster.storage.management.core.model.Server;
import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Disk.DISK_STATUS;
-import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
@@ -46,9 +46,26 @@ public class GlusterDataModelManager {
private static List<LogMessage> logMessages = new ArrayList<LogMessage>();
private static GlusterDataModelManager instance = new GlusterDataModelManager();
private GlusterDataModel model;
-
+ private String securityToken;
+ private String serverName;
+
private GlusterDataModelManager() {
- model = initializeModel();
+ }
+
+ public String getSecurityToken() {
+ return securityToken;
+ }
+
+ public void setSecurityToken(String securityToken) {
+ this.securityToken = securityToken;
+ }
+
+ public String getServerName() {
+ return serverName;
+ }
+
+ public void setServerName(String serverName) {
+ this.serverName = serverName;
}
public GlusterDataModel getModel() {
@@ -87,9 +104,12 @@ public class GlusterDataModelManager {
servers.add(server);
}
- private GlusterDataModel initializeModel() {
+ public void initializeModel(String serverName, String securityToken) {
+ setServerName(serverName);
+ setSecurityToken(securityToken);
+
// Create the dummy data model for demo
- GlusterDataModel model = new GlusterDataModel("Clusters");
+ model = new GlusterDataModel("Clusters");
Cluster cluster = new Cluster("Home", model);
initializeGlusterServers(cluster);
@@ -102,7 +122,6 @@ public class GlusterDataModelManager {
createDummyLogMessages();
model.addCluster(cluster);
- return model;
}
private void addVolumeOptions() {
@@ -202,11 +221,11 @@ public class GlusterDataModelManager {
}
private void initializeGlusterServers(Cluster cluster) {
- cluster.setServers(new GlusterServersClient("localhost", "gluster", "gluster").getServers());
+ cluster.setServers(new GlusterServersClient(serverName, securityToken).getServers());
}
private void initializeAutoDiscoveredServers(Cluster cluster) {
- cluster.setAutoDiscoveredServers(new DiscoveredServersClient("localhost", "gluster", "gluster")
+ cluster.setAutoDiscoveredServers(new DiscoveredServersClient(serverName, securityToken)
.getDiscoveredServerDetails());
}
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
index 58858aa4..222cdf1c 100644
--- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
+++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
@@ -30,8 +30,8 @@ import com.sun.jersey.api.representation.Form;
public class GlusterServersClient extends AbstractClient {
private static final String RESOURCE_NAME = "/cluster/servers";
- public GlusterServersClient(String serverName, String user, String password) {
- super(serverName, user, password);
+ public GlusterServersClient(String serverName, String securityToken) {
+ super(serverName, securityToken);
}
@Override
@@ -64,16 +64,20 @@ public class GlusterServersClient extends AbstractClient {
}
public static void main(String[] args) {
- GlusterServersClient ServerResource = new GlusterServersClient("localhost", "gluster", "gluster");
- List<GlusterServer> glusterServers = ServerResource.getServers();
- for(GlusterServer server : glusterServers) {
- System.out.println(server.getName());
- }
+ UsersClient usersClient = new UsersClient("localhost");
+ if (usersClient.authenticate("gluster", "gluster")) {
+
+ GlusterServersClient ServerResource = new GlusterServersClient("localhost", usersClient.getSecurityToken());
+ List<GlusterServer> glusterServers = ServerResource.getServers();
+ for (GlusterServer server : glusterServers) {
+ System.out.println(server.getName());
+ }
- // Add server
-// Server srv = new Server();
-// srv.setName("my-server");
-// Status response = ServerResource.addServer(srv);
-// System.out.println(response.toString());
+ // Add server
+ // Server srv = new Server();
+ // srv.setName("my-server");
+ // Status response = ServerResource.addServer(srv);
+ // System.out.println(response.toString());
+ }
}
}
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
index 3f9b5d61..be1b4bba 100644
--- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
+++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
@@ -20,33 +20,40 @@ package com.gluster.storage.management.client;
import com.gluster.storage.management.core.model.Status;
import com.sun.jersey.api.representation.Form;
+import com.sun.jersey.core.util.Base64;
public class UsersClient extends AbstractClient {
private static final String RESOURCE_NAME = "users";
private static final String FORM_PARAM_OLD_PASSWORD = "oldpassword";
private static final String FORM_PARAM_NEW_PASSWORD = "newpassword";
-
- private String user;
- public UsersClient(String serverName, String user, String password) {
- super(serverName, user, password);
- this.user = user;
+ private String generateSecurityToken(String user, String password) {
+ return new String(Base64.encode(user + ":" + password));
}
- public boolean authenticate() {
+ public UsersClient(String serverName) {
+ super(serverName);
+ }
+
+ public boolean authenticate(String user, String password) {
+ setSecurityToken(generateSecurityToken(user, password));
try {
Status authStatus = (Status) fetchSubResource(user, Status.class);
- return authStatus.isSuccess();
- } catch(Exception e) {
+ if (authStatus.isSuccess()) {
+ return true;
+ }
+ } catch (Exception e) {
e.printStackTrace();
- return false;
}
- // Dummy authentication for demo application
- // return (connectionDetails.getPassword().equals("gluster") ? true : false);
+ // If we reach here, it means authentication failed. Clear security token and return false.
+ setSecurityToken(null);
+ return false;
}
public boolean 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);
@@ -56,16 +63,15 @@ public class UsersClient extends AbstractClient {
}
public static void main(String[] args) {
- UsersClient authClient = new UsersClient("localhost", "gluster", "gluster");
-
+ UsersClient authClient = new UsersClient("localhost");
+
// authenticate user
- System.out.println(authClient.authenticate());
-
+ System.out.println(authClient.authenticate("gluster", "gluster"));
+
// change password to gluster1
System.out.println(authClient.changePassword("gluster", "gluster", "gluster1"));
-
+
// change it back to gluster
- authClient = new UsersClient("localhost", "gluster", "gluster1");
System.out.println(authClient.changePassword("gluster", "gluster1", "gluster"));
}
@@ -78,4 +84,14 @@ public class UsersClient extends AbstractClient {
public String getResourceName() {
return RESOURCE_NAME;
}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.gluster.storage.management.client.AbstractClient#getSecurityToken()
+ */
+ @Override
+ public String getSecurityToken() {
+ return super.getSecurityToken();
+ }
}
diff --git a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
index 2efe7ef0..734edb17 100644
--- a/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
+++ b/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
@@ -33,8 +33,8 @@ import com.gluster.storage.management.core.model.Volume;
public class VolumesClient extends AbstractClient {
private static final String RESOURCE_NAME = "cluster/volumes";
- public VolumesClient(String serverName, String user, String password) {
- super(serverName, user, password);
+ public VolumesClient(String serverName, String securityToken) {
+ super(serverName, securityToken);
}
@Override
@@ -44,14 +44,11 @@ public class VolumesClient extends AbstractClient {
public String createVolume(Volume volume) {
- GenericResponse<String> response = (GenericResponse<String>) resource
- .path("createvolume")
- .type(MediaType.APPLICATION_XML)
- .accept(MediaType.APPLICATION_XML)
- .post(GenericResponse.class, volume);
-
+ GenericResponse<String> response = (GenericResponse<String>) resource.path("createvolume")
+ .type(MediaType.APPLICATION_XML).accept(MediaType.APPLICATION_XML).post(GenericResponse.class, volume);
+
System.out.println("Response : " + response.getData());
-
+
return response.getData();
}
@@ -60,20 +57,22 @@ public class VolumesClient extends AbstractClient {
* @param args
*/
public static void main(String[] args) {
- VolumesClient VC = new VolumesClient("localhost", "gluster", "gluster");
- List<Disk> disks = new ArrayList<Disk>();
- Disk diskElement = new Disk();
- diskElement.setName("sda1");
- diskElement.setStatus(DISK_STATUS.READY);
- disks.add(diskElement);
- diskElement.setName("sda2");
- diskElement.setStatus(DISK_STATUS.READY);
- disks.add(diskElement);
-
- Volume vol = new Volume("vol1", null,
- Volume.VOLUME_TYPE.PLAIN_DISTRIBUTE,
- Volume.TRANSPORT_TYPE.ETHERNET, Volume.VOLUME_STATUS.ONLINE);
- vol.setDisks(disks);
- System.out.println(VC.createVolume(vol));
+ UsersClient usersClient = new UsersClient("localhost");
+ if (usersClient.authenticate("gluster", "gluster")) {
+ VolumesClient VC = new VolumesClient("localhost", usersClient.getSecurityToken());
+ List<Disk> disks = new ArrayList<Disk>();
+ Disk diskElement = new Disk();
+ diskElement.setName("sda1");
+ diskElement.setStatus(DISK_STATUS.READY);
+ disks.add(diskElement);
+ diskElement.setName("sda2");
+ diskElement.setStatus(DISK_STATUS.READY);
+ disks.add(diskElement);
+
+ Volume vol = new Volume("vol1", null, Volume.VOLUME_TYPE.PLAIN_DISTRIBUTE, Volume.TRANSPORT_TYPE.ETHERNET,
+ Volume.VOLUME_STATUS.ONLINE);
+ vol.setDisks(disks);
+ System.out.println(VC.createVolume(vol));
+ }
}
}
diff --git a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java
index 851425ea..3e7fa5c3 100644
--- a/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java
+++ b/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/login/LoginDialog.java
@@ -39,6 +39,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
+import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.UsersClient;
import com.gluster.storage.management.core.model.ConnectionDetails;
import com.gluster.storage.management.gui.IImageKeys;
@@ -186,11 +187,13 @@ public class LoginDialog extends Dialog {
String user = connectionDetails.getUserId();
String password = connectionDetails.getPassword();
String server = connectionDetails.getServer();
- if (new UsersClient(server, user, password).authenticate()) {
+
+ UsersClient usersClient = new UsersClient(server);
+ if (usersClient.authenticate(user, password)) {
+ GlusterDataModelManager.getInstance().initializeModel(server, usersClient.getSecurityToken());
super.okPressed();
} else {
MessageDialog.openError(getShell(), "Authentication Failed", "Invalid User ID or password");
- return;
}
}
}