Spaces:
No application file
No application file
File size: 4,703 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
<?php
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);
}
}
|