Advertisement
Guest User

Untitled

a guest
Jun 15th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.73 KB | None | 0 0
  1. package com.github.sobolewskikamil.soa.service.rest;
  2.  
  3. import com.github.sobolewskikamil.soa.persistence.api.remote.LoggedOwnerDao;
  4.  
  5. import javax.annotation.security.RolesAllowed;
  6. import javax.ejb.EJB;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.ws.rs.*;
  10. import javax.ws.rs.core.Context;
  11. import javax.ws.rs.core.MediaType;
  12. import javax.ws.rs.core.Response;
  13. import java.sql.Timestamp;
  14. import java.time.Instant;
  15.  
  16. @Consumes(value = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  17. @Produces(value = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
  18. @Path("auth")
  19. public class Authentication {
  20.     @EJB(mappedName = "java:global/soa-project-persistence-server/LoggedOwnerDao!com.github.sobolewskikamil.soa.persistence.api.remote.LoggedOwnerDao")
  21.     private LoggedOwnerDao loggedOwnerDao;
  22.     @Context
  23.     private HttpServletRequest httpRequest;
  24.  
  25.     @POST
  26.     public Response login(Credentials credentials) {
  27.         try {
  28.             String username = credentials.getUsername();
  29.             String password = credentials.getPassword();
  30.             if (loggedOwnerDao.isOwnerLogged(username)) {
  31.                 if (shouldTimeoutSession(username, httpRequest.getSession().getMaxInactiveInterval())) {
  32.                     loggedOwnerDao.logoutOwner(username);
  33.                 } else {
  34.                     return Response.status(401).type("text/plain").entity("User is logged in a different session").build();
  35.                 }
  36.             }
  37.             httpRequest.login(username, password);
  38.             loggedOwnerDao.logOwnerByName(username, httpRequest.getSession().getId());
  39.             return Response.ok(httpRequest.getSession().getId()).build();
  40.         } catch (ServletException e) {
  41.             return Response.status(401).type("text/plain").entity("Credentials are invalid").build();
  42.         }
  43.     }
  44.  
  45.     @DELETE
  46.     @RolesAllowed({"Admin", "User"})
  47.     public Response logout() {
  48.         try {
  49.             String login = httpRequest.getUserPrincipal().getName();
  50.             loggedOwnerDao.logoutOwner(login);
  51.             httpRequest.logout();
  52.             return Response.ok().build();
  53.         } catch (ServletException e) {
  54.             return Response.status(500).build();
  55.         }
  56.     }
  57.  
  58.     private boolean shouldTimeoutSession(String ownerName, int maxInactiveInterval) {
  59.         Timestamp lastRequestTime = loggedOwnerDao.getLastRequestTime(ownerName);
  60.         Timestamp now = Timestamp.from(Instant.now());
  61.         long lastRequestTimeMillis = lastRequestTime.getTime();
  62.         long nowMillis = now.getTime();
  63.         long diffInSeconds = (nowMillis - lastRequestTimeMillis) / 1000;
  64.         return diffInSeconds > maxInactiveInterval;
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement