r193 - in trunk: faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action faxtomail-ui-web/src/main/webapp/WEB-INF/content faxtomail-ui-web/src/main/webapp/WEB-INF/decorators
Author: echatellier Date: 2014-06-11 17:29:45 +0200 (Wed, 11 Jun 2014) New Revision: 193 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/193 Log: Connexion ?\195?\160 l'application web ?\195?\160 partir du ldap Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/FaxToMailApplicationContext.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailSession.java trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/LoginAction.java trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/login-input.jsp trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/decorators/layout.jsp Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java 2014-06-11 15:28:27 UTC (rev 192) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java 2014-06-11 15:29:45 UTC (rev 193) @@ -45,6 +45,7 @@ import com.franciaflex.faxtomail.services.service.ldap.LdapUser; import com.unboundid.ldap.sdk.LDAPConnection; import com.unboundid.ldap.sdk.LDAPException; +import com.unboundid.ldap.sdk.LDAPSearchException; import com.unboundid.ldap.sdk.SearchResult; import com.unboundid.ldap.sdk.SearchResultEntry; import com.unboundid.ldap.sdk.SearchScope; @@ -105,7 +106,7 @@ List<SearchResultEntry> searchEntries = searchResult.getSearchEntries(); for (SearchResultEntry searchEntry : searchEntries) { LdapUser user = new LdapUser(); - user.setLogin(searchEntry.getAttributeValue("userPrincipalName")); + user.setLogin(searchEntry.getAttributeValue("sn")); // Parse name String fullName = searchEntry.getAttributeValue("name"); @@ -248,14 +249,90 @@ * @throws AuthenticationException if authentication fails */ public FaxToMailUser authenticateUser(String login, String password) throws AuthenticationException { + + FaxToMailUser result = null; + + try { + // first connexion to get full user login + LDAPConnection adminConnect = new LDAPConnection(); + adminConnect.connect(getApplicationConfig().getLdapHost(), getApplicationConfig().getLdapPort()); + adminConnect.bind(getApplicationConfig().getLdapUser(), getApplicationConfig().getLdapPassword()); + + // search user in ldap + String userDN = null; + SearchResultEntry searchEntry = null; + if (adminConnect.isConnected()) { + String filter = String.format("(sn=%s)", login); + SearchResult searchResult = adminConnect.search("DC=mac-groupe,DC=net", SearchScope.SUB, filter); + if (!searchResult.getSearchEntries().isEmpty()) { + searchEntry = searchResult.getSearchEntries().get(0); + userDN = searchEntry.getDN(); + } + adminConnect.close(); + } + + if (searchEntry != null) { + // ouvre une connexion avec l'identification de l'utilisateur qui essaye de se connecter + // à l'application (ca permet de vérifier l'authentification) + LDAPConnection userConnect = new LDAPConnection(); + userConnect.connect(getApplicationConfig().getLdapHost(), getApplicationConfig().getLdapPort()); + userConnect.bind(userDN, password); + + if (userConnect.isConnected()) { + FaxToMailUser user = updateUserFormLdap(searchEntry, login); + + Binder<FaxToMailUser, FaxToMailUser> faxToMailUserBinder = BinderFactory.newBinder(FaxToMailUser.class); + result = new FaxToMailUserImpl(); + faxToMailUserBinder.copyExcluding(user, result); + userConnect.close(); + } else { + throw new AuthenticationException("Not connected"); + } + } else { + throw new AuthenticationException("Utilisateur inconnu : " + login); + } + + } catch (LDAPException ex) { + if (log.isWarnEnabled()) { + log.warn("Can't login to ldap", ex); + } + throw new AuthenticationException(ex.getResultCode().getName(), ex); + } + return result; + } + + protected FaxToMailUser updateUserFormLdap(SearchResultEntry searchEntry, String login) throws LDAPSearchException { + + FaxToMailUser result = null; + + // create or FaxToMailUserTopiaDao faxtomailUserDao = getPersistenceContext().getFaxToMailUserDao(); - FaxToMailUser user = faxtomailUserDao.forAll().findAnyOrNull(); - FaxToMailUser result = null; - if (user != null) { - Binder<FaxToMailUser, FaxToMailUser> faxToMailUserBinder = BinderFactory.newBinder(FaxToMailUser.class); + result = faxtomailUserDao.forLoginEquals(login).findUniqueOrNull(); + + if (result == null) { result = new FaxToMailUserImpl(); - faxToMailUserBinder.copyExcluding(user, result); + result.setLogin(login); } + + // update other ldap fields + String fullName = searchEntry.getAttributeValue("name"); + if (fullName.indexOf(' ') != -1) { + String lastName = fullName.substring(0, fullName.indexOf(' ')); + String firstName = fullName.substring(fullName.indexOf(' ') + 1); + result.setFirstName(firstName); + result.setLastName(lastName); + } else { + result.setFirstName(""); + result.setLastName(fullName); + } + + if (result.isPersisted()) { + result = faxtomailUserDao.update(result); + } else { + result = faxtomailUserDao.create(result); + } + getPersistenceContext().commit(); + return result; } } Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/FaxToMailApplicationContext.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/FaxToMailApplicationContext.java 2014-06-11 15:28:27 UTC (rev 192) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/FaxToMailApplicationContext.java 2014-06-11 15:29:45 UTC (rev 193) @@ -30,6 +30,7 @@ import com.franciaflex.faxtomail.services.service.FaxToMailWebApplicationContext; import com.franciaflex.faxtomail.services.service.InitFaxToMailService; import com.franciaflex.faxtomail.web.DefaultFaxToMailWebApplicationContext; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.LogManager; @@ -37,6 +38,8 @@ import java.io.File; +import javassist.expr.NewArray; + public class FaxToMailApplicationContext { private static Log log = LogFactory.getLog(FaxToMailApplicationContext.class); @@ -133,6 +136,14 @@ // LocalizedTextUtil.addDefaultResourceBundle("i18n.faxtomail-web"); + FaxToMailTopiaApplicationContext topiaAppContext = getTopiaApplicationContext(); + if (topiaAppContext.isSchemaEmpty()) { + if (log.isInfoEnabled()) { + log.info("Create application schema"); + } + topiaAppContext.createSchema(); + } + FaxToMailTopiaPersistenceContext persistenceContext = newPersistenceContext(); FaxToMailServiceContext serviceContext = newServiceContext(persistenceContext); Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailSession.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailSession.java 2014-06-11 15:28:27 UTC (rev 192) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/FaxToMailSession.java 2014-06-11 15:29:45 UTC (rev 193) @@ -25,12 +25,10 @@ */ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; -import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserImpl; import com.google.common.collect.Lists; import java.io.Serializable; import java.util.Collection; -import java.util.UUID; public class FaxToMailSession implements Serializable { @@ -67,26 +65,19 @@ } public String getAuthenticatedUserId() { - //return authenticatedUserId; - return UUID.randomUUID().toString(); + return authenticatedUserId; } public void setAuthenticatedUserId(String authenticatedUserId) { - //this.authenticatedUserId = authenticatedUserId; + this.authenticatedUserId = authenticatedUserId; } public FaxToMailUser getAuthenticatedFaxToMailUser() { - //return authenticatedFaxToMailUser; - FaxToMailUser result = new FaxToMailUserImpl(); - result.setTopiaId(UUID.randomUUID().toString()); - result.setFirstName("Demo"); - result.setLastName("Demo"); - result.setLogin("demo"); - return result; + return authenticatedFaxToMailUser; } public void setAuthenticatedFaxToMailUser(FaxToMailUser authenticatedFaxToMailUser) { - //this.authenticatedFaxToMailUser = authenticatedFaxToMailUser; + this.authenticatedFaxToMailUser = authenticatedFaxToMailUser; } public void logout() { Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/LoginAction.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/LoginAction.java 2014-06-11 15:28:27 UTC (rev 192) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/LoginAction.java 2014-06-11 15:29:45 UTC (rev 193) @@ -70,10 +70,10 @@ String result = SUCCESS; try { FaxToMailUser user = ldapService.authenticateUser(login, password); - //getSession().setAuthenticatedUserId(user.getTopiaId()); + getSession().setAuthenticatedUserId(user.getTopiaId()); } catch (AuthenticationException ex) { - result = ERROR; - addActionError("Can't login"); + result = INPUT; + addActionError("Impossible de se connecter (" + ex.getMessage() + ")"); } return result; } Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/login-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/login-input.jsp 2014-06-11 15:28:27 UTC (rev 192) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/login-input.jsp 2014-06-11 15:29:45 UTC (rev 193) @@ -34,22 +34,19 @@ <h1 class="page-header">Connexion</h1> <s:form id="main_form" action="login" method="post" role="form" class="form-horizontal"> - - <div class="alert alert-warning"> - <strong>Attention!</strong> Le formulaire de connexion n'est pas encore branché sur le serveur LDAP. - Entrez n'importe quelles informations de connexion pour le moment. - </div> + <s:actionerror/> + <div class="form-group"> <label for="loginField" class="col-sm-2 control-label">Identifiant LDAP :</label> <div class="col-sm-10"> - <input type="email" class="form-control" id="loginField" placeholder="nom.prenom@franciaflex.fr"> + <input type="text" name="login" class="form-control" id="loginField" placeholder="nom.prenom@franciaflex.fr" required> </div> </div> <div class="form-group"> <label for="passwordField" class="col-sm-2 control-label">Mot de passe :</label> <div class="col-sm-10"> - <input type="password" class="form-control" id="passwordField" placeholder="password"> + <input type="password" name="password" class="form-control" id="passwordField" placeholder="password" required> </div> </div> <!-- <div class="form-group"> Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/decorators/layout.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2014-06-11 15:28:27 UTC (rev 192) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/decorators/layout.jsp 2014-06-11 15:29:45 UTC (rev 193) @@ -45,10 +45,7 @@ <div id="wrap-global"> <div id="wrap-main" class="<decorator:getProperty property="page.wide-display"/>"> <div id="faxtomail-body"> - <s:actionerror theme="bootstrap"/> - <s:actionmessage theme="bootstrap"/> - <s:fielderror theme="bootstrap"/> - + <!-- navbar --> <header class="navbar navbar-inverse navbar-static-top" role="banner"> <div class="container">
participants (1)
-
echatellier@users.forge.codelutin.com