forked from loafle/openapi-generator-original
* Set PHP 7.1.3 required version I've tried to specify ^7.0 version at first, but main package which is symfony/framework-bundle@v4.4.8 requires PHP ^7.1.3. * Bump Symfony FrameworkBundle to ^4.4.8 Current Symfony Framework stable version is v5.0.8, but I guess it requires significant codebase upgrade, so I've sticked with 4.4.8 which shouldn't cause any breaking changes. Old requirement was ^3.3|^4.1 which compatible with 4.4.8. * Bump PHPUnit version to ^7.0 PHPUnit 8.x version required PHP ^7.2, so I'm setting 7.x version to support PHP 7.1. There is new way to specify Kernel class, related PR: https://github.com/symfony/symfony/pull/22668 * Bump PHP CS Fixer version to ^2.16.3 Configuration and all renamed rules fixed. Config file renamed to .php_cs.dist as recommended in migration guide. Migration guide from 1.x to 2.x: https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/master/UPGRADE.md#config-file * Remove PHP_CodeSniffer package Second linter doesn't make sense. I think Symfony user would prefer PHP CS Fixer over PHP_CodeSniffer because first one maintained by Symfony members. * Remove satooshi/php-coveralls package from Composer This package is abandoned and Coveralls recommends to install it directly in Travis-CI task script. * Update Travic-CI config I've changed test versions to PHP 7.1.3 and 7.2. PHPUnit generates coverage report in report/logs/clover.xml file. Then PHP CS Fixer runs with --dry-run option to not override anything just to show coding style errors. * Add basic Coveralls config This is basic recommended config for a PHP based project. * Add symfony/yaml package This package was part of satooshi/php-coveralls, now it should be defined as dev dependency. * Do not commit composer.lock I think committed composer.lock can cause CI errors while tests on fresh installs are better. * Remove confusing Ruby comment
227 lines
6.6 KiB
PHP
227 lines
6.6 KiB
PHP
<?php
|
|
/**
|
|
* Controller
|
|
*
|
|
* PHP version 7.1.3
|
|
*
|
|
* @category Class
|
|
* @package OpenAPI\Server\Controller
|
|
* @author OpenAPI Generator team
|
|
* @link https://github.com/openapitools/openapi-generator
|
|
*/
|
|
|
|
/**
|
|
* OpenAPI Petstore
|
|
*
|
|
* 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 OpenAPI\Server\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
|
use OpenAPI\Server\Service\SerializerInterface;
|
|
use OpenAPI\Server\Service\ValidatorInterface;
|
|
|
|
/**
|
|
* Controller Class Doc Comment
|
|
*
|
|
* @category Class
|
|
* @package OpenAPI\Server\Controller
|
|
* @author OpenAPI Generator team
|
|
* @link https://github.com/openapitools/openapi-generator
|
|
*/
|
|
class Controller extends AbstractController
|
|
{
|
|
protected $validator;
|
|
protected $serializer;
|
|
protected $apiServer;
|
|
|
|
public function setValidator(ValidatorInterface $validator)
|
|
{
|
|
$this->validator = $validator;
|
|
}
|
|
|
|
public function setSerializer(SerializerInterface $serializer)
|
|
{
|
|
$this->serializer = $serializer;
|
|
}
|
|
|
|
public function setApiServer($server)
|
|
{
|
|
$this->apiServer = $server;
|
|
}
|
|
|
|
/**
|
|
* This will return a response with code 400. Usage example:
|
|
* return $this->createBadRequestResponse('Unable to access this page!');
|
|
*
|
|
* @param string $message A message
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function createBadRequestResponse($message = 'Bad Request.')
|
|
{
|
|
return new Response($message, 400);
|
|
}
|
|
|
|
/**
|
|
* This will return an error response. Usage example:
|
|
* return $this->createErrorResponse(new UnauthorizedHttpException());
|
|
*
|
|
* @param HttpException $exception An HTTP exception
|
|
*
|
|
* @return Response
|
|
*/
|
|
public function createErrorResponse(HttpException $exception)
|
|
{
|
|
$statusCode = $exception->getStatusCode();
|
|
$headers = array_merge($exception->getHeaders(), ['Content-Type' => 'application/json']);
|
|
|
|
$json = $this->exceptionToArray($exception);
|
|
$json['statusCode'] = $statusCode;
|
|
|
|
return new Response(json_encode($json, 15, 512), $statusCode, $headers);
|
|
}
|
|
|
|
/**
|
|
* Serializes data to a given type format.
|
|
*
|
|
* @param mixed $data The data to serialize.
|
|
* @param string $class The source data class.
|
|
* @param string $format The target serialization format.
|
|
*
|
|
* @return string A serialized data string.
|
|
*/
|
|
protected function serialize($data, $format)
|
|
{
|
|
return $this->serializer->serialize($data, $format);
|
|
}
|
|
|
|
/**
|
|
* Deserializes data from a given type format.
|
|
*
|
|
* @param string $data The data to deserialize.
|
|
* @param string $class The target data class.
|
|
* @param string $format The source serialization format.
|
|
*
|
|
* @return mixed A deserialized data.
|
|
*/
|
|
protected function deserialize($data, $class, $format)
|
|
{
|
|
return $this->serializer->deserialize($data, $class, $format);
|
|
}
|
|
|
|
protected function validate($data, $asserts = null)
|
|
{
|
|
$errors = $this->validator->validate($data, $asserts);
|
|
|
|
if (count($errors) > 0) {
|
|
$errorsString = (string)$errors;
|
|
return $this->createBadRequestResponse($errorsString);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Converts an exception to a serializable array.
|
|
*
|
|
* @param \Exception|null $exception
|
|
*
|
|
* @return array
|
|
*/
|
|
private function exceptionToArray(\Exception $exception = null)
|
|
{
|
|
if (null === $exception) {
|
|
return null;
|
|
}
|
|
|
|
if (!$this->container->get('kernel')->isDebug()) {
|
|
return [
|
|
'message' => $exception->getMessage(),
|
|
];
|
|
}
|
|
|
|
return [
|
|
'message' => $exception->getMessage(),
|
|
'type' => get_class($exception),
|
|
'previous' => $this->exceptionToArray($exception->getPrevious()),
|
|
];
|
|
}
|
|
|
|
protected function getOutputFormat($accept, array $produced)
|
|
{
|
|
// Figure out what the client accepts
|
|
$accept = preg_split("/[\s,]+/", $accept);
|
|
|
|
if (in_array('*/*', $accept) || in_array('application/*', $accept)) {
|
|
// Prefer JSON if the client has no preference
|
|
if (in_array('application/json', $produced)) {
|
|
return 'application/json';
|
|
}
|
|
if (in_array('application/xml', $produced)) {
|
|
return 'application/xml';
|
|
}
|
|
}
|
|
|
|
if (in_array('application/json', $accept) && in_array('application/json', $produced)) {
|
|
return 'application/json';
|
|
}
|
|
|
|
if (in_array('application/xml', $accept) && in_array('application/xml', $produced)) {
|
|
return 'application/xml';
|
|
}
|
|
|
|
// If we reach this point, we don't have a common ground between server and client
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Checks whether Content-Type request header presented in supported formats.
|
|
*
|
|
* @param Request $request Request instance.
|
|
* @param array $consumes Array of supported content types.
|
|
*
|
|
* @return bool Returns true if Content-Type supported otherwise false.
|
|
*/
|
|
public static function isContentTypeAllowed(Request $request, array $consumes = [])
|
|
{
|
|
if (!empty($consumes) && $consumes[0] !== '*/*') {
|
|
$currentFormat = $request->getContentType();
|
|
foreach ($consumes as $mimeType) {
|
|
// canonize mime type
|
|
if (is_string($mimeType) && false !== $pos = strpos($mimeType, ';')) {
|
|
$mimeType = trim(substr($mimeType, 0, $pos));
|
|
}
|
|
|
|
if (!$format = $request->getFormat($mimeType)) {
|
|
// add custom format to request
|
|
$format = $mimeType;
|
|
$request->setFormat($format, $format);
|
|
$currentFormat = $request->getContentType();
|
|
}
|
|
|
|
if ($format === $currentFormat) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|