mirror of
				https://github.com/OpenAPITools/openapi-generator.git
				synced 2025-11-04 02:33:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1035 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1035 lines
		
	
	
		
			33 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * OpenAPI Petstore
 | 
						|
 * PHP version 7.4
 | 
						|
 *
 | 
						|
 * @package OpenAPIServer
 | 
						|
 * @author  OpenAPI Generator team
 | 
						|
 * @link    https://github.com/openapitools/openapi-generator
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
 | 
						|
 * The version of the OpenAPI document: 1.0.0
 | 
						|
 * Generated by: https://github.com/openapitools/openapi-generator.git
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * NOTE: This class is auto generated by the openapi generator program.
 | 
						|
 * https://github.com/openapitools/openapi-generator
 | 
						|
 * Do not edit the class manually.
 | 
						|
 */
 | 
						|
namespace OpenAPIServer;
 | 
						|
 | 
						|
use Slim\Factory\AppFactory;
 | 
						|
use Slim\Interfaces\RouteInterface;
 | 
						|
use Slim\Exception\HttpNotImplementedException;
 | 
						|
use Psr\Container\ContainerInterface;
 | 
						|
use InvalidArgumentException;
 | 
						|
use Dyorg\TokenAuthentication;
 | 
						|
use Dyorg\TokenAuthentication\TokenSearch;
 | 
						|
use Psr\Http\Message\ServerRequestInterface;
 | 
						|
use OpenAPIServer\Middleware\JsonBodyParserMiddleware;
 | 
						|
use OpenAPIServer\Mock\OpenApiDataMocker;
 | 
						|
use OpenAPIServer\Mock\OpenApiDataMockerRouteMiddleware;
 | 
						|
use Slim\Psr7\Factory\ResponseFactory;
 | 
						|
use Exception;
 | 
						|
 | 
						|
/**
 | 
						|
 * SlimRouter Class Doc Comment
 | 
						|
 *
 | 
						|
 * @package OpenAPIServer
 | 
						|
 * @author  OpenAPI Generator team
 | 
						|
 * @link    https://github.com/openapitools/openapi-generator
 | 
						|
 */
 | 
						|
