Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/Bridge/Symfony/Bundle/Action/SwaggerUiAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,12 @@ final class SwaggerUiAction
private $graphQlPlaygroundEnabled;
private $swaggerVersions;
private $swaggerUiAction;
private $assetPackage;

/**
* @param int[] $swaggerVersions
*/
public function __construct(ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory, ResourceMetadataFactoryInterface $resourceMetadataFactory, NormalizerInterface $normalizer, TwigEnvironment $twig, UrlGeneratorInterface $urlGenerator, string $title = '', string $description = '', string $version = '', $formats = [], $oauthEnabled = false, $oauthClientId = '', $oauthClientSecret = '', $oauthType = '', $oauthFlow = '', $oauthTokenUrl = '', $oauthAuthorizationUrl = '', $oauthScopes = [], bool $showWebby = true, bool $swaggerUiEnabled = false, bool $reDocEnabled = false, bool $graphqlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false, array $swaggerVersions = [2, 3], OpenApiSwaggerUiAction $swaggerUiAction = null)
public function __construct(ResourceNameCollectionFactoryInterface $resourceNameCollectionFactory, ResourceMetadataFactoryInterface $resourceMetadataFactory, NormalizerInterface $normalizer, TwigEnvironment $twig, UrlGeneratorInterface $urlGenerator, string $title = '', string $description = '', string $version = '', $formats = [], $oauthEnabled = false, $oauthClientId = '', $oauthClientSecret = '', $oauthType = '', $oauthFlow = '', $oauthTokenUrl = '', $oauthAuthorizationUrl = '', $oauthScopes = [], bool $showWebby = true, bool $swaggerUiEnabled = false, bool $reDocEnabled = false, bool $graphqlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false, array $swaggerVersions = [2, 3], OpenApiSwaggerUiAction $swaggerUiAction = null, $assetPackage = null)
{
$this->resourceNameCollectionFactory = $resourceNameCollectionFactory;
$this->resourceMetadataFactory = $resourceMetadataFactory;
Expand All @@ -91,6 +92,7 @@ public function __construct(ResourceNameCollectionFactoryInterface $resourceName
$this->graphQlPlaygroundEnabled = $graphQlPlaygroundEnabled;
$this->swaggerVersions = $swaggerVersions;
$this->swaggerUiAction = $swaggerUiAction;
$this->assetPackage = $assetPackage;

if (null === $this->swaggerUiAction) {
@trigger_error(sprintf('The use of "%s" is deprecated since API Platform 2.6, use "%s" instead.', __CLASS__, OpenApiSwaggerUiAction::class), E_USER_DEPRECATED);
Expand Down Expand Up @@ -143,6 +145,7 @@ private function getContext(Request $request, Documentation $documentation): arr
'graphqlEnabled' => $this->graphqlEnabled,
'graphiQlEnabled' => $this->graphiQlEnabled,
'graphQlPlaygroundEnabled' => $this->graphQlPlaygroundEnabled,
'assetPackage' => $this->assetPackage,
];

$swaggerContext = ['spec_version' => $request->query->getInt('spec_version', $this->swaggerVersions[0] ?? 2)];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ private function registerCommonConfiguration(ContainerBuilder $container, array
if ($config['name_converter']) {
$container->setAlias('api_platform.name_converter', $config['name_converter']);
}
$container->setParameter('api_platform.asset_package', $config['asset_package']);
$container->setParameter('api_platform.defaults', $this->normalizeDefaults($config['defaults'] ?? []));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ public function getConfigTreeBuilder()
->info('Specify the default operation path resolver to use for generating resources operations path.')
->end()
->scalarNode('name_converter')->defaultNull()->info('Specify a name converter to use.')->end()
->scalarNode('asset_package')->defaultNull()->info('Specify an asset package name to use.')->end()
->scalarNode('path_segment_name_generator')->defaultValue('api_platform.path_segment_name_generator.underscore')->info('Specify a path name generator to use.')->end()
->booleanNode('allow_plain_identifiers')->defaultFalse()->info('Allow plain identifiers, for example "id" instead of "@id" when denormalizing a relation.')->end()
->arrayNode('validator')
Expand Down
2 changes: 2 additions & 0 deletions src/Bridge/Symfony/Bundle/Resources/config/swagger-ui.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
<argument>%api_platform.graphql.graphql_playground.enabled%</argument>
<argument>%api_platform.swagger.versions%</argument>
<argument type="service" id="api_platform.swagger_ui.action" />
<argument>%api_platform.asset_package%</argument>
</service>

<service id="api_platform.swagger_ui.context" class="ApiPlatform\Core\Bridge\Symfony\Bundle\SwaggerUi\SwaggerUiContext">
Expand All @@ -46,6 +47,7 @@
<argument>%api_platform.graphql.enabled%</argument>
<argument>%api_platform.graphql.graphiql.enabled%</argument>
<argument>%api_platform.graphql.graphql_playground.enabled%</argument>
<argument>%api_platform.asset_package%</argument>
</service>

<service id="api_platform.swagger_ui.action" class="ApiPlatform\Core\Bridge\Symfony\Bundle\SwaggerUi\SwaggerUiAction" public="true">
Expand Down
22 changes: 11 additions & 11 deletions src/Bridge/Symfony/Bundle/Resources/views/SwaggerUi/index.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

{% block stylesheet %}
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700">
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui.css') }}">
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/style.css') }}">
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui.css', assetPackage) }}">
<link rel="stylesheet" href="{{ asset('bundles/apiplatform/style.css', assetPackage) }}">
{% endblock %}

{% set oauth_data = {'oauth': swagger_data.oauth|merge({'redirectUrl' : absolute_url(asset('bundles/apiplatform/swagger-ui/oauth2-redirect.html')) })} %}
{% set oauth_data = {'oauth': swagger_data.oauth|merge({'redirectUrl' : absolute_url(asset('bundles/apiplatform/swagger-ui/oauth2-redirect.html', assetPackage)) })} %}
{# json_encode(65) is for JSON_UNESCAPED_SLASHES|JSON_HEX_TAG to avoid JS XSS #}
<script id="swagger-data" type="application/json">{{ swagger_data|merge(oauth_data)|json_encode(65)|raw }}</script>
</head>
Expand Down Expand Up @@ -50,12 +50,12 @@
</defs>
</svg>
<header>
<a id="logo" href="https://api-platform.com"><img src="{{ asset('bundles/apiplatform/logo-header.svg') }}" alt="API Platform"></a>
<a id="logo" href="https://api-platform.com"><img src="{{ asset('bundles/apiplatform/logo-header.svg', assetPackage) }}" alt="API Platform"></a>
</header>

{% if showWebby %}
<div class="web"><img src="{{ asset('bundles/apiplatform/web.png') }}"></div>
<div class="webby"><img src="{{ asset('bundles/apiplatform/webby.png') }}"></div>
<div class="web"><img src="{{ asset('bundles/apiplatform/web.png', assetPackage) }}"></div>
<div class="webby"><img src="{{ asset('bundles/apiplatform/webby.png', assetPackage) }}"></div>
{% endif %}

<div id="swagger-ui" class="api-platform"></div>
Expand All @@ -82,12 +82,12 @@

{% block javascript %}
{% if (reDocEnabled and not swaggerUiEnabled) or (reDocEnabled and 're_doc' == active_ui) %}
<script src="{{ asset('bundles/apiplatform/redoc/redoc.standalone.js') }}"></script>
<script src="{{ asset('bundles/apiplatform/init-redoc-ui.js') }}"></script>
<script src="{{ asset('bundles/apiplatform/redoc/redoc.standalone.js', assetPackage) }}"></script>
<script src="{{ asset('bundles/apiplatform/init-redoc-ui.js', assetPackage) }}"></script>
{% else %}
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-bundle.js') }}"></script>
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-standalone-preset.js') }}"></script>
<script src="{{ asset('bundles/apiplatform/init-swagger-ui.js') }}"></script>
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-bundle.js', assetPackage) }}"></script>
<script src="{{ asset('bundles/apiplatform/swagger-ui/swagger-ui-standalone-preset.js', assetPackage) }}"></script>
<script src="{{ asset('bundles/apiplatform/init-swagger-ui.js', assetPackage) }}"></script>
{% endif %}
{% endblock %}

Expand Down
1 change: 1 addition & 0 deletions src/Bridge/Symfony/Bundle/SwaggerUi/SwaggerUiAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public function __invoke(Request $request)
'graphqlEnabled' => $this->swaggerUiContext->isGraphQlEnabled(),
'graphiQlEnabled' => $this->swaggerUiContext->isGraphiQlEnabled(),
'graphQlPlaygroundEnabled' => $this->swaggerUiContext->isGraphQlPlaygroundEnabled(),
'assetPackage' => $this->swaggerUiContext->getAssetPackage(),
];

$swaggerData = [
Expand Down
9 changes: 8 additions & 1 deletion src/Bridge/Symfony/Bundle/SwaggerUi/SwaggerUiContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,17 @@ final class SwaggerUiContext
private $graphQlEnabled;
private $graphiQlEnabled;
private $graphQlPlaygroundEnabled;
private $assetPackage;

public function __construct(bool $swaggerUiEnabled = false, bool $showWebby = true, bool $reDocEnabled = false, bool $graphQlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false)
public function __construct(bool $swaggerUiEnabled = false, bool $showWebby = true, bool $reDocEnabled = false, bool $graphQlEnabled = false, bool $graphiQlEnabled = false, bool $graphQlPlaygroundEnabled = false, $assetPackage = null)
{
$this->swaggerUiEnabled = $swaggerUiEnabled;
$this->showWebby = $showWebby;
$this->reDocEnabled = $reDocEnabled;
$this->graphQlEnabled = $graphQlEnabled;
$this->graphiQlEnabled = $graphiQlEnabled;
$this->graphQlPlaygroundEnabled = $graphQlPlaygroundEnabled;
$this->assetPackage = $assetPackage;
}

public function isSwaggerUiEnabled(): bool
Expand Down Expand Up @@ -61,4 +63,9 @@ public function isGraphQlPlaygroundEnabled(): bool
{
return $this->graphQlPlaygroundEnabled;
}

public function getAssetPackage(): ?string
{
return $this->assetPackage;
}
}
1 change: 1 addition & 0 deletions tests/Bridge/Symfony/Bundle/Action/SwaggerUiActionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ public function testDoNotRunCurrentRequest(Request $request)
'graphqlEnabled' => false,
'graphiQlEnabled' => false,
'graphQlPlaygroundEnabled' => false,
'assetPackage' => null,
'swagger_data' => [
'url' => '/url',
'spec' => self::SPEC,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -872,6 +872,7 @@ private function getPartialContainerBuilderProphecy($configuration = null)
'api_platform.http_cache.vary' => ['Accept'],
'api_platform.http_cache.public' => null,
'api_platform.http_cache.invalidation.max_header_length' => 7500,
'api_platform.asset_package' => null,
'api_platform.defaults' => ['attributes' => ['stateless' => true]],
'api_platform.enable_entrypoint' => true,
'api_platform.enable_docs' => true,
Expand Down Expand Up @@ -1176,6 +1177,7 @@ private function getBaseContainerBuilderProphecy(array $doctrineIntegrationsToLo
'api_platform.resource_class_directories' => Argument::type('array'),
'api_platform.validator.serialize_payload_fields' => [],
'api_platform.elasticsearch.enabled' => false,
'api_platform.asset_package' => null,
'api_platform.defaults' => ['attributes' => ['stateless' => true]],
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ private function runDefaultConfigTests(array $doctrineIntegrationsToLoad = ['orm
],
'allow_plain_identifiers' => false,
'resource_class_directories' => [],
'asset_package' => null,
], $config);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ public function testDoNotRunCurrentRequest(Request $request)
'graphqlEnabled' => false,
'graphiQlEnabled' => false,
'graphQlPlaygroundEnabled' => false,
'assetPackage' => null,
'swagger_data' => [
'url' => '/url',
'spec' => self::SPEC,
Expand Down