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    
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\GoogleApiCalendarWatchEvent;
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("/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("/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);
            $data = $token;
            $this->dispatcher->dispatch(GoogleApiNotificationsEvent::EVENT_NAME, new GoogleApiNotificationsEvent(GoogleApiNotificationsEvent::TYPE_START, $user, $request->getHost()));
        }

        return $this->jsonResponse($data);
    }

    /**
     * @Route("/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);

        $this->dispatcher->dispatch(GoogleApiUserDisconnectEvent::EVENT_NAME, new GoogleApiUserDisconnectEvent($user));
        $this->dispatcher->dispatch(GoogleApiNotificationsEvent::EVENT_NAME, new GoogleApiNotificationsEvent(GoogleApiNotificationsEvent::TYPE_STOP, $user, $request->getHost()));

        $revoked = $this->googleAuthServ->revokeUserToken($user);

        $data = array(
            'disconnected' => $revoked
        );

        return $this->jsonResponse($data);
    }


    /**
     * @Route("/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);
            $data = $token;
            $this->dispatcher->dispatch(GoogleApiNotificationsEvent::EVENT_NAME, new GoogleApiNotificationsEvent(GoogleApiNotificationsEvent::TYPE_RENEW, $user, $request->getHost()));
        }

        return $this->jsonResponse($data);
    }

}