Repository URL to install this package:
|
Version:
6.2.3 ▾
|
<?php
/**
* Created by PhpStorm.
* User: eduarddezacastellano
* Date: 05/09/2018
* Time: 17:54
*/
namespace DigitalAscetic\GoogleApiClientBundle\Controller;
use DigitalAscetic\GoogleApiClientBundle\Entity\IGoogleApiUser;
use DigitalAscetic\GoogleApiClientBundle\Event\GoogleApiNotificationsEvent;
use DigitalAscetic\GoogleApiClientBundle\Event\GoogleApiUserDisconnectEvent;
use DigitalAscetic\GoogleApiClientBundle\Service\GoogleAuthService;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
/**
* Class GoogleAuthWebServiceController
* @package DigitalAscetic\GoogleApiClientBundle\Controller
*/
#[Route(path: '/google-auth')]
class GoogleAuthWebServiceController extends BaseWebServiceController
{
const SERVICE_NAME = 'ascetic_google_api_client.auth_controller';
/** @var GoogleAuthService $googleAuthServ */
private $googleAuthServ;
public function __construct(GoogleAuthService $googleAuthServ)
{
$this->googleAuthServ = $googleAuthServ;
}
#[Route(path: '/authorize/user/{id}', requirements: ['id' => '^\d+$'], methods: ['GET', 'HEAD'], name: 'da.google_api.auth.authorize')]
public function getAuthorizationForUserCodeAction(Request $request)
{
$userId = $request->get('id');
$code = $request->get('code');
/** @var IGoogleApiUser $user */
$user = $this->googleAuthServ->getUserById($userId);
$data = array();
if (isset($code)) {
$token = $this->googleAuthServ->authenticateClientWithAuthCode($code, $request->getHost(), $user);
if ($token) {
$data = $token;
$googleEvent = new GoogleApiNotificationsEvent(GoogleApiNotificationsEvent::TYPE_START, $user, $request->getHost());
$this->dispatcher->dispatch($googleEvent, GoogleApiNotificationsEvent::EVENT_NAME);
}
}
return $this->jsonResponse($data);
}
#[Route(path: '/disconnect/user/{id}', requirements: ['id' => '^\d+$'], methods: ['GET', 'HEAD'], name: 'da.google_api.auth.disconnect')]
public function disconnectUserAction(Request $request)
{
$userId = $request->get('id');
/** @var IGoogleApiUser $user */
$user = $this->googleAuthServ->getUserById($userId);
$disconnectEvnt = new GoogleApiUserDisconnectEvent($user, $request->getHost());
$this->dispatcher->dispatch($disconnectEvnt, GoogleApiUserDisconnectEvent::EVENT_NAME);
$notifyEvent = new GoogleApiNotificationsEvent(GoogleApiNotificationsEvent::TYPE_STOP, $user, $request->getHost());
$this->dispatcher->dispatch($notifyEvent, GoogleApiNotificationsEvent::EVENT_NAME);
$revoked = $this->googleAuthServ->revokeUserToken($user);
$data = array(
'disconnected' => $revoked
);
return $this->jsonResponse($data);
}
#[Route(path: '/token/user/{id}', requirements: ['id' => '^\d+$'], methods: ['GET', 'HEAD'], name: 'da.google_api.auth.token')]
public function getTokenUserAction(Request $request)
{
$userId = $request->get('id');
/** @var IGoogleApiUser $user */
$user = $this->googleAuthServ->getUserById($userId);
$refreshToken = $user->getGoogleApiRefreshToken();
$data = array();
if (isset($refreshToken)) {
$token = $this->googleAuthServ->getOauth2AccessToken($user, $refreshToken);
if ($token) {
$data = $token;
$googleEvent = new GoogleApiNotificationsEvent(GoogleApiNotificationsEvent::TYPE_RENEW, $user, $request->getHost());
$this->dispatcher->dispatch($googleEvent, GoogleApiNotificationsEvent::EVENT_NAME);
}
}
return $this->jsonResponse($data);
}
}