diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/controller/UserController.java b/rest-api/src/main/java/lcsb/mapviewer/api/controller/UserController.java index 47feaae5d86e2e2da0c31b0419cce1df319bcd29..1313da0dc02deb9c5c2faaced33df1b7a2348903 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/controller/UserController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/controller/UserController.java @@ -1,5 +1,8 @@ package lcsb.mapviewer.api.controller; +import java.util.HashMap; +import java.util.Map; + import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -10,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController; import lcsb.mapviewer.api.BaseController; import lcsb.mapviewer.common.Configuration; +import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.interfaces.IUserService; import lcsb.mapviewer.services.view.AuthenticationToken; @@ -22,12 +26,25 @@ public class UserController extends BaseController { private IUserService userService; @RequestMapping(value = "/login", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) - public AuthenticationToken greeting(@RequestParam(value = "login", defaultValue = Configuration.ANONYMOUS_LOGIN) String login, + public AuthenticationToken login(@RequestParam(value = "login", defaultValue = Configuration.ANONYMOUS_LOGIN) String login, @RequestParam(value = "password", required = false) String password) { AuthenticationToken token = userService.login(login, password); return token; } + @RequestMapping(value = "/tokenStatus", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public AuthenticationToken tokenSatus(@RequestParam(value = "token", required = false) String token) throws SecurityException { + return userService.getToken(token); + } + + @RequestMapping(value = "/logout", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public Map<String, String> logout(@RequestParam(value = "token", required = false) String token) throws SecurityException { + userService.logout(token); + Map<String, String> response = new HashMap<>(); + response.put("status", "OK"); + return response; + } + /** * @return the userService * @see #userService diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java b/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java index f382db1c4672865c19e5edbb96d406e3cf0658ed..590a3c36bda12c4a64b12bf5e734a7de571a5ec3 100644 --- a/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java +++ b/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java @@ -540,10 +540,11 @@ public class UserService implements IUserService { return result; } - public void logout(AuthenticationToken result) { + @Override + public void logout(AuthenticationToken token) { synchronized (authenticationTokens) { - authenticationTokens.remove(result.getId()); - authenticatedUsers.remove(result); + authenticationTokens.remove(token.getId()); + authenticatedUsers.remove(token); } } @@ -551,4 +552,10 @@ public class UserService implements IUserService { public boolean userHasPrivilege(AuthenticationToken token, PrivilegeType type, Object object) { return userHasPrivilege(getUserByToken(token), type, object); } + + @Override + public void logout(String tokenString) throws SecurityException { + AuthenticationToken token = getToken(tokenString); + logout(token); + } } diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java index 686f40753222745cfe2195af378c5a9a65317ff9..3531370b76f3d3c106d3a7ef35bb81affe88f22c 100644 --- a/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java +++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java @@ -249,4 +249,8 @@ public interface IUserService { AuthenticationToken getToken(String token) throws SecurityException; boolean userHasPrivilege(AuthenticationToken token, PrivilegeType type, Object object); + + void logout(String tokenString) throws SecurityException; + + void logout(AuthenticationToken token); }