From 278a653154cc2aafbeaaadb13f86ccf39f98f155 Mon Sep 17 00:00:00 2001 From: wing328 Date: Wed, 20 May 2015 15:57:54 +0800 Subject: [PATCH] add authentication --- .../swagger/codegen/DefaultGenerator.java | 1 + .../src/main/resources/php/APIClient.mustache | 26 ++++++++- .../src/main/resources/php/api.mustache | 10 ++-- .../php/SwaggerClient-php/lib/APIClient.php | 42 ++++++++++++-- .../php/SwaggerClient-php/lib/PetApi.php | 55 +++++++++++++------ .../php/SwaggerClient-php/lib/StoreApi.php | 35 +++++++----- .../php/SwaggerClient-php/lib/UserApi.php | 50 ++++++++++++----- 7 files changed, 164 insertions(+), 55 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java index 7a522230c29..1636a1dc79f 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/DefaultGenerator.java @@ -218,6 +218,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { bundle.put("models", allModels); bundle.put("apiFolder", config.apiPackage().replace('.', File.separatorChar)); bundle.put("modelPackage", config.modelPackage()); + bundle.put("authMethods", config.fromSecurity(swagger.getSecurityDefinitions())); if (swagger.getExternalDocs() != null) { bundle.put("externalDocs", swagger.getExternalDocs()); } diff --git a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache index a750daff12d..bb43e7bdc4b 100644 --- a/modules/swagger-codegen/src/main/resources/php/APIClient.mustache +++ b/modules/swagger-codegen/src/main/resources/php/APIClient.mustache @@ -67,6 +67,30 @@ class APIClient { $this->curl_timeout = $seconds; } + /** + * @param array $headerParams + * @param array $queryParams + * @param array $authSettings + */ + public function updateParamsForAuth(&$headerParams, &$queryParams, $authSettings) + { + if (count($authSettings) == 0) + return; + + // one endpoint can have more than 1 auth settings + foreach($authSettings as $auth) { + // determine which one to use + switch($auth) { + {{#authMethods}} + case '{{name}}': + {{#isApiKey}}{{#isKeyInHeader}}$headerParams['{{keyParamName}}'] = Configuration::$api_key;{{/isKeyInHeader}}{{#isKeyInQuery}}$queryParams['{{keyParamName}}'] = Configuration::$api_key;{{/isKeyInQuery}}{{#isBasic}}$headerParams['Authorization'] = base64_encode(Configuraiton::$username.":"Configuration::$password){{/isBasic}}{{/isApiKey}} + break; + {{/authMethods}} + } + } + } + + /** * @param string $resourcePath path to method endpoint * @param string $method method to call @@ -76,7 +100,7 @@ class APIClient { * @return mixed */ public function callAPI($resourcePath, $method, $queryParams, $postData, - $headerParams) { + $headerParams, $authSettings) { $headers = array(); diff --git a/modules/swagger-codegen/src/main/resources/php/api.mustache b/modules/swagger-codegen/src/main/resources/php/api.mustache index 7759af5004d..09a53fd7a74 100644 --- a/modules/swagger-codegen/src/main/resources/php/api.mustache +++ b/modules/swagger-codegen/src/main/resources/php/api.mustache @@ -92,18 +92,20 @@ class {{classname}} { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array({{#authMethods}}'{{name}}'{{#hasMore}}, {{/hasMore}}{{/authMethods}}); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); {{#returnType}}if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - '{{returnType}}'); - return $responseObject;{{/returnType}} + $responseObject = $this->apiClient->deserialize($response,'{{returnType}}'); + return $responseObject;{{/returnType}} } {{/operation}} {{newline}} diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php b/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php index d6d14c72527..e608421a891 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/APIClient.php @@ -67,6 +67,35 @@ class APIClient { $this->curl_timeout = $seconds; } + /** + * @param array $headerParams + * @param array $queryParams + * @param array $authSettings + */ + public function updateParamsForAuth(&$headerParams, &$queryParams, $authSettings) + { + if (count($authSettings) == 0) + return; + + // one endpoint can have more than 1 auth settings + foreach($authSettings as $auth) { + // determine which auth scheme to use + switch($auth) { + + case 'api_key': + $headerParams['api_key'] = Configuration::$api_key; + + break; + + case 'petstore_auth': + + break; + + } + } + } + + /** * @param string $resourcePath path to method endpoint * @param string $method method to call @@ -76,7 +105,7 @@ class APIClient { * @return mixed */ public function callAPI($resourcePath, $method, $queryParams, $postData, - $headerParams) { + $headerParams, $authSettings) { $headers = array(); @@ -142,20 +171,21 @@ class APIClient { $response_info = curl_getinfo($curl); // Handle the response - if ($response === false) { // error, likely in the client side - throw new APIClientException("API Error ($url): ".curl_error($curl), 0, $response_info, $response); + if ($response_info['http_code'] == 0) { + throw new APIClientException("TIMEOUT: api call to " . $url . + " took more than 5s to return", 0, $response_info, $response); } else if ($response_info['http_code'] >= 200 && $response_info['http_code'] <= 299 ) { $data = json_decode($response); if (json_last_error() > 0) { // if response is a string $data = $response; } - } else if ($response_info['http_code'] == 401) { // server returns 401 + } else if ($response_info['http_code'] == 401) { throw new APIClientException("Unauthorized API request to " . $url . ": " . serialize($response), 0, $response_info, $response); - } else if ($response_info['http_code'] == 404) { // server returns 404 + } else if ($response_info['http_code'] == 404) { $data = null; } else { - throw new APIClientException("Can't connect to the API: " . $url . + throw new APIClientException("Can't connect to the api: " . $url . " response code: " . $response_info['http_code'], 0, $response_info, $response); } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php index 07f6181a730..b5f1954acde 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/PetApi.php @@ -73,10 +73,13 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -125,10 +128,13 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -176,18 +182,20 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'array[Pet]'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'array[Pet]'); + return $responseObject; } /** @@ -233,18 +241,20 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'array[Pet]'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'array[Pet]'); + return $responseObject; } /** @@ -296,18 +306,20 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('api_key', 'petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'Pet'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'Pet'); + return $responseObject; } /** @@ -367,10 +379,13 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -428,10 +443,13 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -493,10 +511,13 @@ class PetApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('petstore_auth'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php index 78e23ec9034..4012a88fc54 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/StoreApi.php @@ -68,18 +68,20 @@ class StoreApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array('api_key'); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'map[string,int]'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'map[string,int]'); + return $responseObject; } /** @@ -126,18 +128,20 @@ class StoreApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'Order'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'Order'); + return $responseObject; } /** @@ -189,18 +193,20 @@ class StoreApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'Order'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'Order'); + return $responseObject; } /** @@ -252,10 +258,13 @@ class StoreApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } diff --git a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php index a3ed8a8ab25..b2ef035e972 100644 --- a/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php +++ b/samples/client/petstore/php/SwaggerClient-php/lib/UserApi.php @@ -73,10 +73,13 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -125,10 +128,13 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -177,10 +183,13 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -232,18 +241,20 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'string'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'string'); + return $responseObject; } /** @@ -285,10 +296,13 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -342,18 +356,20 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); if(! $response) { return null; } - $responseObject = $this->apiClient->deserialize($response, - 'User'); - return $responseObject; + $responseObject = $this->apiClient->deserialize($response,'User'); + return $responseObject; } /** @@ -410,10 +426,13 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); } @@ -467,10 +486,13 @@ class UserApi { $httpBody = $formParams; } + // authentication setting, if any + $authSettings = array(); + // make the API Call $response = $this->apiClient->callAPI($resourcePath, $method, $queryParams, $httpBody, - $headerParams); + $headerParams, $authSettings); }