class TwitterAuthController in Open Social 8
Same name and namespace in other branches
- 8.9 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.2 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.3 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.4 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.5 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.6 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.7 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
- 8.8 modules/custom/social_auth_twitter/src/Controller/TwitterAuthController.php \Drupal\social_auth_twitter\Controller\TwitterAuthController
Manages requests to Twitter API.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\social_auth_twitter\Controller\TwitterAuthController
Expanded class hierarchy of TwitterAuthController
File
- modules/
custom/ social_auth_twitter/ src/ Controller/ TwitterAuthController.php, line 16
Namespace
Drupal\social_auth_twitter\ControllerView source
class TwitterAuthController extends ControllerBase {
/**
* The network plugin manager.
*
* @var \Drupal\social_api\Plugin\NetworkManager
*/
private $networkManager;
/**
* The Twitter authentication manager.
*
* @var \Drupal\social_auth_twitter\TwitterAuthManager
*/
private $authManager;
/**
* The current request.
*
* @var \Drupal\social_auth\SocialAuthUserManager
*/
private $request;
/**
* Contains access token to work with API.
*
* @var \Abraham\TwitterOAuth\TwitterOAuth
*/
protected $accessToken;
/**
* Contains instance of PHP Library.
*
* @var \Abraham\TwitterOAuth\TwitterOAuth
*/
protected $sdk;
/**
* TwitterAuthController constructor.
*/
public function __construct(NetworkManager $network_manager, TwitterAuthManager $auth_manager, RequestStack $request_stack) {
$this->networkManager = $network_manager;
$this->authManager = $auth_manager;
$this->request = $request_stack
->getCurrentRequest();
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('plugin.network.manager'), $container
->get('social_auth_twitter.auth_manager'), $container
->get('request_stack'));
}
/**
* Returns the redirect response.
*
* @param string $type
* Type of action, "login" or "register".
*
* @return \Drupal\Core\Routing\TrustedRedirectResponse|\Symfony\Component\HttpFoundation\RedirectResponse
* Returns a RedirectResponse.
*/
protected function getRedirectResponse($type) {
$sdk = $this
->getSdk($type);
if ($sdk instanceof RedirectResponse) {
return $sdk;
}
$this->authManager
->setSdk($sdk);
$url = $this->authManager
->getAuthenticationUrl($type);
return new TrustedRedirectResponse($url);
}
/**
* Response for path 'user/login/twitter'.
*
* Redirects the user to Twitter for authentication.
*/
public function userLogin() {
return $this
->getRedirectResponse('login');
}
/**
* Authorizes the user after redirect from Twitter.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Returns a RedirectResponse.
*/
public function userLoginCallback() {
$sdk = $this
->getSdk('login');
if ($sdk instanceof RedirectResponse) {
return $sdk;
}
$this->authManager
->setSdk($sdk);
$profile = $this
->getProfile('register');
if ($profile instanceof RedirectResponse) {
return $profile;
}
// Check whether user account exists. If account already exists,
// authorize the user and redirect him to the account page.
$account = $this
->entityTypeManager()
->getStorage('user')
->loadByProperties([
'twitter_id' => $profile->id,
]);
if (!$account) {
return $this
->redirect('social_auth_twitter.user_login_notice');
}
$account = current($account);
if (!$account
->get('status')->value) {
drupal_set_message($this
->t('Your account is blocked. Contact the site administrator.'), 'error');
return $this
->redirect('user.login');
}
user_login_finalize($account);
drupal_set_message(t('You are logged in'));
return $this
->redirect('entity.user.canonical', [
'user' => $account
->id(),
]);
}
/**
* Response for path 'user/register/twitter'.
*
* Redirects the user to Twitter for registration.
*/
public function userRegister() {
return $this
->getRedirectResponse('register');
}
/**
* Registers the new account after redirect from Twitter.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Returns a RedirectResponse.
*/
public function userRegisterCallback() {
$sdk = $this
->getSdk('register');
if ($sdk instanceof RedirectResponse) {
return $sdk;
}
$this->authManager
->setSdk($sdk);
$profile = $this
->getProfile('register');
if ($profile instanceof RedirectResponse) {
return $profile;
}
// Check whether user account exists. If account already exists,
// authorize the user and redirect him to the account page.
$account = $this
->entityTypeManager()
->getStorage('user')
->loadByProperties([
'twitter_id' => $profile->id,
]);
if ($account) {
$account = current($account);
if (!$account
->get('status')->value) {
drupal_set_message($this
->t('You already have account on this site, but your account is blocked. Contact the site administrator.'), 'error');
return $this
->redirect('user.register');
}
user_login_finalize($account);
return $this
->redirect('entity.user.canonical', [
'user' => $account
->id(),
]);
}
// Save email and name to storage to use for auto fill the registration
// form.
$data_handler = $this->networkManager
->createInstance('social_auth_twitter')
->getDataHandler();
$data_handler
->set('access_token', $this->accessToken);
$data_handler
->set('mail', NULL);
$data_handler
->set('name', $this->authManager
->getUsername());
drupal_set_message($this
->t('You are now connected with @network, please continue registration', [
'@network' => $this
->t('Twitter'),
]));
return $this
->redirect('user.register', [
'provider' => 'twitter',
]);
}
/**
* Returns the SDK instance or RedirectResponse when error occurred.
*
* @param string $type
* Type of action, "login" or "register".
*
* @return mixed|\Symfony\Component\HttpFoundation\RedirectResponse
* Returns an instance of the SDK or a Redirect Response.
*/
public function getSdk($type) {
if ($this->sdk) {
return $this->sdk;
}
$network_manager = $this->networkManager
->createInstance('social_auth_twitter');
if (!$network_manager
->isActive()) {
drupal_set_message($this
->t('@network is disabled. Contact the site administrator', [
'@network' => $this
->t('Twitter'),
]), 'error');
return $this
->redirect('user.' . $type);
}
if (!($this->sdk = $network_manager
->getSdk())) {
drupal_set_message($this
->t('@network Auth not configured properly. Contact the site administrator.', [
'@network' => $this
->t('Twitter'),
]), 'error');
return $this
->redirect('user.' . $type);
}
return $this->sdk;
}
/**
* Loads access token, then loads profile.
*
* @param string $type
* The type.
*
* @return object
* Returns an object.
*/
public function getProfile($type) {
$sdk = $this
->getSdk($type);
$data_handler = $this->networkManager
->createInstance('social_auth_twitter')
->getDataHandler();
// Get the OAuth token from Twitter.
if (!($oauth_token = $data_handler
->get('oauth_token')) || !($oauth_token_secret = $data_handler
->get('oauth_token_secret'))) {
drupal_set_message($this
->t('@network login failed. Token is not valid.', [
'@network' => $this
->t('Twitter'),
]), 'error');
return $this
->redirect('user.' . $type);
}
$this->authManager
->setAccessToken([
'oauth_token' => $oauth_token,
'oauth_token_secret' => $oauth_token_secret,
]);
// Gets the permanent access token.
$this->accessToken = $sdk
->oauth('oauth/access_token', [
'oauth_verifier' => $this->request
->get('oauth_verifier'),
]);
$this->authManager
->setAccessToken([
'oauth_token' => $this->accessToken['oauth_token'],
'oauth_token_secret' => $this->accessToken['oauth_token_secret'],
]);
// Get user's profile from Twitter API.
if (!($profile = $this->authManager
->getProfile()) || !$this->authManager
->getAccountId()) {
drupal_set_message($this
->t('@network login failed, could not load @network profile. Contact the site administrator.', [
'@network' => $this
->t('Twitter'),
]), 'error');
return $this
->redirect('user.' . $type);
}
return $profile;
}
}
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. | |
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. | |
TwitterAuthController:: |
protected | property | Contains access token to work with API. | |
TwitterAuthController:: |
private | property | The Twitter authentication manager. | |
TwitterAuthController:: |
private | property | The network plugin manager. | |
TwitterAuthController:: |
private | property | The current request. | |
TwitterAuthController:: |
protected | property | Contains instance of PHP Library. | |
TwitterAuthController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
TwitterAuthController:: |
public | function | Loads access token, then loads profile. | |
TwitterAuthController:: |
protected | function | Returns the redirect response. | |
TwitterAuthController:: |
public | function | Returns the SDK instance or RedirectResponse when error occurred. | |
TwitterAuthController:: |
public | function | Response for path 'user/login/twitter'. | |
TwitterAuthController:: |
public | function | Authorizes the user after redirect from Twitter. | |
TwitterAuthController:: |
public | function | Response for path 'user/register/twitter'. | |
TwitterAuthController:: |
public | function | Registers the new account after redirect from Twitter. | |
TwitterAuthController:: |
public | function | TwitterAuthController constructor. | |
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. |