. */ namespace vierbergenlars\AuthserverOAuthAccountBundle\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Form\Extension\Core\Type\FormType; use vierbergenlars\AuthserverExternalAccountBundle\Entity\ExternalUser; use HWI\Bundle\OAuthBundle\Security\Core\Authentication\Token\OAuthToken; use HWI\Bundle\OAuthBundle\Controller\ConnectController as BaseConnectController; use vierbergenlars\AuthserverExternalAccountBundle\ExternalAccount\ExternalAccountProviderManager; use vierbergenlars\AuthserverOAuthAccountBundle\DependencyInjection\AuthserverOAuthAccountExtension; class ConnectController extends BaseConnectController { protected function render($view, array $parameters = [], Response $response = null) { if($view === 'HWIOAuthBundle:Connect:connect_success.html.twig') return $this->redirectToRoute('user_profile'); $externalAccountProviderManager = $this->container->get('vierbergenlars.authserver_external_account.account_provider_manager'); return parent::render($view, $parameters + ['externalAccountProviderManager' => $externalAccountProviderManager], $response); } public function disconnectServiceAction(Request $request, ExternalUser $externalUser) { if($externalUser->getUser() !== $this->getUser()) throw $this->createAccessDeniedException(); $token = $this->getToken(); if($token instanceof OAuthToken) { if('oauth_'.$token->getResourceOwnerName() === $externalUser->getProvider()) { $resourceOwnerMap = $this->get('hwi_oauth.resource_ownermap.public'); /* @var $resourceOwnerMap \HWI\Bundle\OAuthBundle\Security\Http\ResourceOwnerMap */ $resourceOwner = $resourceOwnerMap->getResourceOwnerByName($token->getResourceOwnerName()); $userInfo = $resourceOwner->getUserInformation($token->getRawToken()); if($userInfo->getUsername() == $externalUser->getProviderRef()) { throw $this->createAccessDeniedException('You can not disconnect the external user you are currently authenticated with.'); } } } $form = $this->createForm(FormType::class); $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()) { $this->container->get('hwi_oauth.account.connector')->disconnect($externalUser); return $this->redirectToRoute('user_profile'); } return $this->render('AuthserverOAuthAccountBundle:Connect:disconnect_service.html.twig', [ 'externalUser' => $externalUser, 'form' => $form->createView(), ]); } }