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