Files
Athou_commafeed/src/main/java/com/commafeed/frontend/CommaFeedApplication.java

174 lines
6.1 KiB
Java
Raw Normal View History

2013-03-20 20:33:42 +01:00
package com.commafeed.frontend;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.InitialContext;
import javax.naming.NamingException;
2013-04-11 11:11:57 +02:00
import javax.servlet.http.Cookie;
2013-03-20 20:33:42 +01:00
2013-08-11 11:45:32 +02:00
import lombok.extern.slf4j.Slf4j;
2013-03-23 19:46:09 +01:00
import org.apache.wicket.Application;
2013-03-30 19:06:32 +01:00
import org.apache.wicket.Component;
2013-03-20 20:33:42 +01:00
import org.apache.wicket.Page;
import org.apache.wicket.RuntimeConfigurationType;
2013-03-20 20:33:42 +01:00
import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
2013-04-11 11:11:57 +02:00
import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
2013-03-30 19:06:32 +01:00
import org.apache.wicket.authorization.Action;
import org.apache.wicket.authorization.IAuthorizationStrategy;
2013-03-20 20:33:42 +01:00
import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
import org.apache.wicket.authroles.authorization.strategies.role.Roles;
import org.apache.wicket.cdi.CdiConfiguration;
import org.apache.wicket.cdi.ConversationPropagation;
import org.apache.wicket.core.request.handler.PageProvider;
import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
2013-04-14 08:45:24 +02:00
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.filter.JavaScriptFilteredIntoFooterHeaderResponse;
import org.apache.wicket.markup.html.IHeaderResponseDecorator;
2013-03-20 20:33:42 +01:00
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Response;
2013-03-30 19:06:32 +01:00
import org.apache.wicket.request.component.IRequestableComponent;
2013-03-20 20:33:42 +01:00
import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
import org.apache.wicket.request.cycle.RequestCycle;
2013-04-11 11:11:57 +02:00
import org.apache.wicket.util.cookies.CookieUtils;
2013-03-20 20:33:42 +01:00
2013-07-29 16:42:52 +02:00
import com.commafeed.backend.services.ApplicationPropertiesService;
import com.commafeed.frontend.pages.DemoLoginPage;
2013-03-23 16:17:19 +01:00
import com.commafeed.frontend.pages.HomePage;
import com.commafeed.frontend.pages.LogoutPage;
2013-05-19 16:24:56 +02:00
import com.commafeed.frontend.pages.NextUnreadRedirectPage;
2013-05-20 21:53:13 +02:00
import com.commafeed.frontend.pages.PasswordRecoveryCallbackPage;
import com.commafeed.frontend.pages.PasswordRecoveryPage;
2013-04-09 11:10:26 +02:00
import com.commafeed.frontend.pages.WelcomePage;
2013-03-20 20:33:42 +01:00
import com.commafeed.frontend.utils.exception.DisplayExceptionPage;
2013-03-27 20:56:45 +01:00
2013-08-11 11:45:32 +02:00
@Slf4j
2013-03-20 20:33:42 +01:00
public class CommaFeedApplication extends AuthenticatedWebApplication {
public CommaFeedApplication() {
super();
2013-07-29 16:42:52 +02:00
boolean prod = ApplicationPropertiesService.get().isProduction();
setConfigurationType(prod ? RuntimeConfigurationType.DEPLOYMENT : RuntimeConfigurationType.DEVELOPMENT);
}
2013-03-20 20:33:42 +01:00
@Override
protected void init() {
super.init();
2013-04-06 21:38:18 +02:00
mountPage("welcome", WelcomePage.class);
mountPage("demo", DemoLoginPage.class);
2013-07-25 09:17:33 +02:00
2013-05-20 21:53:13 +02:00
mountPage("recover", PasswordRecoveryPage.class);
mountPage("recover2", PasswordRecoveryCallbackPage.class);
2013-07-25 09:17:33 +02:00
2013-03-21 18:40:09 +01:00
mountPage("logout", LogoutPage.class);
mountPage("error", DisplayExceptionPage.class);
2013-07-25 09:17:33 +02:00
2013-05-19 16:24:56 +02:00
mountPage("next", NextUnreadRedirectPage.class);
2013-04-09 11:10:26 +02:00
2013-03-20 20:33:42 +01:00
setupInjection();
2013-04-13 18:50:38 +02:00
setupSecurity();
2013-03-20 20:33:42 +01:00
getMarkupSettings().setStripWicketTags(true);
getMarkupSettings().setCompressWhitespace(true);
getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
2013-04-14 08:45:24 +02:00
setHeaderResponseDecorator(new IHeaderResponseDecorator() {
@Override
public IHeaderResponse decorate(IHeaderResponse response) {
2013-07-25 09:17:33 +02:00
return new JavaScriptFilteredIntoFooterHeaderResponse(response, "footer-container");
2013-04-14 08:45:24 +02:00
}
});
2013-04-13 18:50:38 +02:00
getRequestCycleListeners().add(new AbstractRequestCycleListener() {
@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
AjaxRequestTarget target = cycle.find(AjaxRequestTarget.class);
2013-07-29 16:42:52 +02:00
// redirect to the error page if ajax request, render error on current page otherwise
2013-07-25 09:17:33 +02:00
RedirectPolicy policy = target == null ? RedirectPolicy.NEVER_REDIRECT : RedirectPolicy.AUTO_REDIRECT;
return new RenderPageRequestHandler(new PageProvider(new DisplayExceptionPage(ex)), policy);
2013-04-13 18:50:38 +02:00
}
});
}
private void setupSecurity() {
2013-07-25 09:17:33 +02:00
getSecuritySettings().setAuthenticationStrategy(new DefaultAuthenticationStrategy("LoggedIn") {
private CookieUtils cookieUtils = null;
@Override
protected CookieUtils getCookieUtils() {
if (cookieUtils == null) {
cookieUtils = new CookieUtils() {
@Override
protected void initializeCookie(Cookie cookie) {
super.initializeCookie(cookie);
cookie.setHttpOnly(true);
2013-03-30 19:06:32 +01:00
}
2013-07-25 09:17:33 +02:00
};
}
return cookieUtils;
}
});
getSecuritySettings().setAuthorizationStrategy(new IAuthorizationStrategy() {
@Override
public <T extends IRequestableComponent> boolean isInstantiationAuthorized(Class<T> componentClass) {
boolean authorized = true;
boolean restricted = componentClass.isAnnotationPresent(SecurityCheck.class);
if (restricted) {
SecurityCheck annotation = componentClass.getAnnotation(SecurityCheck.class);
Roles roles = CommaFeedSession.get().getRoles();
authorized = roles.hasAnyRole(new Roles(annotation.value().name()));
}
return authorized;
}
@Override
public boolean isActionAuthorized(Component component, Action action) {
return true;
}
});
2013-03-20 20:33:42 +01:00
}
@Override
public Class<? extends Page> getHomePage() {
2013-03-21 16:22:58 +01:00
return HomePage.class;
2013-03-20 20:33:42 +01:00
}
protected void setupInjection() {
try {
2013-07-25 09:17:33 +02:00
BeanManager beanManager = (BeanManager) new InitialContext().lookup("java:comp/BeanManager");
new CdiConfiguration(beanManager).setPropagation(ConversationPropagation.NONE).configure(this);
2013-03-20 20:33:42 +01:00
} catch (NamingException e) {
log.warn("Could not locate bean manager. CDI is disabled.");
}
}
@Override
public Session newSession(Request request, Response response) {
return new CommaFeedSession(request);
}
@Override
protected Class<? extends WebPage> getSignInPageClass() {
2013-04-06 21:38:18 +02:00
return WelcomePage.class;
2013-03-20 20:33:42 +01:00
}
@Override
protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() {
return CommaFeedSession.class;
}
2013-03-23 19:46:09 +01:00
public static CommaFeedApplication get() {
return (CommaFeedApplication) Application.get();
}
2013-03-20 20:33:42 +01:00
}