From 3d4b5a10c9e1702d86b1214d47d07715d91dcfe9 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 21 May 2015 22:05:46 +0800 Subject: [PATCH 1/8] Add support of HTTP basic and API key auth to Java codegen --- .../codegen/languages/JavaClientCodegen.java | 16 ++++-- .../src/main/resources/Java/api.mustache | 3 +- .../main/resources/Java/apiInvoker.mustache | 15 ++++- .../resources/Java/auth/ApiKeyAuth.mustache | 55 +++++++++++++++++++ .../Java/auth/Authentication.mustache | 7 +++ .../Java/auth/HttpBasicAuth.mustache | 36 ++++++++++++ .../resources/Java/configuration.mustache | 25 +++++++++ 7 files changed, 148 insertions(+), 9 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache create mode 100644 modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache create mode 100644 modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache create mode 100644 modules/swagger-codegen/src/main/resources/Java/configuration.mustache diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java index 7c0ac7422ff..00273078436 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java @@ -50,13 +50,17 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { additionalProperties.put("artifactId", artifactId); additionalProperties.put("artifactVersion", artifactVersion); + final String invokerFolder = (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator); + final String authFolder = (sourceFolder + File.separator + invokerPackage + ".auth").replace(".", java.io.File.separator); + supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml")); - supportingFiles.add(new SupportingFile("apiInvoker.mustache", - (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiInvoker.java")); - supportingFiles.add(new SupportingFile("JsonUtil.mustache", - (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "JsonUtil.java")); - supportingFiles.add(new SupportingFile("apiException.mustache", - (sourceFolder + File.separator + invokerPackage).replace(".", java.io.File.separator), "ApiException.java")); + supportingFiles.add(new SupportingFile("apiInvoker.mustache", invokerFolder, "ApiInvoker.java")); + supportingFiles.add(new SupportingFile("JsonUtil.mustache", invokerFolder, "JsonUtil.java")); + supportingFiles.add(new SupportingFile("apiException.mustache", invokerFolder, "ApiException.java")); + supportingFiles.add(new SupportingFile("configuration.mustache", invokerFolder, "Configuration.java")); + supportingFiles.add(new SupportingFile("auth/Authentication.mustache", authFolder, "Authentication.java")); + supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java")); + supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java")); languageSpecificPrimitives = new HashSet( Arrays.asList( diff --git a/modules/swagger-codegen/src/main/resources/Java/api.mustache b/modules/swagger-codegen/src/main/resources/Java/api.mustache index 78bac41d9d6..5731bbc6260 100644 --- a/modules/swagger-codegen/src/main/resources/Java/api.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/api.mustache @@ -92,7 +92,8 @@ public class {{classname}} { } try { - String response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { {{#authMethods}}"{{name}}"{{#hasMore}}, {{/hasMore}}{{/authMethods}} }; + String response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return {{#returnType}}({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class){{/returnType}}; } diff --git a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache index ac689046047..94e8f45782d 100644 --- a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache @@ -31,6 +31,8 @@ import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.text.ParseException; +import {{invokerPackage}}.auth.Authentication; + public class ApiInvoker { private static ApiInvoker INSTANCE = new ApiInvoker(); private Map hostMap = new HashMap(); @@ -162,11 +164,12 @@ public class ApiInvoker { } } - public String invokeAPI(String host, String path, String method, Map queryParams, Object body, Map headerParams, Map formParams, String contentType) throws ApiException { + public String invokeAPI(String host, String path, String method, Map queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames) throws ApiException { + processAuthParams(authNames, queryParams, headerParams); + Client client = getClient(host); StringBuilder b = new StringBuilder(); - for(String key : queryParams.keySet()) { String value = queryParams.get(key); if (value != null){ @@ -267,6 +270,14 @@ public class ApiInvoker { } } + private void processAuthParams(String[] authNames, Map queryParams, Map headerParams) { + for(String authName : authNames) { + Authentication auth = Configuration.getAuthentication(authName); + if(auth == null) throw new RuntimeException("Authentication has not been setup for " + authName); + auth.processParams(queryParams, headerParams); + } + } + private Client getClient(String host) { if(!hostMap.containsKey(host)) { Client client = Client.create(); diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache new file mode 100644 index 00000000000..f854bab9170 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache @@ -0,0 +1,55 @@ +package {{invokerPackage}}.auth; + +import java.util.Map; + +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void processParams(Map queryParams, Map headerParams) { + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location == "query") { + queryParams.put(paramName, value); + } else if (location == "header") { + headerParams.put(paramName, value); + } + } +} diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache new file mode 100644 index 00000000000..7aba61e631a --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache @@ -0,0 +1,7 @@ +package {{invokerPackage}}.auth; + +import java.util.Map; + +public interface Authentication { + void processParams(Map queryParams, Map headerParams); +} diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache new file mode 100644 index 00000000000..f77bbf57b75 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache @@ -0,0 +1,36 @@ +package {{invokerPackage}}.auth; + +import java.util.Map; + +import java.io.UnsupportedEncodingException; +import javax.xml.bind.DatatypeConverter; + +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void processParams(Map queryParams, Map headerParams) { + try { + headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"))); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/modules/swagger-codegen/src/main/resources/Java/configuration.mustache b/modules/swagger-codegen/src/main/resources/Java/configuration.mustache new file mode 100644 index 00000000000..13928df05c3 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Java/configuration.mustache @@ -0,0 +1,25 @@ +package {{invokerPackage}}; + +import java.util.Map; +import java.util.HashMap; + +import {{invokerPackage}}.auth.Authentication; +import {{invokerPackage}}.auth.HttpBasicAuth; +import {{invokerPackage}}.auth.ApiKeyAuth; + +public class Configuration { + private static final Map AUTH; + + static { + AUTH = new HashMap(); + {{#authMethods}} + {{#isBasic}}AUTH.put("{{name}}", new HttpBasicAuth());{{/isBasic}} + {{#isApiKey}}AUTH.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));{{/isApiKey}} + {{#isOAuth}}// TODO: support oauth{{/isOAuth}} + {{/authMethods}} + } + + public static Authentication getAuthentication(String authName) { + return AUTH.get(authName); + } +} From f616605e7e17672d38cd76bed06dca906554e6a6 Mon Sep 17 00:00:00 2001 From: xhh Date: Thu, 21 May 2015 22:09:08 +0800 Subject: [PATCH 2/8] Regenerate Java Petstore sample --- .../java/io/swagger/client/ApiInvoker.java | 15 ++++- .../java/io/swagger/client/Configuration.java | 29 ++++++++++ .../java/io/swagger/client/api/PetApi.java | 24 +++++--- .../java/io/swagger/client/api/StoreApi.java | 12 ++-- .../java/io/swagger/client/api/UserApi.java | 24 +++++--- .../io/swagger/client/auth/ApiKeyAuth.java | 55 +++++++++++++++++++ .../swagger/client/auth/Authentication.java | 7 +++ .../io/swagger/client/auth/HttpBasicAuth.java | 36 ++++++++++++ 8 files changed, 180 insertions(+), 22 deletions(-) create mode 100644 samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java create mode 100644 samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java create mode 100644 samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java create mode 100644 samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java index ab6f551327f..a667ebf2c65 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java @@ -31,6 +31,8 @@ import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.text.ParseException; +import io.swagger.client.auth.Authentication; + public class ApiInvoker { private static ApiInvoker INSTANCE = new ApiInvoker(); private Map hostMap = new HashMap(); @@ -162,11 +164,12 @@ public class ApiInvoker { } } - public String invokeAPI(String host, String path, String method, Map queryParams, Object body, Map headerParams, Map formParams, String contentType) throws ApiException { + public String invokeAPI(String host, String path, String method, Map queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames) throws ApiException { + processAuthParams(authNames, queryParams, headerParams); + Client client = getClient(host); StringBuilder b = new StringBuilder(); - for(String key : queryParams.keySet()) { String value = queryParams.get(key); if (value != null){ @@ -267,6 +270,14 @@ public class ApiInvoker { } } + private void processAuthParams(String[] authNames, Map queryParams, Map headerParams) { + for(String authName : authNames) { + Authentication auth = Configuration.getAuthentication(authName); + if(auth == null) throw new RuntimeException("Authentication has not been setup for " + authName); + auth.processParams(queryParams, headerParams); + } + } + private Client getClient(String host) { if(!hostMap.containsKey(host)) { Client client = Client.create(); diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java new file mode 100644 index 00000000000..366fd5256a4 --- /dev/null +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java @@ -0,0 +1,29 @@ +package io.swagger.client; + +import java.util.Map; +import java.util.HashMap; + +import io.swagger.client.auth.Authentication; +import io.swagger.client.auth.HttpBasicAuth; +import io.swagger.client.auth.ApiKeyAuth; + +public class Configuration { + private static final Map AUTH; + + static { + AUTH = new HashMap(); + + + AUTH.put("api_key", new ApiKeyAuth("header", "api_key")); + + + + + // TODO: support oauth + + } + + public static Authentication getAuthentication(String authName) { + return AUTH.get(authName); + } +} diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java b/samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java index 10326d8a2d6..e99bcfafc08 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/api/PetApi.java @@ -74,7 +74,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "PUT", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "PUT", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -124,7 +125,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -176,7 +178,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (List) ApiInvoker.deserialize(response, "array", Pet.class); } @@ -228,7 +231,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (List) ApiInvoker.deserialize(response, "array", Pet.class); } @@ -284,7 +288,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "api_key", "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (Pet) ApiInvoker.deserialize(response, "", Pet.class); } @@ -350,7 +355,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -408,7 +414,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -475,7 +482,8 @@ public class PetApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "petstore_auth" }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java b/samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java index 6da7b5abb2f..dd3629ab1b7 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/api/StoreApi.java @@ -73,7 +73,8 @@ public class StoreApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { "api_key" }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (Map) ApiInvoker.deserialize(response, "map", Map.class); } @@ -123,7 +124,8 @@ public class StoreApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (Order) ApiInvoker.deserialize(response, "", Order.class); } @@ -179,7 +181,8 @@ public class StoreApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (Order) ApiInvoker.deserialize(response, "", Order.class); } @@ -235,7 +238,8 @@ public class StoreApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java b/samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java index d0974d95a52..b627d2c70e9 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/api/UserApi.java @@ -74,7 +74,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -124,7 +125,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -174,7 +176,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "POST", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -229,7 +232,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (String) ApiInvoker.deserialize(response, "", String.class); } @@ -278,7 +282,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -334,7 +339,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "GET", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return (User) ApiInvoker.deserialize(response, "", User.class); } @@ -391,7 +397,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "PUT", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "PUT", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } @@ -447,7 +454,8 @@ public class UserApi { } try { - String response = apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType); + String[] authNames = new String[] { }; + String response = apiInvoker.invokeAPI(basePath, path, "DELETE", queryParams, postBody, headerParams, formParams, contentType, authNames); if(response != null){ return ; } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java new file mode 100644 index 00000000000..1f84fd12685 --- /dev/null +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -0,0 +1,55 @@ +package io.swagger.client.auth; + +import java.util.Map; + +public class ApiKeyAuth implements Authentication { + private final String location; + private final String paramName; + + private String apiKey; + private String apiKeyPrefix; + + public ApiKeyAuth(String location, String paramName) { + this.location = location; + this.paramName = paramName; + } + + public String getLocation() { + return location; + } + + public String getParamName() { + return paramName; + } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getApiKeyPrefix() { + return apiKeyPrefix; + } + + public void setApiKeyPrefix(String apiKeyPrefix) { + this.apiKeyPrefix = apiKeyPrefix; + } + + @Override + public void processParams(Map queryParams, Map headerParams) { + String value; + if (apiKeyPrefix != null) { + value = apiKeyPrefix + " " + apiKey; + } else { + value = apiKey; + } + if (location == "query") { + queryParams.put(paramName, value); + } else if (location == "header") { + headerParams.put(paramName, value); + } + } +} diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java new file mode 100644 index 00000000000..50ed42e15f2 --- /dev/null +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java @@ -0,0 +1,7 @@ +package io.swagger.client.auth; + +import java.util.Map; + +public interface Authentication { + void processParams(Map queryParams, Map headerParams); +} diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java new file mode 100644 index 00000000000..b4a1266a1b4 --- /dev/null +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -0,0 +1,36 @@ +package io.swagger.client.auth; + +import java.util.Map; + +import java.io.UnsupportedEncodingException; +import javax.xml.bind.DatatypeConverter; + +public class HttpBasicAuth implements Authentication { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public void processParams(Map queryParams, Map headerParams) { + try { + headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"))); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } +} From 16ba2a54ea9fcde974aeffffb96e52074d4c72ee Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 22 May 2015 11:17:44 +0800 Subject: [PATCH 3/8] Add test cases for API key and HTTP basic auth --- .../swagger/client/auth/ApiKeyAuthTest.java | 40 +++++++++++++++++++ .../client/auth/HttpBasicAuthTest.java | 33 +++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java create mode 100644 samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java new file mode 100644 index 00000000000..13289a7c495 --- /dev/null +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java @@ -0,0 +1,40 @@ +package io.swagger.client.auth; + +import java.util.Map; +import java.util.HashMap; + +import static org.junit.Assert.*; +import org.junit.*; + +public class ApiKeyAuthTest { + @Test + public void testProcessParamsInQuery() { + Map queryParams = new HashMap(); + Map headerParams = new HashMap(); + + ApiKeyAuth auth = new ApiKeyAuth("query", "api_key"); + auth.setApiKey("my-api-key"); + auth.processParams(queryParams, headerParams); + + assertEquals(1, queryParams.size()); + assertEquals("my-api-key", queryParams.get("api_key")); + // no changes to header parameters + assertEquals(0, headerParams.size()); + } + + @Test + public void testProcessParamsInHeaderWithPrefix() { + Map queryParams = new HashMap(); + Map headerParams = new HashMap(); + + ApiKeyAuth auth = new ApiKeyAuth("header", "X-API-TOKEN"); + auth.setApiKey("my-api-token"); + auth.setApiKeyPrefix("Token"); + auth.processParams(queryParams, headerParams); + + // no changes to query parameters + assertEquals(0, queryParams.size()); + assertEquals(1, headerParams.size()); + assertEquals("Token my-api-token", headerParams.get("X-API-TOKEN")); + } +} diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java new file mode 100644 index 00000000000..8c4db19adfa --- /dev/null +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java @@ -0,0 +1,33 @@ +package io.swagger.client.auth; + +import java.util.Map; +import java.util.HashMap; + +import static org.junit.Assert.*; +import org.junit.*; + +public class HttpBasicAuthTest { + HttpBasicAuth auth = null; + + @Before + public void setup() { + auth = new HttpBasicAuth(); + } + + @Test + public void testProcessParams() { + Map queryParams = new HashMap(); + Map headerParams = new HashMap(); + + auth.setUsername("my-username"); + auth.setPassword("my-password"); + auth.processParams(queryParams, headerParams); + + // no changes to query parameters + assertEquals(0, queryParams.size()); + assertEquals(1, headerParams.size()); + // the string below is base64-encoded result of "my-username:my-password" with the "Basic " prefix + final String expected = "Basic bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ="; + assertEquals(expected, headerParams.get("Authorization")); + } +} From 43cfc7d401634b5e7d031181f173d3736e2f7f01 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 22 May 2015 12:07:08 +0800 Subject: [PATCH 4/8] Setup authentications in test cases --- .../swagger/codegen/languages/JavaClientCodegen.java | 1 + .../src/main/resources/Java/auth/OAuth.mustache | 10 ++++++++++ .../src/main/resources/Java/configuration.mustache | 4 +++- .../src/main/java/io/swagger/client/Configuration.java | 4 +++- .../src/main/java/io/swagger/client/auth/OAuth.java | 10 ++++++++++ .../test/java/io/swagger/petstore/test/PetApiTest.java | 8 ++++++++ .../java/io/swagger/petstore/test/StoreApiTest.java | 8 ++++++++ .../java/io/swagger/petstore/test/UserApiTest.java | 8 ++++++++ 8 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache create mode 100644 samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java index 00273078436..4cc6fc7aa1b 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/JavaClientCodegen.java @@ -61,6 +61,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { supportingFiles.add(new SupportingFile("auth/Authentication.mustache", authFolder, "Authentication.java")); supportingFiles.add(new SupportingFile("auth/HttpBasicAuth.mustache", authFolder, "HttpBasicAuth.java")); supportingFiles.add(new SupportingFile("auth/ApiKeyAuth.mustache", authFolder, "ApiKeyAuth.java")); + supportingFiles.add(new SupportingFile("auth/OAuth.mustache", authFolder, "OAuth.java")); languageSpecificPrimitives = new HashSet( Arrays.asList( diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache new file mode 100644 index 00000000000..f970481426d --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache @@ -0,0 +1,10 @@ +package {{invokerPackage}}.auth; + +import java.util.Map; + +public class OAuth implements Authentication { + @Override + public void processParams(Map queryParams, Map headerParams) { + // TODO: support oauth + } +} diff --git a/modules/swagger-codegen/src/main/resources/Java/configuration.mustache b/modules/swagger-codegen/src/main/resources/Java/configuration.mustache index 13928df05c3..aaeb532829b 100644 --- a/modules/swagger-codegen/src/main/resources/Java/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/configuration.mustache @@ -6,16 +6,18 @@ import java.util.HashMap; import {{invokerPackage}}.auth.Authentication; import {{invokerPackage}}.auth.HttpBasicAuth; import {{invokerPackage}}.auth.ApiKeyAuth; +import {{invokerPackage}}.auth.OAuth; public class Configuration { private static final Map AUTH; static { + // setup authentications AUTH = new HashMap(); {{#authMethods}} {{#isBasic}}AUTH.put("{{name}}", new HttpBasicAuth());{{/isBasic}} {{#isApiKey}}AUTH.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));{{/isApiKey}} - {{#isOAuth}}// TODO: support oauth{{/isOAuth}} + {{#isOAuth}}AUTH.put("{{name}}", new OAuth());{{/isOAuth}} {{/authMethods}} } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java index 366fd5256a4..753a3f215cc 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java @@ -6,11 +6,13 @@ import java.util.HashMap; import io.swagger.client.auth.Authentication; import io.swagger.client.auth.HttpBasicAuth; import io.swagger.client.auth.ApiKeyAuth; +import io.swagger.client.auth.OAuth; public class Configuration { private static final Map AUTH; static { + // setup authentications AUTH = new HashMap(); @@ -19,7 +21,7 @@ public class Configuration { - // TODO: support oauth + AUTH.put("petstore_auth", new OAuth()); } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java new file mode 100644 index 00000000000..e4b6ab49c0d --- /dev/null +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java @@ -0,0 +1,10 @@ +package io.swagger.client.auth; + +import java.util.Map; + +public class OAuth implements Authentication { + @Override + public void processParams(Map queryParams, Map headerParams) { + // TODO: support oauth + } +} diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java index 97f3b5f8006..ccb73755d28 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -1,8 +1,10 @@ package io.swagger.petstore.test; import io.swagger.client.ApiException; +import io.swagger.client.Configuration; import io.swagger.client.api.*; import io.swagger.client.model.*; +import io.swagger.client.auth.*; import java.util.*; import java.io.*; @@ -13,6 +15,12 @@ import org.junit.*; public class PetApiTest { PetApi api = null; + @BeforeClass + public static void initAuth() { + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); + apiKeyAuth.setApiKey("special-key"); + } + @Before public void setup() { api = new PetApi(); diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java index 25a52009b9e..c5e2a9b8719 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java @@ -1,8 +1,10 @@ package io.swagger.petstore.test; import io.swagger.client.ApiException; +import io.swagger.client.Configuration; import io.swagger.client.api.*; import io.swagger.client.model.*; +import io.swagger.client.auth.*; import java.util.*; import java.io.*; @@ -13,6 +15,12 @@ import org.junit.*; public class StoreApiTest { StoreApi api = null; + @BeforeClass + public static void initAuth() { + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); + apiKeyAuth.setApiKey("special-key"); + } + @Before public void setup() { api = new StoreApi(); diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java index 9d683faab7a..8fcb621b85e 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java @@ -1,8 +1,10 @@ package io.swagger.petstore.test; import io.swagger.client.ApiException; +import io.swagger.client.Configuration; import io.swagger.client.api.*; import io.swagger.client.model.*; +import io.swagger.client.auth.*; import java.util.*; import java.io.*; @@ -13,6 +15,12 @@ import org.junit.*; public class UserApiTest { UserApi api = null; + @BeforeClass + public static void initAuth() { + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); + apiKeyAuth.setApiKey("special-key"); + } + @Before public void setup() { api = new UserApi(); From 6eb1a89205b0ca495ce81bda098cd8e46585b88d Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 29 May 2015 11:28:03 +0800 Subject: [PATCH 5/8] Add authentication helper methods and test cases --- .../resources/Java/configuration.mustache | 44 +++++++++++++++ .../java/io/swagger/client/Configuration.java | 44 +++++++++++++++ .../io/swagger/client/ConfigurationTest.java | 56 +++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java diff --git a/modules/swagger-codegen/src/main/resources/Java/configuration.mustache b/modules/swagger-codegen/src/main/resources/Java/configuration.mustache index aaeb532829b..cd367c65704 100644 --- a/modules/swagger-codegen/src/main/resources/Java/configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/configuration.mustache @@ -24,4 +24,48 @@ public class Configuration { public static Authentication getAuthentication(String authName) { return AUTH.get(authName); } + + /** Set username for the first HTTP basic authentication. */ + public static void setUsername(String username) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** Set password for the first HTTP basic authentication. */ + public static void setPassword(String password) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** Set API key value for the first API key authentication. */ + public static void setApiKey(String apiKey) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** Set API key prefix for the first API key authentication. */ + public static void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java index 753a3f215cc..6fb5fb56e7c 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java @@ -28,4 +28,48 @@ public class Configuration { public static Authentication getAuthentication(String authName) { return AUTH.get(authName); } + + /** Set username for the first HTTP basic authentication. */ + public static void setUsername(String username) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** Set password for the first HTTP basic authentication. */ + public static void setPassword(String password) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** Set API key value for the first API key authentication. */ + public static void setApiKey(String apiKey) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** Set API key prefix for the first API key authentication. */ + public static void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : AUTH.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } } diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java new file mode 100644 index 00000000000..b7c51739359 --- /dev/null +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java @@ -0,0 +1,56 @@ +package io.swagger.client; + +import io.swagger.client.auth.*; + +import static org.junit.Assert.*; +import org.junit.*; + +public class ConfigurationTest { + @Test + public void testGetAuthentication() { + Authentication auth = Configuration.getAuthentication("api_key"); + assertNotNull(auth); + assertTrue(auth instanceof ApiKeyAuth); + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) auth; + assertEquals("header", apiKeyAuth.getLocation()); + assertEquals("api_key", apiKeyAuth.getParamName()); + + auth = Configuration.getAuthentication("petstore_auth"); + assertTrue(auth instanceof OAuth); + + assertNull(Configuration.getAuthentication("unknown")); + } + + @Test + public void testSetUsername() { + try { + Configuration.setUsername("my-username"); + fail("should throw RuntimeException"); + } catch (RuntimeException e) { + } + } + + @Test + public void testSetPassword() { + try { + Configuration.setPassword("my-password"); + fail("should throw RuntimeException"); + } catch (RuntimeException e) { + } + } + + @Test + public void testSetApiKeyAndPrefix() { + ApiKeyAuth auth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); + auth.setApiKey(null); + auth.setApiKeyPrefix(null); + + Configuration.setApiKey("my-api-key"); + Configuration.setApiKeyPrefix("Token"); + assertEquals("my-api-key", auth.getApiKey()); + assertEquals("Token", auth.getApiKeyPrefix()); + + auth.setApiKey(null); + auth.setApiKeyPrefix(null); + } +} From e10e1f5249c12c64fe109233e34dcef68a8863dc Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 29 May 2015 11:29:06 +0800 Subject: [PATCH 6/8] Refactor auth method naming, add comments --- .../src/main/resources/Java/apiInvoker.mustache | 7 ++++--- .../src/main/resources/Java/auth/ApiKeyAuth.mustache | 2 +- .../src/main/resources/Java/auth/Authentication.mustache | 3 ++- .../src/main/resources/Java/auth/HttpBasicAuth.mustache | 2 +- .../src/main/resources/Java/auth/OAuth.mustache | 2 +- .../java/src/main/java/io/swagger/client/ApiInvoker.java | 7 ++++--- .../src/main/java/io/swagger/client/auth/ApiKeyAuth.java | 2 +- .../main/java/io/swagger/client/auth/Authentication.java | 3 ++- .../main/java/io/swagger/client/auth/HttpBasicAuth.java | 2 +- .../java/src/main/java/io/swagger/client/auth/OAuth.java | 2 +- .../test/java/io/swagger/client/auth/ApiKeyAuthTest.java | 8 ++++---- .../java/io/swagger/client/auth/HttpBasicAuthTest.java | 4 ++-- 12 files changed, 24 insertions(+), 20 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache index f1025bc88d3..fb116161d55 100644 --- a/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache @@ -166,7 +166,7 @@ public class ApiInvoker { } public String invokeAPI(String host, String path, String method, Map queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames) throws ApiException { - processAuthParams(authNames, queryParams, headerParams); + updateParamsForAuth(authNames, queryParams, headerParams); Client client = getClient(host); @@ -266,11 +266,12 @@ public class ApiInvoker { } } - private void processAuthParams(String[] authNames, Map queryParams, Map headerParams) { + /* Update hearder and query params based on authentication settings. */ + private void updateParamsForAuth(String[] authNames, Map queryParams, Map headerParams) { for (String authName : authNames) { Authentication auth = Configuration.getAuthentication(authName); if (auth == null) throw new RuntimeException("Authentication has not been setup for " + authName); - auth.processParams(queryParams, headerParams); + auth.applyToParams(queryParams, headerParams); } } diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache index f854bab9170..65720b958cb 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/ApiKeyAuth.mustache @@ -39,7 +39,7 @@ public class ApiKeyAuth implements Authentication { } @Override - public void processParams(Map queryParams, Map headerParams) { + public void applyToParams(Map queryParams, Map headerParams) { String value; if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache index 7aba61e631a..1b2e2bc2fbe 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/Authentication.mustache @@ -3,5 +3,6 @@ package {{invokerPackage}}.auth; import java.util.Map; public interface Authentication { - void processParams(Map queryParams, Map headerParams); + /** Apply authentication settings to header and query params. */ + void applyToParams(Map queryParams, Map headerParams); } diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache index f77bbf57b75..28d5703b757 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache @@ -26,7 +26,7 @@ public class HttpBasicAuth implements Authentication { } @Override - public void processParams(Map queryParams, Map headerParams) { + public void applyToParams(Map queryParams, Map headerParams) { try { headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"))); } catch (UnsupportedEncodingException e) { diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache index f970481426d..ef84b8cc05e 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/OAuth.mustache @@ -4,7 +4,7 @@ import java.util.Map; public class OAuth implements Authentication { @Override - public void processParams(Map queryParams, Map headerParams) { + public void applyToParams(Map queryParams, Map headerParams) { // TODO: support oauth } } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java index 8ed18b62c15..841a348e0b3 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java @@ -166,7 +166,7 @@ public class ApiInvoker { } public String invokeAPI(String host, String path, String method, Map queryParams, Object body, Map headerParams, Map formParams, String contentType, String[] authNames) throws ApiException { - processAuthParams(authNames, queryParams, headerParams); + updateParamsForAuth(authNames, queryParams, headerParams); Client client = getClient(host); @@ -266,11 +266,12 @@ public class ApiInvoker { } } - private void processAuthParams(String[] authNames, Map queryParams, Map headerParams) { + /* Update hearder and query params based on authentication settings. */ + private void updateParamsForAuth(String[] authNames, Map queryParams, Map headerParams) { for (String authName : authNames) { Authentication auth = Configuration.getAuthentication(authName); if (auth == null) throw new RuntimeException("Authentication has not been setup for " + authName); - auth.processParams(queryParams, headerParams); + auth.applyToParams(queryParams, headerParams); } } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java index 1f84fd12685..ce55babb51d 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/ApiKeyAuth.java @@ -39,7 +39,7 @@ public class ApiKeyAuth implements Authentication { } @Override - public void processParams(Map queryParams, Map headerParams) { + public void applyToParams(Map queryParams, Map headerParams) { String value; if (apiKeyPrefix != null) { value = apiKeyPrefix + " " + apiKey; diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java index 50ed42e15f2..3f372404c8d 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/Authentication.java @@ -3,5 +3,6 @@ package io.swagger.client.auth; import java.util.Map; public interface Authentication { - void processParams(Map queryParams, Map headerParams); + /** Apply authentication settings to header and query params. */ + void applyToParams(Map queryParams, Map headerParams); } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index b4a1266a1b4..37ceffa1638 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -26,7 +26,7 @@ public class HttpBasicAuth implements Authentication { } @Override - public void processParams(Map queryParams, Map headerParams) { + public void applyToParams(Map queryParams, Map headerParams) { try { headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"))); } catch (UnsupportedEncodingException e) { diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java index e4b6ab49c0d..d834f4580c2 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/OAuth.java @@ -4,7 +4,7 @@ import java.util.Map; public class OAuth implements Authentication { @Override - public void processParams(Map queryParams, Map headerParams) { + public void applyToParams(Map queryParams, Map headerParams) { // TODO: support oauth } } diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java index 13289a7c495..f90ee3d7b22 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/ApiKeyAuthTest.java @@ -8,13 +8,13 @@ import org.junit.*; public class ApiKeyAuthTest { @Test - public void testProcessParamsInQuery() { + public void testApplyToParamsInQuery() { Map queryParams = new HashMap(); Map headerParams = new HashMap(); ApiKeyAuth auth = new ApiKeyAuth("query", "api_key"); auth.setApiKey("my-api-key"); - auth.processParams(queryParams, headerParams); + auth.applyToParams(queryParams, headerParams); assertEquals(1, queryParams.size()); assertEquals("my-api-key", queryParams.get("api_key")); @@ -23,14 +23,14 @@ public class ApiKeyAuthTest { } @Test - public void testProcessParamsInHeaderWithPrefix() { + public void testApplyToParamsInHeaderWithPrefix() { Map queryParams = new HashMap(); Map headerParams = new HashMap(); ApiKeyAuth auth = new ApiKeyAuth("header", "X-API-TOKEN"); auth.setApiKey("my-api-token"); auth.setApiKeyPrefix("Token"); - auth.processParams(queryParams, headerParams); + auth.applyToParams(queryParams, headerParams); // no changes to query parameters assertEquals(0, queryParams.size()); diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java index 8c4db19adfa..dc57a61391a 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java @@ -15,13 +15,13 @@ public class HttpBasicAuthTest { } @Test - public void testProcessParams() { + public void testApplyToParams() { Map queryParams = new HashMap(); Map headerParams = new HashMap(); auth.setUsername("my-username"); auth.setPassword("my-password"); - auth.processParams(queryParams, headerParams); + auth.applyToParams(queryParams, headerParams); // no changes to query parameters assertEquals(0, queryParams.size()); From 6a6473ede3be20e5b6e91de7b1f7d81126e8d1a7 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 29 May 2015 11:55:48 +0800 Subject: [PATCH 7/8] Allow omitting username/password for HTTP basic auth --- .../resources/Java/auth/HttpBasicAuth.mustache | 3 ++- .../io/swagger/client/auth/HttpBasicAuth.java | 3 ++- .../swagger/client/auth/HttpBasicAuthTest.java | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache index 28d5703b757..22a64b1a24e 100644 --- a/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/auth/HttpBasicAuth.mustache @@ -27,8 +27,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(Map queryParams, Map headerParams) { + String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { - headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"))); + headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java index 37ceffa1638..24bff8c2266 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/auth/HttpBasicAuth.java @@ -27,8 +27,9 @@ public class HttpBasicAuth implements Authentication { @Override public void applyToParams(Map queryParams, Map headerParams) { + String str = (username == null ? "" : username) + ":" + (password == null ? "" : password); try { - headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary((username + ":" + password).getBytes("UTF-8"))); + headerParams.put("Authorization", "Basic " + DatatypeConverter.printBase64Binary(str.getBytes("UTF-8"))); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java index dc57a61391a..87d6eca8b82 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/auth/HttpBasicAuthTest.java @@ -27,7 +27,22 @@ public class HttpBasicAuthTest { assertEquals(0, queryParams.size()); assertEquals(1, headerParams.size()); // the string below is base64-encoded result of "my-username:my-password" with the "Basic " prefix - final String expected = "Basic bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ="; + String expected = "Basic bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ="; + assertEquals(expected, headerParams.get("Authorization")); + + // null username should be treated as empty string + auth.setUsername(null); + auth.applyToParams(queryParams, headerParams); + // the string below is base64-encoded result of ":my-password" with the "Basic " prefix + expected = "Basic Om15LXBhc3N3b3Jk"; + assertEquals(expected, headerParams.get("Authorization")); + + // null password should be treated as empty string + auth.setUsername("my-username"); + auth.setPassword(null); + auth.applyToParams(queryParams, headerParams); + // the string below is base64-encoded result of "my-username:" with the "Basic " prefix + expected = "Basic bXktdXNlcm5hbWU6"; assertEquals(expected, headerParams.get("Authorization")); } } From fffc5d7c351a2a270534d70f2eea602013ed72a7 Mon Sep 17 00:00:00 2001 From: xhh Date: Fri, 5 Jun 2015 20:00:32 +0800 Subject: [PATCH 8/8] Move authentications into ApiClient --- .../main/resources/Java/ApiClient.mustache | 87 ++++++++++++++++++- .../resources/Java/Configuration.mustache | 68 --------------- .../java/io/swagger/client/ApiClient.java | 86 +++++++++++++++++- .../java/io/swagger/client/Configuration.java | 72 --------------- .../java/io/swagger/client/ApiClientTest.java | 75 ++++++++++++++++ .../io/swagger/client/ConfigurationTest.java | 50 ----------- .../io/swagger/petstore/test/PetApiTest.java | 9 +- .../swagger/petstore/test/StoreApiTest.java | 11 +-- .../io/swagger/petstore/test/UserApiTest.java | 11 +-- 9 files changed, 255 insertions(+), 214 deletions(-) create mode 100644 samples/client/petstore/java/src/test/java/io/swagger/client/ApiClientTest.java diff --git a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache index 9a6f4215481..910728c4dd5 100644 --- a/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/ApiClient.mustache @@ -17,6 +17,7 @@ import javax.ws.rs.core.Response.Status.Family; import javax.ws.rs.core.MediaType; import java.util.Collection; +import java.util.Collections; import java.util.Map; import java.util.Map.Entry; import java.util.HashMap; @@ -34,6 +35,9 @@ import java.text.SimpleDateFormat; import java.text.ParseException; import {{invokerPackage}}.auth.Authentication; +import {{invokerPackage}}.auth.HttpBasicAuth; +import {{invokerPackage}}.auth.ApiKeyAuth; +import {{invokerPackage}}.auth.OAuth; public class ApiClient { private Map hostMap = new HashMap(); @@ -41,6 +45,8 @@ public class ApiClient { private boolean debugging = false; private String basePath = "{{basePath}}"; + private Map authentications; + private DateFormat dateFormat; public ApiClient() { @@ -53,6 +59,14 @@ public class ApiClient { // Set default User-Agent. setUserAgent("Java-Swagger"); + + // Setup authentications (key: authentication name, value: authentication). + authentications = new HashMap();{{#authMethods}}{{#isBasic}} + authentications.put("{{name}}", new HttpBasicAuth());{{/isBasic}}{{#isApiKey}} + authentications.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));{{/isApiKey}}{{#isOAuth}} + authentications.put("{{name}}", new OAuth());{{/isOAuth}}{{/authMethods}} + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); } public String getBasePath() { @@ -64,6 +78,75 @@ public class ApiClient { return this; } + /** + * Get authentications (key: authentication name, value: authentication). + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + /** + * Helper method to set username for the first HTTP basic authentication. + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set API key value for the first API key authentication. + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + /** * Set the User-Agent header's value (by adding to the default header map). */ @@ -340,8 +423,8 @@ public class ApiClient { */ private void updateParamsForAuth(String[] authNames, Map queryParams, Map headerParams) { for (String authName : authNames) { - Authentication auth = Configuration.getAuthentication(authName); - if (auth == null) throw new RuntimeException("Authentication has not been setup for " + authName); + Authentication auth = authentications.get(authName); + if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); auth.applyToParams(queryParams, headerParams); } } diff --git a/modules/swagger-codegen/src/main/resources/Java/Configuration.mustache b/modules/swagger-codegen/src/main/resources/Java/Configuration.mustache index a09e34b755c..e936b423a91 100644 --- a/modules/swagger-codegen/src/main/resources/Java/Configuration.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/Configuration.mustache @@ -1,13 +1,5 @@ package {{invokerPackage}}; -import java.util.Map; -import java.util.HashMap; - -import {{invokerPackage}}.auth.Authentication; -import {{invokerPackage}}.auth.HttpBasicAuth; -import {{invokerPackage}}.auth.ApiKeyAuth; -import {{invokerPackage}}.auth.OAuth; - public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); @@ -26,64 +18,4 @@ public class Configuration { public static void setDefaultApiClient(ApiClient apiClient) { defaultApiClient = apiClient; } - - private static final Map AUTH; - - static { - // setup authentications - AUTH = new HashMap(); - {{#authMethods}} - {{#isBasic}}AUTH.put("{{name}}", new HttpBasicAuth());{{/isBasic}} - {{#isApiKey}}AUTH.put("{{name}}", new ApiKeyAuth({{#isKeyInHeader}}"header"{{/isKeyInHeader}}{{^isKeyInHeader}}"query"{{/isKeyInHeader}}, "{{keyParamName}}"));{{/isApiKey}} - {{#isOAuth}}AUTH.put("{{name}}", new OAuth());{{/isOAuth}} - {{/authMethods}} - } - - public static Authentication getAuthentication(String authName) { - return AUTH.get(authName); - } - - /** Set username for the first HTTP basic authentication. */ - public static void setUsername(String username) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof HttpBasicAuth) { - ((HttpBasicAuth) auth).setUsername(username); - return; - } - } - throw new RuntimeException("No HTTP basic authentication configured!"); - } - - /** Set password for the first HTTP basic authentication. */ - public static void setPassword(String password) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof HttpBasicAuth) { - ((HttpBasicAuth) auth).setPassword(password); - return; - } - } - throw new RuntimeException("No HTTP basic authentication configured!"); - } - - /** Set API key value for the first API key authentication. */ - public static void setApiKey(String apiKey) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof ApiKeyAuth) { - ((ApiKeyAuth) auth).setApiKey(apiKey); - return; - } - } - throw new RuntimeException("No API key authentication configured!"); - } - - /** Set API key prefix for the first API key authentication. */ - public static void setApiKeyPrefix(String apiKeyPrefix) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof ApiKeyAuth) { - ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); - return; - } - } - throw new RuntimeException("No API key authentication configured!"); - } } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java index e6e2a308456..61d296537e6 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/ApiClient.java @@ -17,6 +17,7 @@ import javax.ws.rs.core.Response.Status.Family; import javax.ws.rs.core.MediaType; import java.util.Collection; +import java.util.Collections; import java.util.Map; import java.util.Map.Entry; import java.util.HashMap; @@ -34,6 +35,9 @@ import java.text.SimpleDateFormat; import java.text.ParseException; import io.swagger.client.auth.Authentication; +import io.swagger.client.auth.HttpBasicAuth; +import io.swagger.client.auth.ApiKeyAuth; +import io.swagger.client.auth.OAuth; public class ApiClient { private Map hostMap = new HashMap(); @@ -41,6 +45,8 @@ public class ApiClient { private boolean debugging = false; private String basePath = "http://petstore.swagger.io/v2"; + private Map authentications; + private DateFormat dateFormat; public ApiClient() { @@ -53,6 +59,13 @@ public class ApiClient { // Set default User-Agent. setUserAgent("Java-Swagger"); + + // Setup authentications (key: authentication name, value: authentication). + authentications = new HashMap(); + authentications.put("api_key", new ApiKeyAuth("header", "api_key")); + authentications.put("petstore_auth", new OAuth()); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); } public String getBasePath() { @@ -64,6 +77,75 @@ public class ApiClient { return this; } + /** + * Get authentications (key: authentication name, value: authentication). + */ + public Map getAuthentications() { + return authentications; + } + + /** + * Get authentication for the given name. + * + * @param authName The authentication name + * @return The authentication, null if not found + */ + public Authentication getAuthentication(String authName) { + return authentications.get(authName); + } + + /** + * Helper method to set username for the first HTTP basic authentication. + */ + public void setUsername(String username) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setUsername(username); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set password for the first HTTP basic authentication. + */ + public void setPassword(String password) { + for (Authentication auth : authentications.values()) { + if (auth instanceof HttpBasicAuth) { + ((HttpBasicAuth) auth).setPassword(password); + return; + } + } + throw new RuntimeException("No HTTP basic authentication configured!"); + } + + /** + * Helper method to set API key value for the first API key authentication. + */ + public void setApiKey(String apiKey) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKey(apiKey); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + + /** + * Helper method to set API key prefix for the first API key authentication. + */ + public void setApiKeyPrefix(String apiKeyPrefix) { + for (Authentication auth : authentications.values()) { + if (auth instanceof ApiKeyAuth) { + ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); + return; + } + } + throw new RuntimeException("No API key authentication configured!"); + } + /** * Set the User-Agent header's value (by adding to the default header map). */ @@ -340,8 +422,8 @@ public class ApiClient { */ private void updateParamsForAuth(String[] authNames, Map queryParams, Map headerParams) { for (String authName : authNames) { - Authentication auth = Configuration.getAuthentication(authName); - if (auth == null) throw new RuntimeException("Authentication has not been setup for " + authName); + Authentication auth = authentications.get(authName); + if (auth == null) throw new RuntimeException("Authentication undefined: " + authName); auth.applyToParams(queryParams, headerParams); } } diff --git a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java index 88192cbd3bf..04899a110f6 100644 --- a/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java +++ b/samples/client/petstore/java/src/main/java/io/swagger/client/Configuration.java @@ -1,13 +1,5 @@ package io.swagger.client; -import java.util.Map; -import java.util.HashMap; - -import io.swagger.client.auth.Authentication; -import io.swagger.client.auth.HttpBasicAuth; -import io.swagger.client.auth.ApiKeyAuth; -import io.swagger.client.auth.OAuth; - public class Configuration { private static ApiClient defaultApiClient = new ApiClient(); @@ -26,68 +18,4 @@ public class Configuration { public static void setDefaultApiClient(ApiClient apiClient) { defaultApiClient = apiClient; } - - private static final Map AUTH; - - static { - // setup authentications - AUTH = new HashMap(); - - - AUTH.put("api_key", new ApiKeyAuth("header", "api_key")); - - - - - AUTH.put("petstore_auth", new OAuth()); - - } - - public static Authentication getAuthentication(String authName) { - return AUTH.get(authName); - } - - /** Set username for the first HTTP basic authentication. */ - public static void setUsername(String username) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof HttpBasicAuth) { - ((HttpBasicAuth) auth).setUsername(username); - return; - } - } - throw new RuntimeException("No HTTP basic authentication configured!"); - } - - /** Set password for the first HTTP basic authentication. */ - public static void setPassword(String password) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof HttpBasicAuth) { - ((HttpBasicAuth) auth).setPassword(password); - return; - } - } - throw new RuntimeException("No HTTP basic authentication configured!"); - } - - /** Set API key value for the first API key authentication. */ - public static void setApiKey(String apiKey) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof ApiKeyAuth) { - ((ApiKeyAuth) auth).setApiKey(apiKey); - return; - } - } - throw new RuntimeException("No API key authentication configured!"); - } - - /** Set API key prefix for the first API key authentication. */ - public static void setApiKeyPrefix(String apiKeyPrefix) { - for (Authentication auth : AUTH.values()) { - if (auth instanceof ApiKeyAuth) { - ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix); - return; - } - } - throw new RuntimeException("No API key authentication configured!"); - } } diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/ApiClientTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/ApiClientTest.java new file mode 100644 index 00000000000..82f39e90583 --- /dev/null +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/ApiClientTest.java @@ -0,0 +1,75 @@ +package io.swagger.client; + +import io.swagger.client.auth.*; + +import java.util.Map; + +import static org.junit.Assert.*; +import org.junit.*; + +public class ApiClientTest { + ApiClient apiClient = null; + + @Before + public void setup() { + apiClient = new ApiClient(); + } + + @Test + public void testGetAuthentications() { + Map auths = apiClient.getAuthentications(); + + Authentication auth = auths.get("api_key"); + assertNotNull(auth); + assertTrue(auth instanceof ApiKeyAuth); + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) auth; + assertEquals("header", apiKeyAuth.getLocation()); + assertEquals("api_key", apiKeyAuth.getParamName()); + + auth = auths.get("petstore_auth"); + assertTrue(auth instanceof OAuth); + assertSame(auth, apiClient.getAuthentication("petstore_auth")); + + assertNull(auths.get("unknown")); + + try { + auths.put("my_auth", new HttpBasicAuth()); + fail("the authentications returned should not be modifiable"); + } catch (UnsupportedOperationException e) { + } + } + + @Test + public void testSetUsername() { + try { + apiClient.setUsername("my-username"); + fail("there should be no HTTP basic authentications"); + } catch (RuntimeException e) { + } + } + + @Test + public void testSetPassword() { + try { + apiClient.setPassword("my-password"); + fail("there should be no HTTP basic authentications"); + } catch (RuntimeException e) { + } + } + + @Test + public void testSetApiKeyAndPrefix() { + ApiKeyAuth auth = (ApiKeyAuth) apiClient.getAuthentications().get("api_key"); + auth.setApiKey(null); + auth.setApiKeyPrefix(null); + + apiClient.setApiKey("my-api-key"); + apiClient.setApiKeyPrefix("Token"); + assertEquals("my-api-key", auth.getApiKey()); + assertEquals("Token", auth.getApiKeyPrefix()); + + // reset values + auth.setApiKey(null); + auth.setApiKeyPrefix(null); + } +} diff --git a/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java b/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java index 3838dcb21bb..9801be416fb 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/client/ConfigurationTest.java @@ -1,59 +1,9 @@ package io.swagger.client; -import io.swagger.client.auth.*; - import static org.junit.Assert.*; import org.junit.*; public class ConfigurationTest { - @Test - public void testGetAuthentication() { - Authentication auth = Configuration.getAuthentication("api_key"); - assertNotNull(auth); - assertTrue(auth instanceof ApiKeyAuth); - ApiKeyAuth apiKeyAuth = (ApiKeyAuth) auth; - assertEquals("header", apiKeyAuth.getLocation()); - assertEquals("api_key", apiKeyAuth.getParamName()); - - auth = Configuration.getAuthentication("petstore_auth"); - assertTrue(auth instanceof OAuth); - - assertNull(Configuration.getAuthentication("unknown")); - } - - @Test - public void testSetUsername() { - try { - Configuration.setUsername("my-username"); - fail("should throw RuntimeException"); - } catch (RuntimeException e) { - } - } - - @Test - public void testSetPassword() { - try { - Configuration.setPassword("my-password"); - fail("should throw RuntimeException"); - } catch (RuntimeException e) { - } - } - - @Test - public void testSetApiKeyAndPrefix() { - ApiKeyAuth auth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); - auth.setApiKey(null); - auth.setApiKeyPrefix(null); - - Configuration.setApiKey("my-api-key"); - Configuration.setApiKeyPrefix("Token"); - assertEquals("my-api-key", auth.getApiKey()); - assertEquals("Token", auth.getApiKeyPrefix()); - - auth.setApiKey(null); - auth.setApiKeyPrefix(null); - } - @Test public void testDefaultApiClient() { ApiClient apiClient = Configuration.getDefaultApiClient(); diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java index b1316b7a8b4..854af7121da 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/PetApiTest.java @@ -16,15 +16,12 @@ import org.junit.*; public class PetApiTest { PetApi api = null; - @BeforeClass - public static void initAuth() { - ApiKeyAuth apiKeyAuth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); - apiKeyAuth.setApiKey("special-key"); - } - @Before public void setup() { api = new PetApi(); + // setup authentication + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) api.getApiClient().getAuthentication("api_key"); + apiKeyAuth.setApiKey("special-key"); } @Test diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java index c5e2a9b8719..1499c4eaf86 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/StoreApiTest.java @@ -15,15 +15,12 @@ import org.junit.*; public class StoreApiTest { StoreApi api = null; - @BeforeClass - public static void initAuth() { - ApiKeyAuth apiKeyAuth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); - apiKeyAuth.setApiKey("special-key"); - } - @Before public void setup() { api = new StoreApi(); + // setup authentication + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) api.getApiClient().getAuthentication("api_key"); + apiKeyAuth.setApiKey("special-key"); } @Test @@ -73,4 +70,4 @@ public class StoreApiTest { return order; } -} \ No newline at end of file +} diff --git a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java index 8fcb621b85e..e3bccd0dcdb 100644 --- a/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java +++ b/samples/client/petstore/java/src/test/java/io/swagger/petstore/test/UserApiTest.java @@ -15,15 +15,12 @@ import org.junit.*; public class UserApiTest { UserApi api = null; - @BeforeClass - public static void initAuth() { - ApiKeyAuth apiKeyAuth = (ApiKeyAuth) Configuration.getAuthentication("api_key"); - apiKeyAuth.setApiKey("special-key"); - } - @Before public void setup() { api = new UserApi(); + // setup authentication + ApiKeyAuth apiKeyAuth = (ApiKeyAuth) api.getApiClient().getAuthentication("api_key"); + apiKeyAuth.setApiKey("special-key"); } @Test @@ -89,4 +86,4 @@ public class UserApiTest { return user; } -} \ No newline at end of file +}