/**Copyright 2010 Research Studios Austria Forschungsgesellschaft mBH
*
* This file is part of easyrec.
*
* easyrec is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* easyrec is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with easyrec. If not, see <http://www.gnu.org/licenses/>.
*/
package org.easyrec.controller.aop;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.easyrec.model.web.EasyRecSettings;
import org.easyrec.util.core.Security;
import org.easyrec.utils.MyUtils;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Set;
/**
* <p><b>Company: </b>
* SAT, Research Studios Austria</p>
* <p/>
* <p><b>Copyright: </b>
* (c) 2007</p>
* <p/>
* <p><b>last modified:</b><br/>
* $Author: fsalcher $<br/>
* $Date: 2012-03-19 14:22:17 +0100 (Mo, 19 Mär 2012) $<br/>
* $Revision: 18781 $</p>
*
* @author David Mann
*/
@Aspect
public class LoggedInCheckAspect {
private String localName;
private String webappPath;
private String extendedWebAppPath;
private EasyRecSettings easyrecSettings;
/**
* This String array conatains a list of public available sites. All pages in this array are accessible
* without logging into the system.
*/
private static Set<String> PUBLIC_SITES =
Sets.newHashSet("home", "login", "RSSBlog", "UpdateCheck", "operator/signin", "operator/signout",
"api-js/easyrec.js", "/api-js/easyrec.js", "t", "about");
public void setEasyrecSettings(EasyRecSettings easyrecSettings) {
this.easyrecSettings = easyrecSettings;
}
private final Log logger = LogFactory.getLog(getClass());
@Pointcut("execution(* org.springframework.web.servlet.mvc.Controller+.handleRequest(..))")
public void allControllers() {
}
private void initPath(HttpServletRequest request) {
localName = request.getLocalName();
localName = localName.equals("0.0.0.0") ? "localhost" : localName;
this.webappPath = request.getContextPath();
this.extendedWebAppPath = request.getScheme() + "://" + localName + ":" + request.getLocalPort() + webappPath;
PUBLIC_SITES = Sets.newHashSet(Collections2.transform(PUBLIC_SITES, new Function<String, String>() {
public String apply(@Nullable String input) {
StringBuilder result = new StringBuilder(webappPath);
result.append('/');
result.append(input);
return result.toString();
}
}));
}
@Around("allControllers()")
public Object LoggedInAspect(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = (HttpServletRequest) pjp.getArgs()[0];
HttpSession session = request.getSession(false);
ModelAndView originalModelAndView = (ModelAndView) pjp.proceed();
if (extendedWebAppPath == null)
initPath(request);
boolean signedIn = false;
try {
if (session != null && session.getAttribute("signedInOperatorId") != null)
signedIn = true;
if (originalModelAndView != null) {
originalModelAndView.addObject("signedIn", signedIn);
originalModelAndView.addObject("isDeveloper", Security.isDeveloper(request));
originalModelAndView.addObject("securityToken", Security.getSecurityToken(request));
originalModelAndView.addObject("webappPath", webappPath);
originalModelAndView.addObject("extendedWebappPath", extendedWebAppPath);
originalModelAndView.addObject("isGenerator", easyrecSettings.isGenerator());
originalModelAndView.addObject("operationMode", easyrecSettings.getOperationMode());
originalModelAndView.addObject("currentMonth", MyUtils.getCurrentMonth());
originalModelAndView.addObject("currentMonthName", MyUtils.getCurrentMonthName());
originalModelAndView.addObject("currentYear", MyUtils.getCurrentYear());
if (session != null) {
originalModelAndView.addObject("signedInOperator", session.getAttribute("signedInOperator"));
originalModelAndView.addObject("signedInOperatorId", session.getAttribute("signedInOperatorId"));
}
originalModelAndView.addObject("easyrecName", easyrecSettings.getName());
originalModelAndView.addObject("easyrecVersion", easyrecSettings.getVersion());
originalModelAndView.addObject("easyrecBiz", easyrecSettings.getBiz());
originalModelAndView.addObject("easyrecReleases", easyrecSettings.getReleases());
originalModelAndView.addObject("checkUpdateUrl", easyrecSettings.getUpdateURL());
originalModelAndView.addObject("updateUrl", easyrecSettings.getReleases());
}
} catch (IllegalStateException e) {
logger.debug("User Logged Out and can not get Session atributes.", e);
}
String currentPage = request.getRequestURI();
boolean isPublicSite = PUBLIC_SITES.contains(currentPage);
if (!signedIn && !isPublicSite)
return new ModelAndView("redirect:" + webappPath + "/home");
return originalModelAndView;
}
}