Skip to content

Commit a668b5b

Browse files
author
Samir Comprés
committed
feat(User): Added impersonation to controller
1 parent e9c44ba commit a668b5b

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

Controller/Admin/User/KeycloakAdminUserController.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use AppBundle\Util\Rest\RestResponse;
88
use GuzzleHttp\Exception\ClientException;
99
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
10+
use Symfony\Component\HttpFoundation\RedirectResponse;
1011
use Symfony\Component\HttpFoundation\Request;
1112
use Symfony\Component\Routing\Annotation\Route;
1213

@@ -292,4 +293,21 @@ public function resetPasswordAction(Request $request, string $id) {
292293
return new RestResponse(null, 500, "An unknown error occurred while sending the reset password request. Please try again or contact support if the problem persists.");
293294
}
294295
}
296+
297+
/**
298+
* @Route("/user/{id}/impersonate", name="keycloak_admin_impersonate", options={"expose"=true}, methods={"GET"})
299+
* @param Request $request
300+
* @param $id
301+
* @return RestResponse
302+
*/
303+
public function impersonateAction(Request $request, string $id) {
304+
try{
305+
$this->get('nti.keycloak.security.service')->impersonateUser($id);
306+
$defaultTargetPath = $this->container->getParameter('nti_keycloak_security.default_target_path');
307+
$redirect_route = $this->container->get('router')->generate($defaultTargetPath);
308+
return new RedirectResponse($redirect_route);
309+
} catch (\Exception $ex){
310+
return new RestResponse(null, 500, "An unknown error occurred while impersonating the user. Please try again or contact support if the problem persists.");
311+
}
312+
}
295313
}

Controller/ApiAdmin/User/KeycloakApiAdminUserController.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,5 +103,15 @@ public function addRolesAction(Request $request, string $id) {
103103
public function removeRolesAction(Request $request, string $id) {
104104
return $this->forward("NTI\KeycloakSecurityBundle\Controller\Admin\User\KeycloakAdminUserController::removeRolesAction",["request" => $request, "id" => $id]);
105105
}
106+
107+
/**
108+
* @Route("/user/{id}/resetPassword", name="keycloak_api_admin_user_reset_password", options={"expose"=true}, methods={"POST"})
109+
* @param Request $request
110+
* @param $id
111+
* @return RestResponse
112+
*/
113+
public function resetPasswordAction(Request $request, string $id) {
114+
return $this->forward("NTI\KeycloakSecurityBundle\Controller\Admin\User\KeycloakAdminUserController::resetPasswordAction",["request" => $request, "id" => $id]);
115+
}
106116

107117
}

Service/KeycloakSecurityService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public function impersonateUser($userId) {
9494
$oldToken = $tokenStorage->getToken();
9595
$oldUser = $oldToken->getUser();
9696

97-
if (!$oldUser instanceof KeycloakUser) {
97+
if (!$newUser instanceof KeycloakUser) {
9898
throw new \RuntimeException('The user must be an instance of KeycloakUser');
9999
}
100100

0 commit comments

Comments
 (0)