Author: echatellier Date: 2014-06-19 16:23:33 +0200 (Thu, 19 Jun 2014) New Revision: 232 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/232 Log: Ajout d'une fenetre de login si vraiment l'utilisateur ne peut pas ?\195?\170tre authentifi?\195?\169. Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-06-19 13:08:44 UTC (rev 231) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/FaxToMailUIContext.java 2014-06-19 14:23:33 UTC (rev 232) @@ -49,9 +49,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractBean; +import org.jdesktop.swingx.JXLoginPane; +import org.jdesktop.swingx.JXLoginPane.JXLoginDialog; +import org.jdesktop.swingx.JXLoginPane.Status; +import org.jdesktop.swingx.auth.LoginService; import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.ClassPathI18nInitializer; import org.nuiton.jaxx.application.ApplicationConfiguration; +import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.jaxx.application.swing.ApplicationUIContext; import org.nuiton.jaxx.application.swing.action.ApplicationActionEngine; import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory; @@ -348,28 +353,71 @@ I18n.init(new ClassPathI18nInitializer(), i18nLocale); - // try to get user from ldap + // try to autologin user from username of current X session + autologinUser(); + + Configuration config = getConfigurationService().getConfiguration(); + setFaxToMailConfiguration(config); + + //--------------------------------------------------------------------// + // init action UI + //--------------------------------------------------------------------// + setActionUI(new ApplicationActionUI(null, this)); + } + + /** + * Recupere l'utilisateur connecté ou demande les identifiants à l'utilisateur. + */ + protected void autologinUser() { + + String principal = getLoggedInUsername(); + + // l'authentification par defaut se fait par trigramme try { - String principal = getLoggedInUsername(); FaxToMailUser currentUser = getLdapService().getUserFromPrincipal(principal); if (log.isInfoEnabled()) { log.info("Connected as " + currentUser.getFirstName() + " " + currentUser.getLastName()); } setCurrentUser(currentUser); } catch (AuthenticationException ex) { - throw new RuntimeException(ex); + if (log.isWarnEnabled()) { + log.warn("Can't anthenticate user", ex); + } } - - Configuration config = getConfigurationService().getConfiguration(); - setFaxToMailConfiguration(config); + // si ca n'a pas fonctionné, on retente par login mot de passe + while (getCurrentUser() == null) { + JXLoginPane pane = new JXLoginPane(); + pane.setLoginService(new LoginService() { + @Override + public boolean authenticate(String name, char[] password, String server) throws Exception { + boolean result = false; + try { + FaxToMailUser user = getLdapService().authenticateUser(name, String.valueOf(password)); + setCurrentUser(user); + result = true; + } catch (AuthenticationException ex) { + if (log.isWarnEnabled()) { + log.warn("Can't anthenticate user", ex); + } + } + return result; + } + }); -// //--------------------------------------------------------------------// -// // init action UI -// //--------------------------------------------------------------------// - setActionUI(new ApplicationActionUI(null, this)); + // show login dialog + Status loginStatus = JXLoginPane.showLoginDialog(null, pane); + if (loginStatus == Status.CANCELLED) { + throw new ApplicationTechnicalException("Authentication canceled"); + } + } } + /** + * Retourne l'utilsateur connecté sur la session utilsateur (ou a defaut un utilisateur de test). + * + * @return trigramme + */ protected String getLoggedInUsername() { String result = getConfig().getLdapTestPrincipal(); if (StringUtils.isBlank(result)) {