class SlimRouter
 | 
						|
{
 | 
						|
 | 
						|
    /** @var App instance */
 | 
						|
    private $slimApp;
 | 
						|
 | 
						|
    /** @var array[] list of all api operations */
 | 
						|
    private $operations = [
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'addPet',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Pet"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Pet"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '405' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid input"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'write:pets', // modify pets in your account
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet/findByStatus',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'findPetsByStatus',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "array",
 | 
						|
        "items" : {
 | 
						|
          "$ref" : "#/components/schemas/Pet"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "array",
 | 
						|
        "items" : {
 | 
						|
          "$ref" : "#/components/schemas/Pet"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid status value"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet/findByTags',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'findPetsByTags',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "array",
 | 
						|
        "items" : {
 | 
						|
          "$ref" : "#/components/schemas/Pet"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "array",
 | 
						|
        "items" : {
 | 
						|
          "$ref" : "#/components/schemas/Pet"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid tag value"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'PUT',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'updatePet',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Pet"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Pet"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid ID supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Pet not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '405' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Validation exception"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'write:pets', // modify pets in your account
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'DELETE',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet/{petId}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'deletePet',
 | 
						|
            'responses' => [
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid pet value"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'write:pets', // modify pets in your account
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet/{petId}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'getPetById',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Pet"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Pet"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid ID supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Pet not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet/{petId}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'updatePetWithForm',
 | 
						|
            'responses' => [
 | 
						|
                '405' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid input"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'write:pets', // modify pets in your account
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/pet/{petId}/uploadImage',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractPetApi',
 | 
						|
            'userClassname' => 'PetApi',
 | 
						|
            'operationId' => 'uploadFile',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/ApiResponse"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // oauth2 security schema named 'petstore_auth'
 | 
						|
                [
 | 
						|
                    'type' => 'oauth2',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => false,
 | 
						|
                    'isOAuth' => true,
 | 
						|
                    'scopes' => [
 | 
						|
                        'write:pets', // modify pets in your account
 | 
						|
                        'read:pets', // read your pets
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/store/inventory',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractStoreApi',
 | 
						|
            'userClassname' => 'StoreApi',
 | 
						|
            'operationId' => 'getInventory',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "object",
 | 
						|
        "additionalProperties" : {
 | 
						|
          "type" : "integer",
 | 
						|
          "format" : "int32"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/store/order',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractStoreApi',
 | 
						|
            'userClassname' => 'StoreApi',
 | 
						|
            'operationId' => 'placeOrder',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Order"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Order"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid Order"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'DELETE',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/store/order/{orderId}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractStoreApi',
 | 
						|
            'userClassname' => 'StoreApi',
 | 
						|
            'operationId' => 'deleteOrder',
 | 
						|
            'responses' => [
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid ID supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Order not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/store/order/{orderId}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractStoreApi',
 | 
						|
            'userClassname' => 'StoreApi',
 | 
						|
            'operationId' => 'getOrderById',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Order"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/Order"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid ID supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Order not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'createUser',
 | 
						|
            'responses' => [
 | 
						|
                'default' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/createWithArray',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'createUsersWithArrayInput',
 | 
						|
            'responses' => [
 | 
						|
                'default' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'POST',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/createWithList',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'createUsersWithListInput',
 | 
						|
            'responses' => [
 | 
						|
                'default' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/login',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'loginUser',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "headers" : {
 | 
						|
    "Set-Cookie" : {
 | 
						|
      "description" : "Cookie authentication key for use with the `api_key` apiKey authentication.",
 | 
						|
      "style" : "simple",
 | 
						|
      "explode" : false,
 | 
						|
      "schema" : {
 | 
						|
        "type" : "string",
 | 
						|
        "example" : "AUTH_KEY=abcde12345; Path=/; HttpOnly"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "X-Rate-Limit" : {
 | 
						|
      "description" : "calls per hour allowed by the user",
 | 
						|
      "style" : "simple",
 | 
						|
      "explode" : false,
 | 
						|
      "schema" : {
 | 
						|
        "type" : "integer",
 | 
						|
        "format" : "int32"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "X-Expires-After" : {
 | 
						|
      "description" : "date in UTC when token expires",
 | 
						|
      "style" : "simple",
 | 
						|
      "explode" : false,
 | 
						|
      "schema" : {
 | 
						|
        "type" : "string",
 | 
						|
        "format" : "date-time"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  },
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "string"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "type" : "string"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid username/password supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/logout',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'logoutUser',
 | 
						|
            'responses' => [
 | 
						|
                'default' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'DELETE',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/{username}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'deleteUser',
 | 
						|
            'responses' => [
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid username supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "User not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'GET',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/{username}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'getUserByName',
 | 
						|
            'responses' => [
 | 
						|
                '200' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "successful operation",
 | 
						|
  "content" : {
 | 
						|
    "application/xml" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/User"
 | 
						|
      }
 | 
						|
    },
 | 
						|
    "application/json" : {
 | 
						|
      "schema" : {
 | 
						|
        "$ref" : "#/components/schemas/User"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid username supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "User not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
        [
 | 
						|
            'httpMethod' => 'PUT',
 | 
						|
            'basePathWithoutHost' => '/v2',
 | 
						|
            'path' => '/user/{username}',
 | 
						|
            'apiPackage' => 'OpenAPIServer\Api',
 | 
						|
            'classname' => 'AbstractUserApi',
 | 
						|
            'userClassname' => 'UserApi',
 | 
						|
            'operationId' => 'updateUser',
 | 
						|
            'responses' => [
 | 
						|
                '400' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "Invalid user supplied"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
                '404' => [
 | 
						|
                    'jsonSchema' => '{
 | 
						|
  "description" : "User not found"
 | 
						|
}',
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
            'authMethods' => [
 | 
						|
                // apiKey security schema named 'api_key'
 | 
						|
                [
 | 
						|
                    'type' => 'apiKey',
 | 
						|
                    'isBasic' => false,
 | 
						|
                    'isBearer' => false,
 | 
						|
                    'isApiKey' => true,
 | 
						|
                    'isOAuth' => false,
 | 
						|
                    'keyParamName' => 'api_key',
 | 
						|
                    'isKeyInHeader' => true,
 | 
						|
                    'isKeyInQuery' => false,
 | 
						|
                    'isKeyInCookie' => false,
 | 
						|
                ],
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
    ];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Class constructor
 | 
						|
     *
 | 
						|
     * @param ContainerInterface|array $settings Either a ContainerInterface or an associative array of app settings
 | 
						|
     *
 | 
						|
     * @throws HttpNotImplementedException When implementation class doesn't exists
 | 
						|
     * @throws Exception when not supported authorization schema type provided
 | 
						|
     */
 | 
						|
    public function __construct($settings = [])
 | 
						|
    {
 | 
						|
        if ($settings instanceof ContainerInterface) {
 | 
						|
            // Set container to create App with on AppFactory
 | 
						|
            AppFactory::setContainer($settings);
 | 
						|
        }
 | 
						|
        $this->slimApp = AppFactory::create();
 | 
						|
 | 
						|
        // middlewares requires Psr\Container\ContainerInterface
 | 
						|
        $container = $this->slimApp->getContainer();
 | 
						|
 | 
						|
        $authPackage = 'OpenAPIServer\Auth';
 | 
						|
        $basicAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
 | 
						|
            $message = "How about extending AbstractAuthenticator class by {$authPackage}\BasicAuthenticator?";
 | 
						|
            throw new HttpNotImplementedException($request, $message);
 | 
						|
        };
 | 
						|
        $apiKeyAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
 | 
						|
            $message = "How about extending AbstractAuthenticator class by {$authPackage}\ApiKeyAuthenticator?";
 | 
						|
            throw new HttpNotImplementedException($request, $message);
 | 
						|
        };
 | 
						|
        $oAuthAuthenticator = function (ServerRequestInterface &$request, TokenSearch $tokenSearch) use ($authPackage) {
 | 
						|
            $message = "How about extending AbstractAuthenticator class by {$authPackage}\OAuthAuthenticator?";
 | 
						|
            throw new HttpNotImplementedException($request, $message);
 | 
						|
        };
 | 
						|
 | 
						|
        $userOptions = $this->getSetting($settings, 'tokenAuthenticationOptions', null);
 | 
						|
 | 
						|
        // mocker options
 | 
						|
        $mockerOptions = $this->getSetting($settings, 'mockerOptions', null);
 | 
						|
        $dataMocker = $mockerOptions['dataMocker'] ?? new OpenApiDataMocker();
 | 
						|
        $responseFactory = new ResponseFactory();
 | 
						|
        $getMockStatusCodeCallback = $mockerOptions['getMockStatusCodeCallback'] ?? null;
 | 
						|
        $mockAfterCallback = $mockerOptions['afterCallback'] ?? null;
 | 
						|
 | 
						|
        foreach ($this->operations as $operation) {
 | 
						|
            $callback = function ($request, $response, $arguments) use ($operation) {
 | 
						|
                $message = "How about extending {$operation['classname']} by {$operation['apiPackage']}\\{$operation['userClassname']} class implementing {$operation['operationId']} as a {$operation['httpMethod']} method?";
 | 
						|
                throw new HttpNotImplementedException($request, $message);
 | 
						|
            };
 | 
						|
            $middlewares = [new JsonBodyParserMiddleware()];
 | 
						|
 | 
						|
            if (class_exists("\\{$operation['apiPackage']}\\{$operation['userClassname']}")) {
 | 
						|
                $callback = "\\{$operation['apiPackage']}\\{$operation['userClassname']}:{$operation['operationId']}";
 | 
						|
            }
 | 
						|
 | 
						|
            foreach ($operation['authMethods'] as $authMethod) {
 | 
						|
                switch ($authMethod['type']) {
 | 
						|
                    case 'http':
 | 
						|
                        $authenticatorClassname = "\\{$authPackage}\\BasicAuthenticator";
 | 
						|
                        if (class_exists($authenticatorClassname)) {
 | 
						|
                            $basicAuthenticator = new $authenticatorClassname($container);
 | 
						|
                        }
 | 
						|
 | 
						|
                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
 | 
						|
                            'authenticator' => $basicAuthenticator,
 | 
						|
                            'regex' => $authMethod['isBearer'] ? '/Bearer\s+(.*)$/i' : '/Basic\s+(.*)$/i',
 | 
						|
                            'header' => 'Authorization',
 | 
						|
                            'parameter' => null,
 | 
						|
                            'cookie' => null,
 | 
						|
                            'argument' => null,
 | 
						|
                        ], $userOptions));
 | 
						|
                        break;
 | 
						|
                    case 'apiKey':
 | 
						|
                        $authenticatorClassname = "\\{$authPackage}\\ApiKeyAuthenticator";
 | 
						|
                        if (class_exists($authenticatorClassname)) {
 | 
						|
                            $apiKeyAuthenticator = new $authenticatorClassname($container);
 | 
						|
                        }
 | 
						|
 | 
						|
                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
 | 
						|
                            'authenticator' => $apiKeyAuthenticator,
 | 
						|
                            'regex' => '/^(.*)$/i',
 | 
						|
                            'header' => $authMethod['isKeyInHeader'] ? $authMethod['keyParamName'] : null,
 | 
						|
                            'parameter' => $authMethod['isKeyInQuery'] ? $authMethod['keyParamName'] : null,
 | 
						|
                            'cookie' => $authMethod['isKeyInCookie'] ? $authMethod['keyParamName'] : null,
 | 
						|
                            'argument' => null,
 | 
						|
                        ], $userOptions));
 | 
						|
                        break;
 | 
						|
                    case 'oauth2':
 | 
						|
                        $authenticatorClassname = "\\{$authPackage}\\OAuthAuthenticator";
 | 
						|
                        if (class_exists($authenticatorClassname)) {
 | 
						|
                            $oAuthAuthenticator = new $authenticatorClassname($container, $authMethod['scopes']);
 | 
						|
                        }
 | 
						|
 | 
						|
                        $middlewares[] = new TokenAuthentication($this->getTokenAuthenticationOptions([
 | 
						|
                            'authenticator' => $oAuthAuthenticator,
 | 
						|
                            'regex' => '/Bearer\s+(.*)$/i',
 | 
						|
                            'header' => 'Authorization',
 | 
						|
                            'parameter' => null,
 | 
						|
                            'cookie' => null,
 | 
						|
                            'argument' => null,
 | 
						|
                        ], $userOptions));
 | 
						|
                        break;
 | 
						|
                    default:
 | 
						|
                        throw new Exception('Unknown authorization schema type');
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if (is_callable($getMockStatusCodeCallback)) {
 | 
						|
                $mockSchemaResponses = array_map(function ($item) {
 | 
						|
                    return json_decode($item['jsonSchema'], true);
 | 
						|
                }, $operation['responses']);
 | 
						|
                $middlewares[] = new OpenApiDataMockerRouteMiddleware($dataMocker, $mockSchemaResponses, $responseFactory, $getMockStatusCodeCallback, $mockAfterCallback);
 | 
						|
            }
 | 
						|
 | 
						|
            $this->addRoute(
 | 
						|
                [$operation['httpMethod']],
 | 
						|
                "{$operation['basePathWithoutHost']}{$operation['path']}",
 | 
						|
                $callback,
 | 
						|
                $middlewares
 | 
						|
            )->setName($operation['operationId']);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Merges user defined options with dynamic params
 | 
						|
     *
 | 
						|
     * @param array $staticOptions Required static options
 | 
						|
     * @param array $userOptions   User options
 | 
						|
     *
 | 
						|
     * @return array Merged array
 | 
						|
     */
 | 
						|
    private function getTokenAuthenticationOptions(array $staticOptions, array $userOptions = null)
 | 
						|
    {
 | 
						|
        if (is_array($userOptions) === false) {
 | 
						|
            return $staticOptions;
 | 
						|
        }
 | 
						|
 | 
						|
        return array_merge($userOptions, $staticOptions);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns app setting by name.
 | 
						|
     *
 | 
						|
     * @param ContainerInterface|array $settings    Either a ContainerInterface or an associative array of app settings
 | 
						|
     * @param string                   $settingName Setting name
 | 
						|
     * @param mixed                    $default     Default setting value.
 | 
						|
     *
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    private function getSetting($settings, $settingName, $default = null)
 | 
						|
    {
 | 
						|
        if ($settings instanceof ContainerInterface && $settings->has($settingName)) {
 | 
						|
            return $settings->get($settingName);
 | 
						|
        } elseif (is_array($settings) && array_key_exists($settingName, $settings)) {
 | 
						|
            return $settings[$settingName];
 | 
						|
        }
 | 
						|
 | 
						|
        return $default;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Add route with multiple methods
 | 
						|
     *
 | 
						|
     * @param string[]        $methods     Numeric array of HTTP method names
 | 
						|
     * @param string          $pattern     The route URI pattern
 | 
						|
     * @param callable|string $callable    The route callback routine
 | 
						|
     * @param array|null      $middlewares List of middlewares
 | 
						|
     *
 | 
						|
     * @return RouteInterface
 | 
						|
     *
 | 
						|
     * @throws InvalidArgumentException If the route pattern isn't a string
 | 
						|
     */
 | 
						|
    public function addRoute(array $methods, string $pattern, $callable, $middlewares = [])
 | 
						|
    {
 | 
						|
        $route = $this->slimApp->map($methods, $pattern, $callable);
 | 
						|
        foreach ($middlewares as $middleware) {
 | 
						|
            $route->add($middleware);
 | 
						|
        }
 | 
						|
        return $route;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns Slim Framework instance
 | 
						|
     *
 | 
						|
     * @return App
 | 
						|
     */
 | 
						|
    public function getSlimApp()
 | 
						|
    {
 | 
						|
        return $this->slimApp;
 | 
						|
    }
 | 
						|
}
 |