Author: bpoussin Date: 2011-05-21 17:53:43 +0200 (Sat, 21 May 2011) New Revision: 39 Url: http://chorem.org/repositories/revision/vradi/39 Log: Modification du registry et loggin pour utiliser les mecanisme Wikitty refactoring VradiSession, VradiWebConfig ajout classe VradiProxy pour gerer la creation du WS en singleton et pouvoir ajouter des methodes utile pour l'application Added: trunk/vradi-web/src/main/java/org/chorem/vradi/VradiProxy.java Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/VradiSession.java trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebConfig.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/LoginAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/RegisterAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/VradiBaseAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LogoutInterceptor.java Added: trunk/vradi-web/src/main/java/org/chorem/vradi/VradiProxy.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/VradiProxy.java (rev 0) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/VradiProxy.java 2011-05-21 15:53:43 UTC (rev 39) @@ -0,0 +1,83 @@ +package org.chorem.vradi; + +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.chorem.vradi.entities.Attachment; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyProxy; +import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyServiceFactory; +import org.nuiton.wikitty.search.Criteria; +import org.nuiton.wikitty.search.PagedResult; +import org.nuiton.wikitty.search.Search; + +/** + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class VradiProxy extends WikittyProxy { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(VradiProxy.class); + + static protected WikittyService ws = null; + + protected VradiProxy(ApplicationConfig config, WikittyService ws) { + super(config, ws); + } + + /** + * Returns instance of ChoremProxy with specified security token + * + * @param token + * @return + */ + static public VradiProxy getInstance(String token) { + ApplicationConfig config = VradiWebConfig.getConfig(); + WikittyService ws = getWikittyService(config); + VradiProxy result = new VradiProxy(config, ws); + result.setSecurityToken(token); + + return result; + } + + /** + * Returns WikittyService to use. This WikittyService is singleton. + * + * @param config + * @return WikittyService instance + */ + static protected WikittyService getWikittyService(ApplicationConfig config) { + if (ws == null) { + synchronized(VradiProxy.class) { + if (ws == null) { + ws = WikittyServiceFactory.buildWikittyService(config); + } + } + } + return ws; + } + + /** + * Returns the attachments linked with a wikitty id ordered descending + * by date + * + * @param formNoteId + * @return the list of attachments + */ + static public List<Attachment> getAttachments(String formNoteId) { + Criteria criteria = Search.query(). + eq(Attachment.FQ_FIELD_ATTACHMENT_FORMNOTE, formNoteId) + .criteria().addSortDescending(Attachment.FQ_FIELD_ATTACHMENT_DATE); + PagedResult<Attachment> result = getInstance(null). + findAllByCriteria(Attachment.class, criteria); + List<Attachment> attachments = result.getAll(); + return attachments; + } + +} Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/VradiSession.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/VradiSession.java 2011-05-21 12:43:44 UTC (rev 38) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/VradiSession.java 2011-05-21 15:53:43 UTC (rev 39) @@ -16,6 +16,7 @@ import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.WikittyServiceFactory; +import org.nuiton.wikitty.entities.WikittyUser; /** * Classe utilisee pour stocker les objets utils en session utilisateur @@ -33,33 +34,49 @@ static final private String VRADI_SESSION_KEY = VradiSession.class.getSimpleName(); - protected WikittyProxy proxy; - protected ApplicationConfig config; - protected VradiDataService dataService; + protected String securityToken = null; + protected VradiUser user = null; + transient protected VradiProxy proxy = null; - private VradiUser user; + transient protected VradiDataService dataService; public VradiSession() { - config = VradiWebConfig.getConfig(); - - // Init wikitty service - WikittyService ws = WikittyServiceFactory.buildWikittyService(config); - proxy = new WikittyProxy(config, ws); - - dataService = new VradiDataServiceImpl(config, proxy); - + // FIXME poussin 20110521 ? + // est-ce vraiment ici qu'il faut gerer i18n, a chaque creation d'une session + // on refait l'init :( ? et surtout il faut que + // chaque user est sa propre langue. // init I18n I18n.init(new DefaultI18nInitializer("vradi-i18n", getClass().getClassLoader(), "/"), null); } - public void invalidate() { - this.user = null; + /** + * You must use this method to login user, don't use proxy.login method + * directly + * + * @param login + * @param password + */ + public void login(String login, String password) { + getProxy().login(login, password); + securityToken = getProxy().getSecurityToken(); + user = getProxy().getUser(VradiUser.class); } - public ApplicationConfig getConfig() { - return config; + public VradiProxy getProxy() { + if (proxy == null) { + proxy = VradiProxy.getInstance(securityToken); + } + return proxy; } + + public void invalidate(Map<String, Object> session) { + VradiSession choremSession = getVradiSession(session); + choremSession.getProxy().logout(); + session.remove(VRADI_SESSION_KEY); + user = null; + } + static public VradiSession getVradiSession(HttpServletRequest request) { HttpSession session = request.getSession(); VradiSession result = getVradiSession(session); @@ -84,11 +101,16 @@ return result; } - public WikittyProxy getProxy() { - return proxy; - } - public VradiDataService getDataService() { + if (dataService == null) { + synchronized(VradiSession.class) { + if (dataService == null) { + ApplicationConfig config = VradiWebConfig.getConfig(); + VradiProxy proxy = getProxy(); + dataService = new VradiDataServiceImpl(config, proxy); + } + } + } return dataService; } Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebConfig.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebConfig.java 2011-05-21 12:43:44 UTC (rev 38) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/VradiWebConfig.java 2011-05-21 15:53:43 UTC (rev 39) @@ -32,42 +32,50 @@ } public static ApplicationConfig getConfig(String... args) { - if (config == null) { + synchronized(VradiWebConfig.class) { + if (config == null) { - // Creating instance of ApplicationConfig - config = new ApplicationConfig(VradiWebOption.CONFIG_FILE.getDefaultValue()); + // Creating instance of ApplicationConfig + config = new ApplicationConfig(VradiWebOption.CONFIG_FILE.getDefaultValue()); - // Load wikitty options - config.loadDefaultOptions(WikittyConfigOption.class); + // Load wikitty options + config.loadDefaultOptions(WikittyConfigOption.class); - // Load service options - config.loadDefaultOptions(VradiServiceConfiguration.VradiServiceOption.class); + // Load service options + config.loadDefaultOptions(VradiServiceConfiguration.VradiServiceOption.class); - // Load vradi options - config.loadDefaultOptions(VradiWebOption.class); + // Load vradi options + config.loadDefaultOptions(VradiWebOption.class); - try { - // Parse args - config.parse(args); + try { + // Parse args + config.parse(args); - // on supprime le stamp de snapshot s'il existe - String sVersion = VersionUtil.removeSnapshot(config.getOption("application.version")); - Version version = VersionUtil.valueOf(sVersion); - config.setDefaultOption(VradiWebOption.VRADI_VERSION.key, version.getVersion()); + // on supprime le stamp de snapshot s'il existe + String sVersion = VersionUtil.removeSnapshot( + config.getOption("application.version")); + Version version = VersionUtil.valueOf(sVersion); + config.setDefaultOption( + VradiWebOption.VRADI_VERSION.key, + version.getVersion()); - // la version de la base est sans classifier (pas de alpha, ou rc,...) - Version dbVersion; - if (version.hasClassifier()) { - dbVersion = VersionUtil.removeClassifier(version); - } else { - dbVersion = VersionUtil.valueOf(version.toString()); - } + // la version de la base est sans classifier (pas de alpha, ou rc,...) + Version dbVersion; + if (version.hasClassifier()) { + dbVersion = VersionUtil.removeClassifier(version); + } else { + dbVersion = VersionUtil.valueOf(version.toString()); + } - config.setDefaultOption(VradiWebOption.VRADI_DATABASE_VERSION.key, dbVersion.getVersion()); - } catch (ArgumentsParserException eee) { - if (log.isErrorEnabled()) { - log.error("Can't load vradi configuration", eee); + config.setDefaultOption( + VradiWebOption.VRADI_DATABASE_VERSION.key, + dbVersion.getVersion()); + } catch (ArgumentsParserException eee) { + if (log.isErrorEnabled()) { + log.error("Can't load vradi configuration", eee); + } + } } } } Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/LoginAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/LoginAction.java 2011-05-21 12:43:44 UTC (rev 38) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/LoginAction.java 2011-05-21 15:53:43 UTC (rev 39) @@ -37,26 +37,6 @@ } /** - * Check password in solr index, if fail try to check password admin in config file - * - * @param email email login - * @param password password - * @return null if not found - */ - protected VradiUser checkLogin(String email, String password) { - VradiUser result = null; - if (email != null && password != null) { - if (!email.isEmpty() && !password.equals(StringUtil.encodeMD5(""))) { - WikittyProxy proxy = getProxy(); - Criteria criteria = Search.query().eq(VradiUser.FQ_FIELD_WIKITTYUSER_LOGIN, email). - eq(VradiUser.FQ_FIELD_WIKITTYUSER_PASSWORD, password).criteria(); - result = proxy.findByCriteria(VradiUser.class, criteria); - } - } - return result; - } - - /** * Authenticates the user if his email and password are valid */ public String execute() { @@ -68,15 +48,12 @@ if (password != null) { String md5 = StringUtil.encodeMD5(password); - VradiUser user = checkLogin(email, md5); - if (user != null) { - getVradiSession().setUser(user); - result = SUCCESS; - } + getVradiSession().login(email, md5); + result = SUCCESS; } } } catch (Exception e) { - addActionError(getText(n_("vradi.error.internal"))); + addActionError(getText(n_("vradi.authentification.error"))); log.error(e.getMessage(), e); } return result; Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/RegisterAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/RegisterAction.java 2011-05-21 12:43:44 UTC (rev 38) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/RegisterAction.java 2011-05-21 15:53:43 UTC (rev 39) @@ -3,6 +3,7 @@ import javax.mail.MessagingException; import javax.mail.internet.AddressException; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringUtils; import org.apache.struts2.interceptor.ServletRequestAware; import org.chorem.vradi.entities.VradiUser; @@ -71,32 +72,28 @@ @Override public void setServletRequest(HttpServletRequest request) { - this.request = request; + this.request = request; } /** * - * @param passwordMD5 the user password hashed in md5 * @return false if the email address isn't already registered, true * otherwise */ - protected boolean alreadyRegistered(String passwordMD5) { + protected boolean alreadyRegistered() { boolean result = true; - if (email != null && passwordMD5 != null) { - if (!email.isEmpty() && !passwordMD5.equals(StringUtil.encodeMD5(""))) { - WikittyProxy proxy = getProxy(); - Criteria criteria = Search.query().eq(VradiUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria(); //Retrieves user by user name (email) - - //If the user doesn't already exist - if (proxy.findByCriteria(VradiUser.class, criteria) == null) { - result = false; - } else { //The email address is already used by someone - addFieldError("email", getText(n_("vradi.register.emailAldyUsed"))); - } - } - } - return result; + WikittyProxy proxy = getProxy(); + Criteria criteria = Search.query().eq( + VradiUser.FQ_FIELD_WIKITTYUSER_LOGIN, email).criteria(); //Retrieves user by user name (email) + VradiUser user = proxy.findByCriteria(VradiUser.class, criteria); + //If the user doesn't already exist + if (user == null) { + result = false; + } else { //The email address is already used by someone + addFieldError("email", getText(n_("vradi.register.emailAldyUsed"))); + } + return result; } /** @@ -106,18 +103,17 @@ String result = INPUT; try { - if (email != null) { + if (!StringUtils.isBlank(email)) { email = email.trim(); - if (password != null) { + if (!StringUtils.isBlank(password)) { if (!password.equals(repeatPassword)) { addActionError(getText(n_("vradi.register.pwdDontMatch"))); } else { - String md5 = StringUtil.encodeMD5(password); - //If the email address isn't already used - if (!alreadyRegistered(md5)) { + if (!alreadyRegistered()) { WikittyProxy proxy = getProxy(); VradiUserImpl newUser = new VradiUserImpl(); + String md5 = StringUtil.encodeMD5(password); newUser.setPassword(md5); newUser.setLogin(email); VradiUser login = proxy.store(newUser); //Stores the new user @@ -126,8 +122,14 @@ if (login == null) { addFieldError("email", getText(n_("vradi.register.invalidLogin"))); } else { - getVradiSession().setUser(login); + // meme si la suite echoue, la creation du compte + // a ete un succes + result = SUCCESS; + // la creation c bien passe, on authen la personne + // peut-etre ne pas le faire pour eviter les robots ? + getVradiSession().login(email, md5); + try { String mailContent; @@ -145,7 +147,6 @@ addActionError(n_(message)); log.error(message + "(" + e.getMessage() + ")", e); } - result = SUCCESS; } } } Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/VradiBaseAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/VradiBaseAction.java 2011-05-21 12:43:44 UTC (rev 38) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/VradiBaseAction.java 2011-05-21 15:53:43 UTC (rev 39) @@ -9,6 +9,7 @@ import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import org.chorem.vradi.VradiSession; +import org.chorem.vradi.VradiWebConfig; import org.chorem.vradi.services.VradiDataService; import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyProxy; @@ -56,7 +57,7 @@ } public ApplicationConfig getConfig() { - return getVradiSession().getConfig(); + return VradiWebConfig.getConfig(); } @Override Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LogoutInterceptor.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LogoutInterceptor.java 2011-05-21 12:43:44 UTC (rev 38) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LogoutInterceptor.java 2011-05-21 15:53:43 UTC (rev 39) @@ -16,7 +16,7 @@ @Override public String intercept(ActionInvocation invocation) throws Exception { Map<String, Object> session = ActionContext.getContext().getSession(); - VradiSession.getVradiSession(session).invalidate(); + VradiSession.getVradiSession(session).invalidate(session); String result = invocation.invoke(); return result; }