Files
kupshop/bundles/KupShop/UserOauthBundle/Controller/BindExternalAccountController.php
2025-08-02 16:30:27 +02:00

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'));
}
}
}