96 lines
3.0 KiB
PHP
96 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace KupShop\UserOauthBundle\Controller;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
|
|
|
class BindExternalAccountController extends AbstractController
|
|
{
|
|
use \DatabaseCommunication;
|
|
|
|
/** @var SessionInterface */
|
|
private $session;
|
|
|
|
/** @var TokenStorageInterface */
|
|
private $tokenStorage;
|
|
|
|
public function __construct(SessionInterface $session, TokenStorageInterface $tokenStorage)
|
|
{
|
|
$this->session = $session;
|
|
$this->tokenStorage = $tokenStorage;
|
|
}
|
|
|
|
/**
|
|
* @Route("/login-bind/{provider}/")
|
|
*/
|
|
public function bindAction(Request $request)
|
|
{
|
|
$provider = $request->get('provider');
|
|
$this->session->set('bind_external_account', $provider);
|
|
$next = $request->query->get('next');
|
|
if (empty($next)) {
|
|
$next = $request->headers->get('referer');
|
|
}
|
|
if (!empty($next)) {
|
|
if (parse_url($next, PHP_URL_QUERY)) {
|
|
$next .= '&wpj_utm=auth';
|
|
} else {
|
|
$next .= '?wpj_utm=auth';
|
|
}
|
|
} else {
|
|
$next = path('account', ['wpj_utm' => 'auth']);
|
|
}
|
|
|
|
return new RedirectResponse(path('hwi_oauth_service_redirect', [
|
|
'service' => $provider,
|
|
'next' => $next,
|
|
]));
|
|
}
|
|
|
|
/**
|
|
* @Route("/login-unbind/{id}/")
|
|
*/
|
|
public function unbindAction(Request $request)
|
|
{
|
|
$token = $this->tokenStorage->getToken();
|
|
if ($user = $token?->getUser()) {
|
|
if (method_exists($user, 'getID')) {
|
|
$userProvider = $this->selectSQL('users_provider_ids', [
|
|
'id' => $request->get('id'),
|
|
'id_user' => $user->getID(),
|
|
])->fetch();
|
|
$result = $this->deleteSQL('users_provider_ids', [
|
|
'id' => $request->get('id'),
|
|
'id_user' => $user->getID(),
|
|
]);
|
|
if ($result == 1) {
|
|
if ($request->isXmlHttpRequest()) {
|
|
return new Response();
|
|
} else {
|
|
addUserMessage(
|
|
sprintf(
|
|
translate('oauth', 'login')['binding_removed'],
|
|
ucfirst($userProvider['provider']),
|
|
$userProvider['email']
|
|
),
|
|
'success'
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($request->isXmlHttpRequest()) {
|
|
return new Response('', 500);
|
|
} else {
|
|
return new RedirectResponse(path('settings'));
|
|
}
|
|
}
|
|
}
|