/**
  * Create ImapEmailFolder instances for each newly created EmailFolder related to UserEmailOrigin
  *
  * @param LifecycleEventArgs $event
  */
 public function prePersist(LifecycleEventArgs $event)
 {
     $origin = $event->getObject();
     if ($origin instanceof UserEmailOrigin && !$origin->getFolders()->isEmpty()) {
         $manager = $this->createManager($origin);
         $folders = $origin->getRootFolders();
         $this->createImapEmailFolders($folders, $manager);
     }
     if ($origin instanceof UserEmailOrigin) {
         if ($origin->getAccessToken() && $origin->getRefreshToken() === null) {
             $response = $this->imapEmailGoogleOauth2Manager->getAccessTokenByAuthCode($origin->getGoogleAuthCode());
             $origin->setRefreshToken($response['refresh_token']);
         }
     }
 }
 /**
  * Get oauth2 access token by security code
  *
  * @param $code
  *
  * @return array
  */
 public function getAccessToken($code)
 {
     $accessToken = $this->imapEmailGoogleOauth2Manager->getAccessTokenByAuthCode($code);
     $userInfo = $this->imapEmailGoogleOauth2Manager->getUserInfo($accessToken['access_token']);
     $userInfoResponse = $userInfo->getResponse();
     if (array_key_exists('error', $userInfoResponse)) {
         $response = $userInfoResponse['error'];
     } else {
         $response = ['access_token' => $accessToken['access_token'], 'refresh_token' => $accessToken['refresh_token'], 'expires_in' => $accessToken['expires_in'], 'email_address' => $userInfo->getEmail()];
     }
     return $response;
 }