Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
digitalascetic/google-api-client / Controller / GoogleAuthWebServiceController.php
Size: Mime:
<?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);
    }

}