Spaces:
No application file
No application file
| namespace Mautic\PluginBundle\Controller; | |
| use Mautic\CoreBundle\Controller\FormController; | |
| use Mautic\PluginBundle\Event\PluginIntegrationAuthRedirectEvent; | |
| use Mautic\PluginBundle\PluginEvents; | |
| use Symfony\Component\HttpFoundation\JsonResponse; | |
| use Symfony\Component\HttpFoundation\RedirectResponse; | |
| use Symfony\Component\HttpFoundation\Request; | |
| class AuthController extends FormController | |
| { | |
| /** | |
| * @param string $integration | |
| * | |
| * @return JsonResponse | |
| */ | |
| public function authCallbackAction(Request $request, $integration) | |
| { | |
| $isAjax = $request->isXmlHttpRequest(); | |
| $session = $request->getSession(); | |
| /** @var \Mautic\PluginBundle\Helper\IntegrationHelper $integrationHelper */ | |
| $integrationHelper = $this->factory->getHelper('integration'); | |
| $integrationObject = $integrationHelper->getIntegrationObject($integration); | |
| // check to see if the service exists | |
| if (!$integrationObject) { | |
| $session->set('mautic.integration.postauth.message', ['mautic.integration.notfound', ['%name%' => $integration], 'error']); | |
| if ($isAjax) { | |
| return new JsonResponse(['url' => $this->generateUrl('mautic_integration_auth_postauth', ['integration' => $integration])]); | |
| } else { | |
| return new RedirectResponse($this->generateUrl('mautic_integration_auth_postauth', ['integration' => $integration])); | |
| } | |
| } | |
| try { | |
| $error = $integrationObject->authCallback(); | |
| } catch (\InvalidArgumentException $e) { | |
| $session->set('mautic.integration.postauth.message', [$e->getMessage(), [], 'error']); | |
| $redirectUrl = $this->generateUrl('mautic_integration_auth_postauth', ['integration' => $integration]); | |
| if ($isAjax) { | |
| return new JsonResponse(['url' => $redirectUrl]); | |
| } else { | |
| return new RedirectResponse($redirectUrl); | |
| } | |
| } | |
| // check for error | |
| if ($error) { | |
| $type = 'error'; | |
| $message = 'mautic.integration.error.oauthfail'; | |
| $params = ['%error%' => $error]; | |
| } else { | |
| $type = 'notice'; | |
| $message = 'mautic.integration.notice.oauthsuccess'; | |
| $params = []; | |
| } | |
| $session->set('mautic.integration.postauth.message', [$message, $params, $type]); | |
| $identifier[$integration] = null; | |
| $socialCache = []; | |
| $userData = $integrationObject->getUserData($identifier, $socialCache); | |
| $session->set('mautic.integration.'.$integration.'.userdata', $userData); | |
| return new RedirectResponse($this->generateUrl('mautic_integration_auth_postauth', ['integration' => $integration])); | |
| } | |
| public function authStatusAction(Request $request, $integration): \Symfony\Component\HttpFoundation\Response | |
| { | |
| $postAuthTemplate = '@MauticPlugin/Auth/postauth.html.twig'; | |
| $session = $request->getSession(); | |
| $postMessage = $session->get('mautic.integration.postauth.message'); | |
| $userData = []; | |
| if (isset($integration)) { | |
| $userData = $session->get('mautic.integration.'.$integration.'.userdata'); | |
| } | |
| $message = $type = ''; | |
| $alert = 'success'; | |
| if (!empty($postMessage)) { | |
| $message = $this->translator->trans($postMessage[0], $postMessage[1], 'flashes'); | |
| $session->remove('mautic.integration.postauth.message'); | |
| $type = $postMessage[2]; | |
| if ('error' == $type) { | |
| $alert = 'danger'; | |
| } | |
| } | |
| return $this->render($postAuthTemplate, ['message' => $message, 'alert' => $alert, 'data' => $userData]); | |
| } | |
| public function authUserAction($integration): RedirectResponse | |
| { | |
| /** @var \Mautic\PluginBundle\Helper\IntegrationHelper $integrationHelper */ | |
| $integrationHelper = $this->factory->getHelper('integration'); | |
| $integrationObject = $integrationHelper->getIntegrationObject($integration); | |
| $settings['method'] = 'GET'; | |
| $settings['integration'] = $integrationObject->getName(); | |
| /** @var \Mautic\PluginBundle\Integration\AbstractIntegration $integrationObject */ | |
| $event = $this->dispatcher->dispatch( | |
| new PluginIntegrationAuthRedirectEvent( | |
| $integrationObject, | |
| $integrationObject->getAuthLoginUrl() | |
| ), | |
| PluginEvents::PLUGIN_ON_INTEGRATION_AUTH_REDIRECT | |
| ); | |
| $oauthUrl = $event->getAuthUrl(); | |
| return new RedirectResponse($oauthUrl); | |
| } | |
| } | |