@Override public void deverouiller(Verrou verrou, Credentials credentials) throws ServiceException { CompteUtilisateur compteUtilisateur = ((CompteUtilisateurDao) dao).readByUsername(credentials.getUsername()); if (compteUtilisateur == null) serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INEXISTANT); // est ce que le compte est verouille if (compteUtilisateur.getVerrou() == null) serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_ACTIF); if (compteUtilisateur.getVerrou().getCause() == null || !compteUtilisateur.getVerrou().getCode().equals(verrou.getCode())) serviceException( ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_CODE_DEVEROUILLAGE_INCONNU); if (Cause.ACCESS_MULTIPLE.equals(verrou.getCause()) && !compteUtilisateur.getCredentials().getPassword().equals(credentials.getPassword())) serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INEXISTANT); if (!compteUtilisateur.getVerrou().getJeton().equals(verrou.getJeton())) serviceException( ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_JETON_DEVEROUILLAGE_INCONNU); switch (verrou.getCause()) { case ACCESS_MULTIPLE: infos.clear(); notifier( NotificationMessageType.AVIS_COMPTE_UTILISATEUR_DEVERROUILLE_ACCES_MULTIPLE, new Object[] {"nomPrenomsAgentEtat", compteUtilisateur.getUtilisateur().getNom()}, compteUtilisateur); break; case REINITIALISATION_PASSWORD: compteUtilisateur .getCredentials() .setPassword( credentials.getPassword()); // on ecrase son ancien mot de passe avec le nouveau notifier( NotificationMessageType.AVIS_COMPTE_UTILISATEUR_DEVERROUILLE_REINITIALISATION_PASSWORD, new Object[] { "nomPrenomsAgentEtat", compteUtilisateur.getUtilisateur().getNom(), "loginUtilisateur", credentials.getUsername(), "motPasseUtilisateur", credentials.getPassword() }, compteUtilisateur); break; } compteUtilisateur.setVerrou(null); dao.update(compteUtilisateur); }
@Override public CompteUtilisateur authentifier(Credentials credentials) throws ServiceException { // if(infos.getTimestampDebut()!=null) // serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_CONNECTE); CompteUtilisateur compteUtilisateur = ((CompteUtilisateurDao) dao) .readByUsername(credentials.getUsername()); // readByCredentials(credentials); // Boolean verouille = compteUtilisateur!=null && compteUtilisateur.getVerrou()!=null /*&& // isValidTokenDeverouillage(compteUtilisateur.getTokenDeverouillage())*/; if (compteUtilisateur == null) // aucun compte avec ce username a été trouvé serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INCONNU); // System.out.println("Found token : // "+ToStringBuilder.reflectionToString(compteUtilisateur,ToStringStyle.MULTI_LINE_STYLE)); // dao.create(new CompteUtilisateur(new Credentials(RandomStringUtils.randomAlphabetic(4), // RandomStringUtils.randomAlphabetic(4)), compteUtilisateur.getUtilisateur(), null)); // for(CompteUtilisateur c : ((CompteUtilisateurDao)dao).readAll()) // System.out.println(c); // un compte avec ce username a été trouvé infos.setNombreTentative(infos.getNombreTentative() + 1); // System.out.println("CompteUtilisateurServiceImpl.authentifier() // "+infos.getNombreTentative()); if (!compteUtilisateur .getCredentials() .equals(credentials)) { // le mot de passe ne correspond pas if (compteUtilisateur.getVerrou() == null && infos.getNombreTentative() == MAX_TENTATIVE_AUTH) { verouiller(compteUtilisateur, Cause.ACCESS_MULTIPLE); serviceException( ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INCONNU, Boolean.FALSE); // we do not roll back transaction } else serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INCONNU); } if (compteUtilisateur.getVerrou() != null) { notifierVerrou(compteUtilisateur); serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_VEROUILLE); } infos.setTimestampDebut(System.currentTimeMillis()); authentificationInfos.setCompteUtilisateur(compteUtilisateur); return compteUtilisateur; }