class MainController in Bakery Single Sign-On System 8.2
Route callback functionlities.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\bakery\Controller\MainController
Expanded class hierarchy of MainController
File
- src/
Controller/ MainController.php, line 23 - Router call back functions for bakery SSO functions.
Namespace
Drupal\bakery\ControllerView source
class MainController extends ControllerBase {
/**
* @var \Drupal\Core\Database\Connection
*/
protected $connection;
/**
* @var \Drupal\bakery\Kitchen
*/
protected $kitchen;
/**
* Initialize bakery service.
*
* @param \Drupal\bakery\Kitchen $kitchen
* For bakery service.
* @param \Drupal\Core\Database\Connection $connection
* Database connection for saving mapping storage.
*/
public function __construct(Kitchen $kitchen, Connection $connection) {
$this->kitchen = $kitchen;
$this->connection = $connection;
}
/**
* When this controller is created, it will get the bakery.bakery_service.
*
* @param \Symfony\Component\DependencyInjection\ContainerInterface $container
* For getting Bakery service.
*
* @return static
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('bakery.kitchen'), $container
->get('database'));
}
/**
* Respond with account information.
*/
public function eatGingerbreadCookie(Request $request) {
// storage populated in validate.
$ginger_bread = Gingerbread::fromData($request->attributes
->get('bakery'));
$request->attributes
->remove('bakery');
$account = user_load_by_name($ginger_bread
->getAccountName());
if (!$account && $ginger_bread
->getOrEmail()) {
$account = user_load_by_mail($ginger_bread
->getAccountName());
}
/** @var \Drupal\user\UserInterface|false $account */
if ($account) {
$this
->saveChildUid($account, $ginger_bread
->getChild(), $ginger_bread
->getChildUid());
$fields = [];
// Add any synced fields.
$config = $this
->config('bakery.settings');
foreach ($config
->get('bakery_supported_fields') as $type => $enabled) {
if ($enabled && $account->{$type}) {
$fields[$type] = $account->{$type};
}
}
$message = $this->kitchen
->bakeData(new GingerbreadReturn($account
->getAccountName(), $account
->getEmail(), $account
->id(), $fields));
return new Response($message);
}
return new Response('No account found', Response::HTTP_CONFLICT);
}
/**
* Validate the account information request.
*/
public function tasteGingerbreadCookie(Request $request = NULL) {
// Work around https://www.drupal.org/project/drupal/issues/2786941
$request = $request ?? \Drupal::request();
$type = 'gingerbread';
$post = $request->request;
if (!$post
->has($type)) {
return AccessResult::forbidden();
}
$cookie = $this->kitchen
->tasteData($post
->get($type), $type);
if ($cookie === FALSE) {
return AccessResult::forbidden();
}
$request->attributes
->set('bakery', $cookie);
return AccessResult::allowed();
}
/**
* Save UID provided by a slave site. Should only be used on the master site.
*
* @param object $account
* A local user object.
* @param string $child
* The URL of the slave site.
* @param int $child_uid
* The corresponding UID on the slave site.
*/
private function saveChildUid($account, $child, $child_uid) {
// This looks like a big overly complicated merge statement?
$child_site_user_exists = $this->connection
->select('bakery_user', 'f')
->fields('f', [
'uid',
])
->condition('uid', $account
->id())
->condition('slave', $child)
->range(0, 1)
->execute()
->fetchField();
if (!empty($child_uid) && !$child_site_user_exists && in_array($child, $this
->config('bakery.settings')
->get('bakery_slaves') ?: [])) {
$row = [
'uid' => $account
->id(),
'slave' => $child,
'slave_uid' => $child_uid,
];
$this->connection
->insert('bakery_user')
->fields($row)
->execute();
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The language manager. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MainController:: |
protected | property | ||
MainController:: |
protected | property | ||
MainController:: |
public static | function |
When this controller is created, it will get the bakery.bakery_service. Overrides ControllerBase:: |
|
MainController:: |
public | function | Respond with account information. | |
MainController:: |
private | function | Save UID provided by a slave site. Should only be used on the master site. | |
MainController:: |
public | function | Validate the account information request. | |
MainController:: |
public | function | Initialize bakery service. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |