updated core to 8.6.1 via composer
This commit is contained in:
@@ -13,6 +13,13 @@ use Drupal\rest\RestResourceConfigInterface;
|
||||
* @ConfigEntityType(
|
||||
* id = "rest_resource_config",
|
||||
* label = @Translation("REST resource configuration"),
|
||||
* label_collection = @Translation("REST resource configurations"),
|
||||
* label_singular = @Translation("REST resource configuration"),
|
||||
* label_plural = @Translation("REST resource configurations"),
|
||||
* label_count = @PluralTranslation(
|
||||
* singular = "@count REST resource configuration",
|
||||
* plural = "@count REST resource configurations",
|
||||
* ),
|
||||
* config_prefix = "resource",
|
||||
* admin_permission = "administer rest resources",
|
||||
* label_callback = "getLabelFromPlugin",
|
||||
@@ -203,7 +210,7 @@ class RestResourceConfig extends ConfigEntityBase implements RestResourceConfigI
|
||||
*/
|
||||
public function getPluginCollections() {
|
||||
return [
|
||||
'resource' => new DefaultSingleLazyPluginCollection($this->getResourcePluginManager(), $this->plugin_id, [])
|
||||
'resource' => new DefaultSingleLazyPluginCollection($this->getResourcePluginManager(), $this->plugin_id, []),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Drupal\rest\Plugin\rest\resource;
|
||||
|
||||
use Drupal\Component\Plugin\DependentPluginInterface;
|
||||
use Drupal\Component\Plugin\PluginManagerInterface;
|
||||
use Drupal\Core\Access\AccessResultReasonInterface;
|
||||
use Drupal\Core\Cache\CacheableResponseInterface;
|
||||
use Drupal\Core\Config\Entity\ConfigEntityType;
|
||||
use Drupal\Core\Entity\EntityTypeManagerInterface;
|
||||
@@ -276,7 +277,8 @@ class EntityResource extends ResourceBase implements DependentPluginInterface {
|
||||
protected function checkPatchFieldAccess(FieldItemListInterface $original_field, FieldItemListInterface $received_field) {
|
||||
// If the user is allowed to edit the field, it is always safe to set the
|
||||
// received value. We may be setting an unchanged value, but that is ok.
|
||||
if ($original_field->access('edit')) {
|
||||
$field_edit_access = $original_field->access('edit', NULL, TRUE);
|
||||
if ($field_edit_access->isAllowed()) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -295,7 +297,14 @@ class EntityResource extends ResourceBase implements DependentPluginInterface {
|
||||
// It's helpful and safe to let the user know when they are not allowed to
|
||||
// update a field.
|
||||
$field_name = $received_field->getName();
|
||||
throw new AccessDeniedHttpException("Access denied on updating field '$field_name'.");
|
||||
$error_message = "Access denied on updating field '$field_name'.";
|
||||
if ($field_edit_access instanceof AccessResultReasonInterface) {
|
||||
$reason = $field_edit_access->getReason();
|
||||
if ($reason) {
|
||||
$error_message .= ' ' . $reason;
|
||||
}
|
||||
}
|
||||
throw new AccessDeniedHttpException($error_message);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -166,6 +166,7 @@ class RestExport extends PathPluginBase implements ResponseDisplayPluginInterfac
|
||||
$container->getParameter('serializer.format_providers')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
||||
@@ -69,16 +69,51 @@ class RequestHandler implements ContainerInjectionInterface {
|
||||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* The HTTP request object.
|
||||
* @param \Drupal\rest\RestResourceConfigInterface $_rest_resource_config
|
||||
* REST resource config entity ID.
|
||||
* The REST resource config entity.
|
||||
*
|
||||
* @return \Drupal\rest\ResourceResponseInterface|\Symfony\Component\HttpFoundation\Response
|
||||
* The REST resource response.
|
||||
*/
|
||||
public function handle(RouteMatchInterface $route_match, Request $request, RestResourceConfigInterface $_rest_resource_config) {
|
||||
$response = $this->delegateToRestResourcePlugin($route_match, $request, $_rest_resource_config->getResourcePlugin());
|
||||
$resource = $_rest_resource_config->getResourcePlugin();
|
||||
$unserialized = $this->deserialize($route_match, $request, $resource);
|
||||
$response = $this->delegateToRestResourcePlugin($route_match, $request, $unserialized, $resource);
|
||||
return $this->prepareResponse($response, $_rest_resource_config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles a REST API request without deserializing the request body.
|
||||
*
|
||||
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match
|
||||
* The route match.
|
||||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* The HTTP request object.
|
||||
* @param \Drupal\rest\RestResourceConfigInterface $_rest_resource_config
|
||||
* The REST resource config entity.
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response|\Drupal\rest\ResourceResponseInterface
|
||||
* The REST resource response.
|
||||
*/
|
||||
public function handleRaw(RouteMatchInterface $route_match, Request $request, RestResourceConfigInterface $_rest_resource_config) {
|
||||
$resource = $_rest_resource_config->getResourcePlugin();
|
||||
$response = $this->delegateToRestResourcePlugin($route_match, $request, NULL, $resource);
|
||||
return $this->prepareResponse($response, $_rest_resource_config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares the REST resource response.
|
||||
*
|
||||
* @param \Drupal\rest\ResourceResponseInterface $response
|
||||
* The REST resource response.
|
||||
* @param \Drupal\rest\RestResourceConfigInterface $resource_config
|
||||
* The REST resource config entity.
|
||||
*
|
||||
* @return \Drupal\rest\ResourceResponseInterface
|
||||
* The prepared REST resource response.
|
||||
*/
|
||||
protected function prepareResponse($response, RestResourceConfigInterface $resource_config) {
|
||||
if ($response instanceof CacheableResponseInterface) {
|
||||
$response->addCacheableDependency($_rest_resource_config);
|
||||
$response->addCacheableDependency($resource_config);
|
||||
// Add global rest settings config's cache tag, for BC flags.
|
||||
// @see \Drupal\rest\Plugin\rest\resource\EntityResource::permissions()
|
||||
// @see \Drupal\rest\EventSubscriber\RestConfigSubscriber
|
||||
@@ -181,14 +216,15 @@ class RequestHandler implements ContainerInjectionInterface {
|
||||
* The route match.
|
||||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* The HTTP request object.
|
||||
* @param mixed|null $unserialized
|
||||
* The unserialized request body, if any.
|
||||
* @param \Drupal\rest\Plugin\ResourceInterface $resource
|
||||
* The REST resource plugin.
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response|\Drupal\rest\ResourceResponseInterface
|
||||
* The REST resource response.
|
||||
*/
|
||||
protected function delegateToRestResourcePlugin(RouteMatchInterface $route_match, Request $request, ResourceInterface $resource) {
|
||||
$unserialized = $this->deserialize($route_match, $request, $resource);
|
||||
protected function delegateToRestResourcePlugin(RouteMatchInterface $route_match, Request $request, $unserialized, ResourceInterface $resource) {
|
||||
$method = static::getNormalizedRequestMethod($route_match);
|
||||
|
||||
// Determine the request parameters that should be passed to the resource
|
||||
|
||||
@@ -121,14 +121,14 @@ class ResourceRoutes implements EventSubscriberInterface {
|
||||
|
||||
// The configuration has been validated, so we update the route to:
|
||||
// - set the allowed response body content types/formats for methods
|
||||
// that may send response bodies
|
||||
// that may send response bodies (unless hardcoded by the plugin)
|
||||
// - set the allowed request body content types/formats for methods that
|
||||
// allow request bodies to be sent
|
||||
// allow request bodies to be sent (unless hardcoded by the plugin)
|
||||
// - set the allowed authentication providers
|
||||
if (in_array($method, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH'], TRUE)) {
|
||||
if (in_array($method, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH'], TRUE) && !$route->hasRequirement('_format')) {
|
||||
$route->addRequirements(['_format' => implode('|', $rest_resource_config->getFormats($method))]);
|
||||
}
|
||||
if (in_array($method, ['POST', 'PATCH', 'PUT'], TRUE)) {
|
||||
if (in_array($method, ['POST', 'PATCH', 'PUT'], TRUE) && !$route->hasRequirement('_content_type_format')) {
|
||||
$route->addRequirements(['_content_type_format' => implode('|', $rest_resource_config->getFormats($method))]);
|
||||
}
|
||||
$route->setOption('_auth', $rest_resource_config->getAuthenticationProviders($method));
|
||||
|
||||
@@ -383,7 +383,7 @@ abstract class RESTTestBase extends WebTestBase {
|
||||
$resource_config = $this->resourceConfigStorage->create([
|
||||
'id' => $resource_config_id,
|
||||
'granularity' => RestResourceConfigInterface::METHOD_GRANULARITY,
|
||||
'configuration' => []
|
||||
'configuration' => [],
|
||||
]);
|
||||
}
|
||||
$configuration = $resource_config->get('configuration');
|
||||
@@ -562,7 +562,7 @@ abstract class RESTTestBase extends WebTestBase {
|
||||
* The first value to check.
|
||||
* @param $message
|
||||
* (optional) A message to display with the assertion. Do not translate
|
||||
* messages: use \Drupal\Component\Utility\SafeMarkup::format() to embed
|
||||
* messages: use \Drupal\Component\Render\FormattableMarkup to embed
|
||||
* variables in the message text, not t(). If left blank, a default message
|
||||
* will be displayed.
|
||||
* @param $group
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\rest\Tests\Update;
|
||||
|
||||
use Drupal\system\Tests\Update\UpdatePathTestBase;
|
||||
|
||||
/**
|
||||
* Ensures that update hook is run properly for REST Export config.
|
||||
*
|
||||
* @group Update
|
||||
*/
|
||||
class RestExportAuthCorrectionUpdateTest extends UpdatePathTestBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setDatabaseDumpFiles() {
|
||||
$this->databaseDumpFiles = [
|
||||
__DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz',
|
||||
__DIR__ . '/../../../tests/fixtures/update/rest-export-with-authentication-correction.php',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that update hook is run for "rest" module.
|
||||
*/
|
||||
public function testUpdate() {
|
||||
$this->runUpdates();
|
||||
|
||||
// Get particular view.
|
||||
$view = \Drupal::entityTypeManager()->getStorage('view')->load('rest_export_with_authorization_correction');
|
||||
$displays = $view->get('display');
|
||||
$this->assertIdentical($displays['rest_export_1']['display_options']['auth'], ['cookie'], 'Cookie is used for authentication');
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user