From 4af269dafb701af6ab5cc9f8c2e8559cc13e69ae Mon Sep 17 00:00:00 2001 From: jaayers Date: Wed, 20 Jan 2016 11:25:53 -0500 Subject: [PATCH] Add support for jndi API key lookup --- .../service/WatsonService.java | 4 +-- ...BluemixUtils.java => CredentialUtils.java} | 30 +++++++++++++++---- ...tilsTest.java => CredentialUtilsTest.java} | 16 +++++----- 3 files changed, 35 insertions(+), 15 deletions(-) rename src/main/java/com/ibm/watson/developer_cloud/util/{BluemixUtils.java => CredentialUtils.java} (84%) rename src/test/java/com/ibm/watson/developer_cloud/util/{BluemixUtilsTest.java => CredentialUtilsTest.java} (77%) diff --git a/src/main/java/com/ibm/watson/developer_cloud/service/WatsonService.java b/src/main/java/com/ibm/watson/developer_cloud/service/WatsonService.java index fcfaeaea5a2..0e0682814c3 100644 --- a/src/main/java/com/ibm/watson/developer_cloud/service/WatsonService.java +++ b/src/main/java/com/ibm/watson/developer_cloud/service/WatsonService.java @@ -28,7 +28,7 @@ import com.ibm.watson.developer_cloud.http.HttpStatus; import com.ibm.watson.developer_cloud.http.RequestBuilder; import com.ibm.watson.developer_cloud.service.model.GenericModel; -import com.ibm.watson.developer_cloud.util.BluemixUtils; +import com.ibm.watson.developer_cloud.util.CredentialUtils; import com.ibm.watson.developer_cloud.util.RequestUtil; import com.ibm.watson.developer_cloud.util.ResponseUtil; import com.squareup.okhttp.Credentials; @@ -65,7 +65,7 @@ public abstract class WatsonService { */ public WatsonService(String name) { this.name = name; - this.apiKey = BluemixUtils.getAPIKey(name); + this.apiKey = CredentialUtils.getAPIKey(name); this.client = configureHttpClient(); } diff --git a/src/main/java/com/ibm/watson/developer_cloud/util/BluemixUtils.java b/src/main/java/com/ibm/watson/developer_cloud/util/CredentialUtils.java similarity index 84% rename from src/main/java/com/ibm/watson/developer_cloud/util/BluemixUtils.java rename to src/main/java/com/ibm/watson/developer_cloud/util/CredentialUtils.java index 6742449c403..1fb653d31e1 100644 --- a/src/main/java/com/ibm/watson/developer_cloud/util/BluemixUtils.java +++ b/src/main/java/com/ibm/watson/developer_cloud/util/CredentialUtils.java @@ -17,6 +17,10 @@ import java.util.logging.Level; import java.util.logging.Logger; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -25,9 +29,9 @@ import com.squareup.okhttp.Credentials; /** - * The Class BluemixUtils. + * The Class CredentialUtils. */ -public class BluemixUtils { +public class CredentialUtils { /** The Constant ALCHEMY_API. */ private static final String ALCHEMY_API = "alchemy_api"; @@ -39,7 +43,7 @@ public class BluemixUtils { private static final String CREDENTIALS = "credentials"; /** The Constant log. */ - private static final Logger log = Logger.getLogger(BluemixUtils.class.getName()); + private static final Logger log = Logger.getLogger(CredentialUtils.class.getName()); /** The Constant PASSWORD. */ private static final String PASSWORD = "password"; @@ -86,7 +90,7 @@ public static String getAPIKey(String serviceName, String plan) { final JsonObject services = getVCAPServices(); if (services == null) - return null; + return getKeyUsingJNDI(serviceName); for (final Entry entry : services.entrySet()) { final String key = entry.getKey(); @@ -111,6 +115,22 @@ public static String getAPIKey(String serviceName, String plan) { return null; } + /** + * Attempt to get the Base64-encoded API key through JNDI + * @param serviceName Name of the bluemix service + * @return The encoded API Key + */ + private static String getKeyUsingJNDI(String serviceName){ + try{ + Context context = new InitialContext(); + String lookupName = "watson-developer-cloud/" + serviceName + "/credentials"; + String apiKey = (String) context.lookup(lookupName); + return apiKey; + }catch(NamingException e){ + //ignore + return null; + } + } /** * Gets the VCAP_SERVICES environment variable and return it as a {@link JsonObject}. * @@ -138,6 +158,6 @@ private static JsonObject getVCAPServices() { * @param services the VCAP_SERVICES */ public static void setServices(String services) { - BluemixUtils.services = services; + CredentialUtils.services = services; } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/util/BluemixUtilsTest.java b/src/test/java/com/ibm/watson/developer_cloud/util/CredentialUtilsTest.java similarity index 77% rename from src/test/java/com/ibm/watson/developer_cloud/util/BluemixUtilsTest.java rename to src/test/java/com/ibm/watson/developer_cloud/util/CredentialUtilsTest.java index 401328d2024..b3acd983ab8 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/util/BluemixUtilsTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/util/CredentialUtilsTest.java @@ -24,9 +24,9 @@ import com.ibm.watson.developer_cloud.WatsonServiceTest; /** - * The Class BluemixUtilsTest. + * The Class CredentialUtilsTest. */ -public class BluemixUtilsTest extends WatsonServiceTest { +public class CredentialUtilsTest extends WatsonServiceTest { /** The Constant API_KEY_FREE. */ private static final String API_KEY_FREE = @@ -48,7 +48,7 @@ public class BluemixUtilsTest extends WatsonServiceTest { public void setup() { final InputStream in = this.getClass().getClassLoader().getResourceAsStream(VCAP_SERVICES); final String vcapServices = getStringFromInputStream(in); - BluemixUtils.setServices(vcapServices); + CredentialUtils.setServices(vcapServices); } /** @@ -57,11 +57,11 @@ public void setup() { */ @Test public void testGetAPIKeyWithNullOrEmptyService() { - assertNull(BluemixUtils.getAPIKey(null, null)); - assertNull(BluemixUtils.getAPIKey("", "")); + assertNull(CredentialUtils.getAPIKey(null, null)); + assertNull(CredentialUtils.getAPIKey("", "")); - assertEquals(API_KEY_FREE, BluemixUtils.getAPIKey(SERVICE_NAME, null)); - assertEquals(API_KEY_FREE, BluemixUtils.getAPIKey(SERVICE_NAME, BluemixUtils.PLAN_FREE)); - assertEquals(API_KEY_STANDARD, BluemixUtils.getAPIKey(SERVICE_NAME, BluemixUtils.PLAN_STANDARD)); + assertEquals(API_KEY_FREE, CredentialUtils.getAPIKey(SERVICE_NAME, null)); + assertEquals(API_KEY_FREE, CredentialUtils.getAPIKey(SERVICE_NAME, CredentialUtils.PLAN_FREE)); + assertEquals(API_KEY_STANDARD, CredentialUtils.getAPIKey(SERVICE_NAME, CredentialUtils.PLAN_STANDARD)); } }