diff --git a/config/packages/knpu_oauth2_client.yaml b/config/packages/knpu_oauth2_client.yaml index 82e733b..b88da12 100644 --- a/config/packages/knpu_oauth2_client.yaml +++ b/config/packages/knpu_oauth2_client.yaml @@ -26,9 +26,9 @@ knpu_oauth2_client: # whether to check OAuth2 "state": defaults to true # use_state: true - # will create service: "knpu.oauth2.client.vk_main" + # will create service: "knpu.oauth2.client.vkontakte_main" # an instance of: KnpU\OAuth2ClientBundle\Client\OAuth2Client - vk_main: + vkontakte_main: type: generic provider_class: App\Utils\Oauth2\Vk\Vk # optional: a class that extends OAuth2Client @@ -40,7 +40,7 @@ knpu_oauth2_client: # now, all the normal options! client_id: '%env(OAUTH_VK_CLIENT_ID)%' client_secret: '%env(OAUTH_VK_CLIENT_SECRET)%' - redirect_route: connect_vk_check + redirect_route: connect_vkontakte_check redirect_params: {} # whether to check OAuth2 "state": defaults to true # use_state: true @@ -61,14 +61,14 @@ knpu_oauth2_client: # will create service: "knpu.oauth2.client.github_rus" # an instance of: KnpU\OAuth2ClientBundle\Client\Provider\GithubClient # composer require league/oauth2-github - github_rus: + github_ru: # must be "github" - it activates that type! type: github # add and set these environment variables in your .env files client_id: '%env(OAUTH_GITHUB_RUS_CLIENT_ID)%' client_secret: '%env(OAUTH_GITHUB_RUS_CLIENT_SECRET)%' # a route name you'll create - redirect_route: connect_github_rus_check + redirect_route: connect_github_ru_check redirect_params: { } # whether to check OAuth2 "state": defaults to true # use_state: true \ No newline at end of file diff --git a/src/Controller/Front/AuthGithubRusController.php b/src/Controller/Front/AuthGithubRusController.php index 5f5f564..52a869d 100644 --- a/src/Controller/Front/AuthGithubRusController.php +++ b/src/Controller/Front/AuthGithubRusController.php @@ -12,7 +12,7 @@ class AuthGithubRusController extends AbstractController { /** - * @Route("/connect/github-rus", name="connect_github_rus_start") + * @Route("/connect/github-ru", name="connect_github_ru_start") * * @param ClientRegistry $clientRegistry * @@ -21,12 +21,12 @@ class AuthGithubRusController extends AbstractController public function connectAction(ClientRegistry $clientRegistry): RedirectResponse { return $clientRegistry - ->getClient('github_rus') + ->getClient('github_ru') ->redirect([], []); } /** - * @Route("/connect/github-rus/check", name="connect_github_rus_check") + * @Route("/connect/github-ru/check", name="connect_github_ru_check") * * @return void */ diff --git a/src/Controller/Front/AuthVkontakteController.php b/src/Controller/Front/AuthVkontakteController.php index e764917..b5d0d87 100644 --- a/src/Controller/Front/AuthVkontakteController.php +++ b/src/Controller/Front/AuthVkontakteController.php @@ -12,7 +12,7 @@ class AuthVkontakteController extends AbstractController { /** - * @Route("/connect/vk", name="connect_vk_start") + * @Route("/connect/vkontakte", name="connect_vkontakte_start") * * @param ClientRegistry $clientRegistry * @@ -21,12 +21,12 @@ class AuthVkontakteController extends AbstractController public function connectAction(ClientRegistry $clientRegistry): RedirectResponse { return $clientRegistry - ->getClient('vk_main') + ->getClient('vkontakte_main') ->redirect([], []); } /** - * @Route("/connect/vk/check", name="connect_vk_check") + * @Route("/connect/vkontakte/check", name="connect_vkontakte_check") * * @return void */ diff --git a/src/Controller/Front/ProfileController.php b/src/Controller/Front/ProfileController.php index 5b3e15e..383957b 100644 --- a/src/Controller/Front/ProfileController.php +++ b/src/Controller/Front/ProfileController.php @@ -10,9 +10,12 @@ use App\Utils\Mailer\Sender\UserRegisteredEmailSender; use Doctrine\Persistence\ManagerRegistry as Doctrine; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Contracts\Translation\TranslatorInterface; class ProfileController extends AbstractController { @@ -67,6 +70,23 @@ public function setEmailSender(UserRegisteredEmailSender $emailSender): ProfileC return $this; } + + /** @var TranslatorInterface */ + private $translator; + + /** + * @required + * + * @param TranslatorInterface $translator + * + * @return ProfileController + */ + public function setTranslator(TranslatorInterface $translator): ProfileController + { + $this->translator = $translator; + + return $this; + } // Autowiring <<< /** @@ -141,4 +161,32 @@ public function resendingVerifyEmailLink(Request $request): Response return $this->redirectToRoute('main_profile_index'); } + + /** + * @Route("/profile/unlink_social_network/{socialName}", name="main_profile_unlink_social_network") + * + * @param string $socialName + * + * @return RedirectResponse + */ + public function unlinkSocialNetwork(string $socialName): RedirectResponse + { + /** @var User|null $user */ + $user = $this->getUser(); + + if (!$user) { + throw new NotFoundHttpException('User not found'); + } + $em = $this->doctrine->getManager(); + + $nameMethod = 'set'.ucfirst($socialName).'Id'; + $user->$nameMethod(null); + + $em->persist($user); + $em->flush(); + + $this->addFlash('success', $this->translator->trans('The social network has been successfully unlinked.')); + + return $this->redirectToRoute('main_profile_index'); + } } diff --git a/src/Security/Authenticator/Front/GithubRusAuthenticator.php b/src/Security/Authenticator/Front/GithubRusAuthenticator.php index 179668f..3583a60 100644 --- a/src/Security/Authenticator/Front/GithubRusAuthenticator.php +++ b/src/Security/Authenticator/Front/GithubRusAuthenticator.php @@ -89,7 +89,7 @@ public function __construct( public function supports(Request $request): ?bool { // continue ONLY if the current ROUTE matches the check ROUTE - return 'connect_github_rus_check' === $request->attributes->get('_route'); + return 'connect_github_ru_check' === $request->attributes->get('_route'); } /** @@ -99,7 +99,7 @@ public function supports(Request $request): ?bool */ public function authenticate(Request $request): Passport { - $client = $this->clientRegistry->getClient('github_rus'); + $client = $this->clientRegistry->getClient('github_ru'); $accessToken = $this->fetchAccessToken($client); return new SelfValidatingPassport( diff --git a/src/Security/Authenticator/Front/VkontakteAuthenticator.php b/src/Security/Authenticator/Front/VkontakteAuthenticator.php index 816e5b3..794983b 100644 --- a/src/Security/Authenticator/Front/VkontakteAuthenticator.php +++ b/src/Security/Authenticator/Front/VkontakteAuthenticator.php @@ -83,7 +83,7 @@ public function __construct( public function supports(Request $request): ?bool { // continue ONLY if the current ROUTE matches the check ROUTE - return 'connect_vk_check' === $request->attributes->get('_route'); + return 'connect_vkontakte_check' === $request->attributes->get('_route'); } /** @@ -93,7 +93,7 @@ public function supports(Request $request): ?bool */ public function authenticate(Request $request): Passport { - $client = $this->clientRegistry->getClient('vk_main'); + $client = $this->clientRegistry->getClient('vkontakte_main'); $accessToken = $this->fetchAccessToken($client); return new SelfValidatingPassport( diff --git a/src/Security/Authenticator/Front/YandexAuthenticator.php b/src/Security/Authenticator/Front/YandexAuthenticator.php index 96455a7..78da8a0 100644 --- a/src/Security/Authenticator/Front/YandexAuthenticator.php +++ b/src/Security/Authenticator/Front/YandexAuthenticator.php @@ -127,6 +127,7 @@ public function authenticate(Request $request): Passport // 3) Maybe you just want to "register" them by creating // a User object + $request->getSession()->getFlashBag()->add('success', $this->translator->trans('The social network has been successfully linked.')); $user->setYandexId($yandexUser->getId()); $this->userManager->flush(); diff --git a/templates/front/_embed/_menu/_login_via_social_network.html.twig b/templates/front/_embed/_menu/_login_via_social_network.html.twig index 22c3ccb..4ecb074 100644 --- a/templates/front/_embed/_menu/_login_via_social_network.html.twig +++ b/templates/front/_embed/_menu/_login_via_social_network.html.twig @@ -11,13 +11,13 @@
{% if app.request.locale == 'ru' %} diff --git a/templates/front/_embed/_utils/_social_network_link_unlink_btn.html.twig b/templates/front/_embed/_utils/_social_network_link_unlink_btn.html.twig index 2c0afb9..f379ef6 100644 --- a/templates/front/_embed/_utils/_social_network_link_unlink_btn.html.twig +++ b/templates/front/_embed/_utils/_social_network_link_unlink_btn.html.twig @@ -1,15 +1,21 @@ -{% if socialName %} +{% if socialNameId %} - + {{ 'personal_account.social_group.unlink'|trans }} {% else %} - - {{ 'personal_account.social_group.link'|trans }} - + {% if 'github' != socialName %} + + {{ 'personal_account.social_group.link'|trans }} + + {% else %} + + {{ 'personal_account.social_group.link'|trans }} + + {% endif %} -{% endif %} \ No newline at end of file +{% endif %} diff --git a/templates/front/profile/index.html.twig b/templates/front/profile/index.html.twig index 73bff08..757def9 100644 --- a/templates/front/profile/index.html.twig +++ b/templates/front/profile/index.html.twig @@ -70,7 +70,10 @@