class QueryParameterWorkspaceNegotiator
Same name and namespace in other branches
- 9 core/modules/workspaces/src/Negotiator/QueryParameterWorkspaceNegotiator.php \Drupal\workspaces\Negotiator\QueryParameterWorkspaceNegotiator
- 8.9.x core/modules/workspaces/src/Negotiator/QueryParameterWorkspaceNegotiator.php \Drupal\workspaces\Negotiator\QueryParameterWorkspaceNegotiator
- 10 core/modules/workspaces/src/Negotiator/QueryParameterWorkspaceNegotiator.php \Drupal\workspaces\Negotiator\QueryParameterWorkspaceNegotiator
Defines the query parameter workspace negotiator.
Hierarchy
- class \Drupal\workspaces\Negotiator\SessionWorkspaceNegotiator extends \Drupal\workspaces\Negotiator\WorkspaceNegotiatorInterface, \Drupal\workspaces\Negotiator\WorkspaceIdNegotiatorInterface
- class \Drupal\workspaces\Negotiator\QueryParameterWorkspaceNegotiator implements \Drupal\workspaces\Negotiator\SessionWorkspaceNegotiator
Expanded class hierarchy of QueryParameterWorkspaceNegotiator
1 file declares its use of QueryParameterWorkspaceNegotiator
- FormOperations.php in core/
modules/ workspaces/ src/ Hook/ FormOperations.php
1 string reference to 'QueryParameterWorkspaceNegotiator'
- workspaces.services.yml in core/
modules/ workspaces/ workspaces.services.yml - core/modules/workspaces/workspaces.services.yml
1 service uses QueryParameterWorkspaceNegotiator
File
-
core/
modules/ workspaces/ src/ Negotiator/ QueryParameterWorkspaceNegotiator.php, line 13
Namespace
Drupal\workspaces\NegotiatorView source
class QueryParameterWorkspaceNegotiator extends SessionWorkspaceNegotiator {
/**
* Whether the negotiated workspace should be persisted.
*/
protected bool $persist = TRUE;
/**
* {@inheritdoc}
*/
public function applies(Request $request) {
return is_string($request->query
->get('workspace')) && is_string($request->query
->get('token')) && parent::applies($request);
}
/**
* {@inheritdoc}
*/
public function getActiveWorkspaceId(Request $request) : ?string {
$this->persist = (bool) $request->query
->get('persist', TRUE);
$workspace_id = (string) $request->query
->get('workspace');
$token = (string) $request->query
->get('token');
$is_valid_token = hash_equals($this->getQueryToken($workspace_id), $token);
// This negotiator receives a workspace ID from user input, so a minimal
// validation is needed to ensure that we protect against fake input before
// the workspace manager fully validates the negotiated workspace ID.
// @see \Drupal\workspaces\WorkspaceManager::getActiveWorkspace()
return $is_valid_token ? $workspace_id : NULL;
}
/**
* {@inheritdoc}
*/
public function setActiveWorkspace(WorkspaceInterface $workspace) {
if ($this->persist) {
parent::setActiveWorkspace($workspace);
}
}
/**
* {@inheritdoc}
*/
public function unsetActiveWorkspace() {
if ($this->persist) {
parent::unsetActiveWorkspace();
}
}
/**
* Returns the query options used by this negotiator.
*
* @param string $workspace_id
* A workspace ID.
*
* @return array
* An array of query options that can be used for a \Drupal\Core\Url object.
*/
public function getQueryOptions(string $workspace_id) : array {
return [
'workspace' => $workspace_id,
'token' => $this->getQueryToken($workspace_id),
];
}
/**
* Calculates a token based on a workspace ID.
*
* @param string $workspace_id
* The workspace ID.
*
* @return string
* An 8 char token based on the given workspace ID.
*/
protected function getQueryToken(string $workspace_id) : string {
// Return the first 8 characters.
return substr(Crypt::hmacBase64($workspace_id, Settings::getHashSalt()), 0, 8);
}
}
Members
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.