OpenIDConnectLoginForm.php in OpenID Connect / OAuth client 8
File
src/Form/OpenIDConnectLoginForm.php
View source
<?php
namespace Drupal\openid_connect\Form;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\openid_connect\OpenIDConnectSession;
use Drupal\openid_connect\OpenIDConnectClaims;
use Drupal\openid_connect\Plugin\OpenIDConnectClientManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
class OpenIDConnectLoginForm extends FormBase implements ContainerInjectionInterface {
protected $session;
protected $pluginManager;
protected $claims;
public function __construct(OpenIDConnectSession $session, OpenIDConnectClientManager $plugin_manager, OpenIDConnectClaims $claims) {
$this->session = $session;
$this->pluginManager = $plugin_manager;
$this->claims = $claims;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('openid_connect.session'), $container
->get('plugin.manager.openid_connect_client'), $container
->get('openid_connect.claims'));
}
public function getFormId() {
return 'openid_connect_login_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$definitions = $this->pluginManager
->getDefinitions();
foreach ($definitions as $client_id => $client) {
if (!$this
->config('openid_connect.settings.' . $client_id)
->get('enabled')) {
continue;
}
$form['openid_connect_client_' . $client_id . '_login'] = [
'#type' => 'submit',
'#value' => $this
->t('Log in with @client_title', [
'@client_title' => $client['label'],
]),
'#name' => $client_id,
'#prefix' => '<div>',
'#suffix' => '</div>',
];
}
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->session
->saveDestination();
$client_name = $form_state
->getTriggeringElement()['#name'];
$configuration = $this
->config('openid_connect.settings.' . $client_name)
->get('settings');
$client = $this->pluginManager
->createInstance($client_name, $configuration);
$scopes = $this->claims
->getScopes($client);
$_SESSION['openid_connect_op'] = 'login';
$response = $client
->authorize($scopes, $form_state);
$form_state
->setResponse($response);
}
}