Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit c50d1693 authored by Marco Amoia's avatar Marco Amoia
Browse files

Merge branch 'feature/SIMPL-5732' into 'develop'

Added logout endpoint

See merge request !110
parents d1a8a129 8db2b3a6
No related branches found
No related tags found
4 merge requests!130Release,!129Release,!128fix unit tests - add property,!110Added logout endpoint
Pipeline #222641 passed with warnings
package com.aruba.simpl.usersroles.controllers;
import com.aruba.simpl.common.model.dto.IdentityAttributeDTO;
import com.aruba.simpl.usersroles.services.KeycloakUserService;
import com.aruba.simpl.usersroles.services.SessionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
......@@ -19,9 +20,11 @@ import org.springframework.web.bind.annotation.*;
public class SessionController {
private final SessionService sessionService;
private final KeycloakUserService userService;
public SessionController(SessionService sessionService) {
public SessionController(SessionService sessionService, KeycloakUserService userService) {
this.sessionService = sessionService;
this.userService = userService;
}
@Operation(
......@@ -68,4 +71,17 @@ public class SessionController {
public void validateTierOneSession(@RequestHeader HttpHeaders headers) {
sessionService.validateTierOneSession(headers);
}
@Operation(
summary = "Current User Logout",
description = "End the session for the current user",
responses = {
@ApiResponse(responseCode = "204", description = "Successfully deleted user session"),
@ApiResponse(responseCode = "400", description = "Communication error with Keycloak admin"),
})
@DeleteMapping("current")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteCurrentSession() {
userService.logout();
}
}
......@@ -3,7 +3,6 @@ package com.aruba.simpl.usersroles.services;
import org.keycloak.admin.client.resource.*;
public interface KeycloakService {
RealmsResource getRealms();
RealmResource getAppRealm();
......
......@@ -40,4 +40,6 @@ public interface KeycloakUserService {
void updateUserRoles(String uuid, List<String> userRoles);
List<KeycloakUserDTO> search(KeycloakUserFilter filter);
void logout();
}
......@@ -20,11 +20,6 @@ public class KeycloakServiceImpl implements KeycloakService {
this.keycloak = keycloak;
}
@Override
public RealmsResource getRealms() {
return keycloak.realms();
}
@Override
public RealmResource getAppRealm() {
return keycloak.realm(properties.app().realm());
......
......@@ -2,6 +2,7 @@ package com.aruba.simpl.usersroles.services.impl;
import com.aruba.simpl.common.model.dto.KeycloakRoleDTO;
import com.aruba.simpl.common.model.dto.KeycloakUserDTO;
import com.aruba.simpl.common.security.JwtService;
import com.aruba.simpl.usersroles.exceptions.KeycloakException;
import com.aruba.simpl.usersroles.model.dto.RoleDTO;
import com.aruba.simpl.usersroles.model.filters.KeycloakUserFilter;
......@@ -25,10 +26,13 @@ public class KeycloakUserServiceImpl implements KeycloakUserService {
private final KeycloakService keycloakService;
private final KeycloakMapper keycloakMapper;
private final JwtService jwtService;
public KeycloakUserServiceImpl(KeycloakService keycloakService, KeycloakMapper keycloakMapper) {
public KeycloakUserServiceImpl(
KeycloakService keycloakService, KeycloakMapper keycloakMapper, JwtService jwtService) {
this.keycloakService = keycloakService;
this.keycloakMapper = keycloakMapper;
this.jwtService = jwtService;
}
@Override
......@@ -218,4 +222,14 @@ public class KeycloakUserServiceImpl implements KeycloakUserService {
throw new KeycloakException(e.getResponse());
}
}
@Override
public void logout() {
var sid = jwtService.getClaim("sid");
try {
keycloakService.getAppRealm().deleteSession(sid, false);
} catch (ClientErrorException e) {
throw new KeycloakException(e.getResponse());
}
}
}
......@@ -28,14 +28,6 @@ class KeycloakServiceImplTest {
@InjectMocks
KeycloakServiceImpl keycloakService;
@Test
void getRealms() {
// When
keycloakService.getRealms();
// Then
then(keycloak).should().realms();
}
@Test
void getAppRealm() {
// Given
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment