public function Callback::callbackUrl in Google API PHP Client 8.4
Same name and namespace in other branches
- 8 src/Controller/Callback.php \Drupal\google_api_client\Controller\Callback::callbackUrl()
- 8.2 src/Controller/Callback.php \Drupal\google_api_client\Controller\Callback::callbackUrl()
- 8.3 src/Controller/Callback.php \Drupal\google_api_client\Controller\Callback::callbackUrl()
Callback URL for Google API Auth.
Parameters
\Symfony\Component\HttpFoundation\Request $request: Request.
Return value
array Return markup for the page.
1 string reference to 'Callback::callbackUrl'
File
- src/
Controller/ Callback.php, line 95
Class
- Callback
- Google Client Callback Controller.
Namespace
Drupal\google_api_client\ControllerCode
public function callbackUrl(Request $request) {
if ($state = $request
->get('state')) {
$state = Json::decode($state);
if (isset($state['src']) && !in_array('google_api_client', $state['src'])) {
// Handle response only if the request was from google_api_client.
// Here some other module has set that we don't process standard
// google_api_client so we invoke the webhook and return.
$this->moduleHandler
->invokeAll('google_api_client_google_response', [
$request,
]);
// We return to home page if not redirected in the webhook.
return $this
->redirect('<front>');
}
}
$tempStore = $this->tempStoreFactory
->get('google_api_client');
if ($request
->get('error')) {
if ($request
->get('error') == 'access_denied') {
$this
->messenger()
->addError($this
->t('You denied access so account is not authenticated'));
}
else {
$this
->messenger()
->addError($this
->t('Something caused error in authentication.'));
}
$tempStore
->delete('account_id');
$tempStore
->delete('account_type');
if ($tempStore
->get('state_destination')) {
$destination = $tempStore
->get('state_destination');
$tempStore
->delete('state_destination');
return new RedirectResponse(Url::fromUserInput($destination)
->toString());
}
$tempStore
->delete('state_src');
$tempStore
->delete('state_hash');
return $this
->redirect('<front>');
}
$account_id = $request
->get('id');
$entity_type = $request
->get('type');
if ($entity_type) {
$tempStore
->set('account_type', $entity_type);
}
else {
if ($tempStore
->get('account_type')) {
$entity_type = $tempStore
->get('account_type');
}
else {
$entity_type = 'google_api_client';
$tempStore
->set('account_type', $entity_type);
}
}
if (!google_api_client_load_library()) {
// We don't have library installed notify admin and abort.
$status_report_link = Link::createFromRoute($this
->t('Status Report'), 'system.status')
->toString();
$this
->messenger()
->addError($this
->t("Can't authenticate with google as library is missing check %status_report for more details", [
'%status_report' => $status_report_link,
]));
return $this
->redirect('entity.google_api_client.collection');
}
if ($account_id == NULL && $tempStore
->get('account_id')) {
$account_id = $tempStore
->get('account_id');
}
elseif ($account_id) {
$tempStore
->set('account_id', $account_id);
}
if ($account_id) {
$google_api_client = $this
->entityTypeManager()
->getStorage($entity_type)
->load($account_id);
$this->googleApiClientService
->setGoogleApiClient($google_api_client);
$this->googleApiClientService->googleClient
->setApplicationName("Google OAuth2");
if ($request
->get('code')) {
$this->googleApiClientService->googleClient
->fetchAccessTokenWithAuthCode($request
->get('code'));
$google_api_client
->setAccessToken(Json::encode($this->googleApiClientService->googleClient
->getAccessToken()));
$google_api_client
->setAuthenticated(TRUE);
$google_api_client
->save();
$destination = FALSE;
if ($tempStore
->get('state_destination')) {
$destination = $tempStore
->get('state_destination');
}
$tempStore
->delete('state_destination');
$tempStore
->delete('state_src');
$tempStore
->delete('state_hash');
$tempStore
->delete('account_id');
$tempStore
->delete('account_type');
$this
->messenger()
->addMessage($this
->t('Api Account saved'));
// Let other modules act of google response.
$this->moduleHandler
->invokeAll('google_api_client_google_response', [
$request,
]);
if ($destination) {
return new RedirectResponse(Url::fromUserInput($destination)
->toString());
}
return $this
->redirect('entity.google_api_client.collection');
}
if ($this->googleApiClientService->googleClient) {
if ($tempStore
->get('state_src')) {
$state = [
'src' => $tempStore
->get('state_src'),
'hash' => $tempStore
->get('state_hash'),
];
}
else {
$state = [
'src' => [
'google_api_client',
],
'hash' => md5(rand()),
];
if ($destination = $request
->get('destination')) {
$tempStore
->set('state_destination', $destination);
$this->requestStack
->getCurrentRequest()->query
->remove('destination');
}
}
// Allow other modules to alter the state param.
$this->moduleHandler
->alter('google_api_client_state', $state, $google_api_client);
$tempStore
->set('state_src', $state['src']);
$tempStore
->set('state_hash', $state['hash']);
$state = Json::encode($state);
$this->googleApiClientService->googleClient
->setState($state);
$auth_url = $this->googleApiClientService->googleClient
->createAuthUrl();
$request
->getSession()
->save();
$response = new TrustedRedirectResponse($auth_url);
$response
->send();
exit;
}
}
return $this
->redirect('entity.google_api_client.collection');
}