Author: bpoussin Date: 2011-05-25 01:33:19 +0200 (Wed, 25 May 2011) New Revision: 46 Url: http://chorem.org/repositories/revision/vradi/46 Log: - / redirect to /search.action - redirect to requested page after login Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/actions/LoginAction.java trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LoginInterceptor.java trunk/vradi-web/src/main/resources/struts.xml trunk/vradi-web/src/main/webapp/WEB-INF/web.xml Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java 2011-05-24 00:35:31 UTC (rev 45) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/EditAction.java 2011-05-24 23:33:19 UTC (rev 46) @@ -3,11 +3,13 @@ import com.opensymphony.xwork2.ActionContext; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.ServletRequestAware; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.entities.Wikitty; +import org.nuiton.wikitty.entities.WikittyExtension; /** * @@ -26,10 +28,20 @@ return (EditAction)ActionContext.getContext().get(CONTEXT_ACTION_KEY); } + /** restraint les modifications possibles sur certaine extension */ + protected String restrictedExtension; protected HttpServletRequest request; protected String id; protected Wikitty wikitty; + public String getRestrictedExtension() { + return restrictedExtension; + } + + public void setRestrictedExtension(String restrictedExtension) { + this.restrictedExtension = restrictedExtension; + } + @Override public void setServletRequest(HttpServletRequest request) { this.request = request; @@ -47,6 +59,21 @@ return wikitty; } + protected boolean isAcceptableExtension(String fqfield) { + boolean result = false; + if (StringUtils.isBlank(restrictedExtension)) { + result = true; + } else { + try { + String extName = WikittyExtension.extractExtensionName(fqfield); + result = restrictedExtension.contains(extName); + } catch(Exception eee) { + log.debug("Not acceptable extension format", eee); + } + } + return result; + } + @Override public String execute() throws Exception { String result = SUCCESS; @@ -57,7 +84,7 @@ for (Object key : request.getParameterMap().keySet()) { String k = String.valueOf(key); log.debug(String.format("Look for field(%s)", k)); - if (wikitty.hasField(k)) { + if (wikitty.hasField(k) && isAcceptableExtension(k)) { Object v = request.getParameter(k); log.debug(String.format("Put value(%s) in field(%s)", v, k)); wikitty.setFqField(k, v); 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-24 00:35:31 UTC (rev 45) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/actions/LoginAction.java 2011-05-24 23:33:19 UTC (rev 46) @@ -17,8 +17,11 @@ private static final long serialVersionUID = 6891064800288772246L; + public static final String REDIRECT_AFTER_LOGIN = "redirectAfterLogin"; + protected String email; protected String password; + protected String redirectTo; public String getEmail() { return email; @@ -36,12 +39,22 @@ this.password = password; } + public String getRedirectTo() { + return redirectTo; + } + /** * Authenticates the user if his email and password are valid */ + @Override public String execute() { String result = INPUT; + // si un utilisateur est deja connecte, on commence par le deloggue + VradiUser user = getVradiSession().getUser(); + if (user != null) { + getVradiSession().invalidate(session); + } try { if (email != null) { email = email.trim(); @@ -49,6 +62,13 @@ if (password != null) { String md5 = StringUtil.encodeMD5(password); getVradiSession().login(email, md5); + redirectTo = (String)session.get(REDIRECT_AFTER_LOGIN); + // on ne laisse pas de trace dans la session + session.remove(REDIRECT_AFTER_LOGIN); + if (redirectTo == null) { + redirectTo = "/"; + } + log.debug(String.format("Login ok, we go to '%s'", redirectTo)); result = SUCCESS; } } @@ -58,4 +78,4 @@ } return result; } -} \ No newline at end of file +} Modified: trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LoginInterceptor.java =================================================================== --- trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LoginInterceptor.java 2011-05-24 00:35:31 UTC (rev 45) +++ trunk/vradi-web/src/main/java/org/chorem/vradi/interceptors/LoginInterceptor.java 2011-05-24 23:33:19 UTC (rev 46) @@ -1,13 +1,18 @@ package org.chorem.vradi.interceptors; import java.util.Map; +import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.chorem.vradi.VradiSession; +import org.chorem.vradi.actions.LoginAction; import org.chorem.vradi.entities.VradiUser; /** @@ -15,8 +20,12 @@ * where logging is mandatory */ public class LoginInterceptor extends AbstractInterceptor { + private static final long serialVersionUID = -7520186185205372272L; + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(VradiSession.class); + protected String loginRedirect; /** @@ -36,6 +45,25 @@ //If the user isn't logged in if (user == null) { + // put in session url where we must go after login + HttpServletRequest request = ServletActionContext.getRequest(); + String action = request.getPathInfo(); + String redirect = null; + // si l'utilisateur n'a pas demande explicitement la page de login + // on essaiera de le rediriger vers la page qu'il a demande apres + // le login + if (!StringUtils.startsWith(action, loginRedirect)) { + StringBuffer url = request.getRequestURL(); + String query = request.getQueryString(); + if (query != null) { + url.append('?'); + url.append(query); + } + redirect = url.toString(); + } + session.put(LoginAction.REDIRECT_AFTER_LOGIN, redirect); + log.debug(String.format("User not loggued redirect to '%s' and '%s'", + loginRedirect, redirect)); ServletActionContext.getResponse().sendRedirect(loginRedirect); } else { result = invocation.invoke(); Modified: trunk/vradi-web/src/main/resources/struts.xml =================================================================== --- trunk/vradi-web/src/main/resources/struts.xml 2011-05-24 00:35:31 UTC (rev 45) +++ trunk/vradi-web/src/main/resources/struts.xml 2011-05-24 23:33:19 UTC (rev 46) @@ -71,15 +71,14 @@ </action> <action name="forgotPassword_*" method="{1}" class="org.chorem.vradi.actions.ForgotPasswordAction"> <result name="input">/WEB-INF/jsp/forgotPassword.jsp</result> - <result type="redirectAction">login_input</result> + <result type="redirectAction">login</result> </action> - <action name="login_*" method="{1}" class="org.chorem.vradi.actions.LoginAction"> + <action name="login" class="org.chorem.vradi.actions.LoginAction"> <result name="input">/WEB-INF/jsp/login.jsp</result> - <result name="login" type="redirectAction">search</result> - <result type="redirectAction">search</result> + <result type="redirect">${redirectTo}</result> </action> <action name="logout" class="org.chorem.vradi.actions.LogoutAction"> - <result type="redirectAction">login_input</result> + <result type="redirectAction">login</result> </action> </package> @@ -109,6 +108,7 @@ +--> <action name="edit/*" class="org.chorem.vradi.actions.EditAction"> <param name="id">{1}</param> + <param name="restrictedExtension">FormNote</param> <result type="wikitty-json"/> </action> </package> Modified: trunk/vradi-web/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/vradi-web/src/main/webapp/WEB-INF/web.xml 2011-05-24 00:35:31 UTC (rev 45) +++ trunk/vradi-web/src/main/webapp/WEB-INF/web.xml 2011-05-24 23:33:19 UTC (rev 46) @@ -22,27 +22,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #L% --> - -<web-app id="bow" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> - - <display-name>Bow</display-name> - - <!-- Filters --> - <filter> - <filter-name>struts2</filter-name> - <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> - </filter> - - <filter-mapping> - <filter-name>struts2</filter-name> - <url-pattern>/*</url-pattern> - </filter-mapping> - - <!-- Welcome file lists --> - <welcome-file-list> - <welcome-file>index.html</welcome-file> - </welcome-file-list> - +<web-app id="bow" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> + <display-name>Bow</display-name> + <!-- Filters --> + <filter> + <filter-name>struts2</filter-name> + <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>struts2</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <!-- Welcome file lists --> + <welcome-file-list> + <welcome-file>search.action</welcome-file> + </welcome-file-list> </web-app>