package com.megatim.fdxconsultation.service.impl.authentication; import com.megatim.fdxcommons.tools.context.AppContext; import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager; import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager; import com.megatim.fdxconsultation.core.ifaces.administration.UserManager; import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler; import com.megatim.fdxconsultation.core.ifaces.log.UserActionLogManager; import com.megatim.fdxconsultation.model.administration.Action; import com.megatim.fdxconsultation.model.administration.Role; import com.megatim.fdxconsultation.model.administration.User; import com.megatim.fdxconsultation.model.authentification.LoginRequest; import com.megatim.fdxconsultation.model.mappers.MapStructMapper; import com.megatim.fdxconsultation.service.ifaces.authentication.AuthenticationRS; import com.megatim.retrocedor.commons.tools.CommonsTools; import com.mgt.rs.security.core.common.AuthenticatedUser; import com.mgt.rs.security.core.exception.AuthenticationException; import com.mgt.rs.security.core.model.AuthenticationToken; import com.mgt.rs.security.core.service.AuthenticationTokenService; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.enterprise.event.Observes; import javax.inject.Inject; import javax.ws.rs.Path; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; /** * * @author lenovo */ @Path("auth") public class AuthenticationRSImpl implements AuthenticationRS { @Inject private AuthenticationTokenService authenticationTokenService; @Inject protected UserManager userManager; @Inject UserActionLogManager userActionLogManager; @Inject protected RoleManager roleManager; @Inject private MapStructMapper mapstructMapper; @AuthenticatedUser private User utilisateurConnecte; @Inject protected ActionManager actionManager; @Inject private RequestHandler requestHandler; /** * Methode permettant de recupere l'utilisateur connecté * * @param username */ public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) { utilisateurConnecte = userManager.recuperUtilisateur(username); } /** * Validate user credentials and issue a token for the user. * * @param loginRequest * @return */ @Override public Response authenticate(LoginRequest loginRequest) { User user = validateCredentials(loginRequest.getUserName(), loginRequest.getPwd()); String token = authenticationTokenService.issueToken(user.getUserName()); String refreshToken = authenticationTokenService.issueRefreshToken(user.getUserName()); AuthenticationToken authenticationToken = new AuthenticationToken(); authenticationToken.setToken(token); authenticationToken.setRefreshToken(refreshToken); user.setLastConnexionDateTime(new Date()); user.setCleSession(CommonsTools.formaterDate(AppContext.FORMAT_DATE_DDMMYYYYHHMMSS, new Date())); user.setConnected(true); userManager.update(user.getId(), user); return Response.ok(authenticationToken).build(); } /** * Validate username and password. * * @param username * @param password * @return */ public User validateCredentials(String username, String password) { //Variables List errors = new ArrayList<>(); User user = null; //On recupère les erreurs errors = userManager.validerParametresConnexion(username, password); //Si non vide if(!errors.isEmpty()){ //On lève l'execption throw new AuthenticationException(errors.get(0)); } //On recupère l'utilisateur connecté user = userManager.recuperUtilisateur(username, password); return user; } @Override public Response getInfoUser(HttpHeaders headers) { return Response.ok(mapstructMapper.userToUserDto(utilisateurConnecte)).build(); } @Override public Response ifUserNameExist(HttpHeaders headers, String username) { User user = userManager.recuperUtilisateur(username); return Response.ok(mapstructMapper.userToUserDto(user)).build(); } @Override public Response logout(HttpHeaders headers, User user) { User userBd = userManager.findById(user.getId()); userBd.setConnected(false); userManager.update(userBd.getId(), userBd); return Response.ok().build(); } @Override public Response generateDataTotTest(HttpHeaders headers) { String userName = "test"; User testUser = userManager.recuperUtilisateur(userName); boolean isUpdate = testUser != null; if (testUser == null) { testUser = new User(); } testUser.setUserName(userName); testUser.setPwd(CommonsTools.encryptPassword(userName)); Role role = new Role(); role.setLibelle("test"); role.setDescription("test"); List actions = actionManager.findAll(); if (actions != null && !actions.isEmpty()) { List roles = roleManager.findByUniqueProperty("libelle", role.getLibelle(), null); if (roles != null && !roles.isEmpty()) { role = roles.get(0); role.setActions(actions); roleManager.update(role.getId(), role); } else { role.setActions(actions); role = roleManager.save(role); } testUser.setRole(role); } //On recupère le user User updatedTestUser = (!isUpdate) ? userManager.save(testUser) : userManager.update(testUser.getId(), testUser); return Response.ok(mapstructMapper.userToUserDto(updatedTestUser)).build(); } }