CLI login with RESTful service
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ba96ca1a Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ba96ca1a Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ba96ca1a Branch: refs/heads/master Commit: ba96ca1ab70791cbb4cf891c6e36190684117f1c Parents: ba902ae Author: Manula Thantriwatte <[email protected]> Authored: Wed Dec 11 09:54:15 2013 +0530 Committer: Manula Thantriwatte <[email protected]> Committed: Wed Dec 11 09:54:15 2013 +0530 ---------------------------------------------------------------------- .../apache/stratos/cli/CommandLineService.java | 3 +- .../apache/stratos/cli/GenericRestClient.java | 4 +- .../java/org/apache/stratos/cli/RestClient.java | 24 +++-- .../stratos/cli/RestCommandLineService.java | 92 ++++++++++++++------ .../apache/stratos/cli/SubscriptionInfo.java | 30 +++---- .../apache/stratos/cli/utils/CliConstants.java | 4 + 6 files changed, 103 insertions(+), 54 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba96ca1a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/CommandLineService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/CommandLineService.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/CommandLineService.java index 286190a..08feed0 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/CommandLineService.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/CommandLineService.java @@ -447,8 +447,7 @@ public class CommandLineService { SubscriptionInfo subcriptionInfo = stub.subscribe(cartridgeType, alias, policy, externalRepoURL, privateRepo, username, password, dataCartridgeType, dataCartridgeAlias); - System.out - .format("You have successfully subscribed to %s cartridge with alias %s.%n", cartridgeType, alias); + System.out.format("You have successfully subscribed to %s cartridge with alias %s.%n", cartridgeType, alias); String repoURL = null; String hostnames = null; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba96ca1a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/GenericRestClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/GenericRestClient.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/GenericRestClient.java index 0a19c65..1a9b53a 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/GenericRestClient.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/GenericRestClient.java @@ -18,9 +18,11 @@ */ package org.apache.stratos.cli; +import java.rmi.RemoteException; + public interface GenericRestClient { - public String doPost(String resourcePath, String jsonParamString, String userName, String passWord); + public String doPost(String resourcePath, String jsonParamString, String userName, String passWord) throws Exception; public String doGet(String resourcePath, String userName, String passWord); public void doDelete(); public void doPut(); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba96ca1a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java index eefb891..c4d1b9a 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestClient.java @@ -25,7 +25,7 @@ import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; -import java.net.MalformedURLException; +import org.apache.stratos.cli.utils.CliConstants; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; @@ -41,7 +41,7 @@ public class RestClient implements GenericRestClient{ this.setPassword(password); } - public String doPost(String resourcePath, String jsonParamString, String userName, String passWord) { + public String doPost(String resourcePath, String jsonParamString, String userName, String passWord) throws Exception{ try { DefaultHttpClient httpClient = new DefaultHttpClient(); @@ -59,11 +59,16 @@ public class RestClient implements GenericRestClient{ httpClient = (DefaultHttpClient) WebClientWrapper.wrapClient(httpClient); HttpResponse response = httpClient.execute(postRequest); - if (response.getStatusLine().getStatusCode() == 204) { - return ""; - } + System.out.println("Response : " + response.getStatusLine().getStatusCode()); + int responseCode = response.getStatusLine().getStatusCode(); - if (response.getStatusLine().getStatusCode() != 200) { + if (responseCode == CliConstants.RESPONSE_AUTHORIZATION_FAIL) { + return "" + CliConstants.RESPONSE_AUTHORIZATION_FAIL; + } else if (responseCode == CliConstants.RESPONSE_NO_CONTENT) { + return "" + CliConstants.RESPONSE_NO_CONTENT; + } else if (responseCode == CliConstants.RESPONSE_INTERNAL_SERVER_ERROR) { + return "" + CliConstants.RESPONSE_INTERNAL_SERVER_ERROR; + } else if (response.getStatusLine().getStatusCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode()); } @@ -78,9 +83,8 @@ public class RestClient implements GenericRestClient{ httpClient.getConnectionManager().shutdown(); return result; - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; + } catch (ClientProtocolException e) { + throw new ClientProtocolException(); } catch (IOException e) { e.printStackTrace(); return null; @@ -100,6 +104,8 @@ public class RestClient implements GenericRestClient{ httpClient = (DefaultHttpClient) WebClientWrapper.wrapClient(httpClient); HttpResponse response = httpClient.execute(getRequest); + System.out.println("Response : " + response.getStatusLine().getStatusCode()); + if (response.getStatusLine().getStatusCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode()); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba96ca1a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java index 81c0c4e..ac0fc3d 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/RestCommandLineService.java @@ -26,10 +26,11 @@ import org.apache.axis2.context.ConfigurationContextFactory; import org.apache.axis2.description.TransportOutDescription; import org.apache.axis2.transport.http.HttpTransportProperties; import org.apache.commons.lang3.StringUtils; +import org.apache.http.client.ClientProtocolException; import org.apache.stratos.cli.exception.CommandException; +import org.apache.stratos.cli.utils.CliConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -44,6 +45,7 @@ public class RestCommandLineService { private RestClient restClientService; + private final String initializeEndpoint = "/stratos/admin/init"; private final String listAvailableCartridgesRestEndpoint = "/stratos/admin/cartridge/list"; private final String listSubscribedCartridgesRestEndpoint = "/stratos/admin/cartridge/list/subscribed"; private final String subscribCartridgeRestEndpoint = "/stratos/admin/cartridge/subscribe"; @@ -59,7 +61,7 @@ public class RestCommandLineService { return SingletonHolder.INSTANCE; } - public boolean login(String serverURL, String username, String password, boolean validateLogin) throws CommandException { + public boolean login(String serverURL, String username, String password, boolean validateLogin) throws Exception { try { // Following code will avoid validating certificate SSLContext sc; @@ -91,7 +93,7 @@ public class RestCommandLineService { throw new RuntimeException("Error while authentication process!", e); } - // Initialize Service Stub + // Initialized client try { initializeRestClient(serverURL, username, password); } catch (AxisFault e) { @@ -99,24 +101,22 @@ public class RestCommandLineService { throw new CommandException(e); } - return true; - /* try { if (validateLogin) { - String tenantDomain = stub.getTenantDomain(); + restClientService.doPost(restClientService.getUrl() + initializeEndpoint, "", restClientService.getUsername(), restClientService.getPassword()); if (logger.isDebugEnabled()) { - logger.debug("Tenant Domain {}", tenantDomain); + logger.debug("Tenant Domain {}", restClientService.getUsername()); } - return (tenantDomain != null); + System.out.println("Loggin successfull"); + return true; } else { // Just return true as we don't need to validate return true; } - } catch (RemoteException e) { + } catch (ClientProtocolException e) { System.out.println("Authentication failed!"); - throw new CommandException(e); + return false; } - */ } private void initializeRestClient(String serverURL, String username, String password) throws AxisFault { @@ -295,13 +295,13 @@ public class RestCommandLineService { throws CommandException { CartridgeInfoBean cartridgeInfoBean = new CartridgeInfoBean(); - cartridgeInfoBean.setCartridgeType(cartridgeType); - cartridgeInfoBean.setAlias(alias); - cartridgeInfoBean.setPolicy(policy); - cartridgeInfoBean.setRepoURL(externalRepoURL); - cartridgeInfoBean.setPrivateRepo(privateRepo); - cartridgeInfoBean.setRepoUsername(username); - cartridgeInfoBean.setRepoPassword(password); + cartridgeInfoBean.setCartridgeType(null); + cartridgeInfoBean.setAlias(null); + cartridgeInfoBean.setPolicy(null); + cartridgeInfoBean.setRepoURL(null); + cartridgeInfoBean.setPrivateRepo(false); + cartridgeInfoBean.setRepoUsername(null); + cartridgeInfoBean.setRepoPassword(null); cartridgeInfoBean.setDataCartridgeType(dataCartridgeType); cartridgeInfoBean.setDataCartridgeAlias(dataCartridgeAlias); @@ -319,7 +319,15 @@ public class RestCommandLineService { System.out.println("First try"); String subscription = restClientService.doPost(restClientService.getUrl() + subscribCartridgeRestEndpoint, completeJsonSubscribeString, restClientService.getUsername(), restClientService.getPassword()); - subcriptionConnectInfo = gson.fromJson(subscription, SubscriptionInfo.class); + + if (subscription.equals("" + CliConstants.RESPONSE_NO_CONTENT)) { + System.out.println("Duplicate alias. Please choose different alias"); + return; + } + + String subscriptionJSON = subscription.substring(20, subscription.length() -1); + subcriptionConnectInfo = gson.fromJson(subscriptionJSON, SubscriptionInfo.class); + System.out.format("You have successfully subscribed to %s cartridge with alias %s.%n", dataCartridgeType, dataCartridgeAlias); System.out.format("%nSubscribing to %s cartridge and connecting with %s data cartridge.%n", alias, @@ -330,9 +338,31 @@ public class RestCommandLineService { } try { + cartridgeInfoBean.setCartridgeType(cartridgeType); + cartridgeInfoBean.setAlias(alias); + cartridgeInfoBean.setPolicy(policy); + cartridgeInfoBean.setRepoURL(externalRepoURL); + cartridgeInfoBean.setPrivateRepo(privateRepo); + cartridgeInfoBean.setRepoUsername(username); + cartridgeInfoBean.setRepoPassword(password); + cartridgeInfoBean.setDataCartridgeType(dataCartridgeType); + cartridgeInfoBean.setDataCartridgeAlias(dataCartridgeAlias); + System.out.println("Second try"); - String subscriptionOutput = restClientService.doPost(restClientService.getUrl() + subscribCartridgeRestEndpoint, completeJsonSubscribeString, restClientService.getUsername(), restClientService.getPassword()); - SubscriptionInfo subcriptionInfo = gson.fromJson(subscriptionOutput, SubscriptionInfo.class); + + jsonSubscribeString = gson.toJson(cartridgeInfoBean, CartridgeInfoBean.class); + completeJsonSubscribeString = "{\"cartridgeInfoBean\":" + jsonSubscribeString + "}"; + + String subscriptionOutput = restClientService.doPost(restClientService.getUrl() + subscribCartridgeRestEndpoint, + completeJsonSubscribeString, restClientService.getUsername(), restClientService.getPassword()); + + if (subscriptionOutput.equals("" + CliConstants.RESPONSE_NO_CONTENT)) { + System.out.println("Duplicate alias. Please choose different alias"); + return; + } + + String subscriptionOutputJSON= subscriptionOutput.substring(20, subscriptionOutput.length() -1); + SubscriptionInfo subcriptionInfo = gson.fromJson(subscriptionOutputJSON, SubscriptionInfo.class); System.out.format("You have successfully subscribed to %s cartridge with alias %s.%n", cartridgeType, alias); @@ -369,7 +399,7 @@ public class RestCommandLineService { } } - public void addTenant(String admin, String firstName, String lastaName, String password, String domain, String email, String active) { + public void addTenant(String admin, String firstName, String lastaName, String password, String domain, String email, String active){ try { TenantInfoBean tenantInfo = new TenantInfoBean(); tenantInfo.setAdmin(admin); @@ -388,7 +418,13 @@ public class RestCommandLineService { String result = restClientService.doPost(restClientService.getUrl() + addTenantEndPoint, completeJsonString, restClientService.getUsername(), restClientService.getPassword()); - System.out.println(result); + if (Integer.parseInt(result) == CliConstants.RESPONSE_AUTHORIZATION_FAIL) { + System.out.println("Invalid operation. Authorization failed"); + } else if (Integer.parseInt(result) == CliConstants.RESPONSE_NO_CONTENT) { + System.out.println("Tenant added successfully"); + } else if (Integer.parseInt(result) == CliConstants.RESPONSE_INTERNAL_SERVER_ERROR) { + System.out.println("Domain is not available to register. Please check domain name"); + } } catch (Exception e) { e.printStackTrace(); } @@ -405,8 +441,14 @@ public class RestCommandLineService { public void deployCartridgeDefinition (String cartridgeDefinition) { try { - restClientService.doPost(restClientService.getUrl() + cartridgeDeploymentEndPoint, cartridgeDefinition, restClientService.getUsername(), restClientService.getPassword()); - System.out.println("You have successfully deployed the cartridge"); + String result = restClientService.doPost(restClientService.getUrl() + cartridgeDeploymentEndPoint, cartridgeDefinition, restClientService.getUsername(), restClientService.getPassword()); + + if (Integer.parseInt(result) == CliConstants.RESPONSE_AUTHORIZATION_FAIL) { + System.out.println("Invalid operations. Authorization failed"); + } + else { + System.out.println("You have successfully deployed the cartridge"); + } } catch (Exception e) { e.printStackTrace(); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba96ca1a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/SubscriptionInfo.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/SubscriptionInfo.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/SubscriptionInfo.java index 4e9dd02..384db93 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/SubscriptionInfo.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/SubscriptionInfo.java @@ -19,30 +19,26 @@ package org.apache.stratos.cli; import javax.xml.bind.annotation.XmlRootElement; -import java.io.Serializable; @XmlRootElement -public class SubscriptionInfo implements Serializable { - - private static final long serialVersionUID = 1L; +public class SubscriptionInfo { private String hostname; private String repositoryURL; - public String getHostname() { - return hostname; - } - - public void setHostname(String hostname) { - this.hostname = hostname; - } + public String getHostname() { + return hostname; + } - public String getRepositoryURL() { - return repositoryURL; - } + public void setHostname(String hostname) { + this.hostname = hostname; + } - public void setRepositoryURL(String repositoryURL) { - this.repositoryURL = repositoryURL; - } + public String getRepositoryURL() { + return repositoryURL; + } + public void setRepositoryURL(String repositoryURL) { + this.repositoryURL = repositoryURL; + } } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ba96ca1a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java index 2216f4c..bbc7b8c 100644 --- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java +++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/utils/CliConstants.java @@ -156,4 +156,8 @@ public class CliConstants { // Cartridge deployment options public static final String RESOURCE_PATH = "p"; public static final String RESOURCE_PATH_LONG_OPTION = "resource-path"; + + public static final int RESPONSE_INTERNAL_SERVER_ERROR = 500; + public static final int RESPONSE_AUTHORIZATION_FAIL = 403; + public static final int RESPONSE_NO_CONTENT = 204; }
