From 0d1234ca4b670d32274370da189223d7f0da7241 Mon Sep 17 00:00:00 2001 From: Athou Date: Fri, 16 Aug 2013 21:10:25 +0200 Subject: [PATCH] use protocol from the publicUrl when rendering urls --- .../frontend/CommaFeedApplication.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/commafeed/frontend/CommaFeedApplication.java b/src/main/java/com/commafeed/frontend/CommaFeedApplication.java index 3ae5d96c..890ba37f 100644 --- a/src/main/java/com/commafeed/frontend/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/frontend/CommaFeedApplication.java @@ -1,14 +1,17 @@ package com.commafeed.frontend; import javax.enterprise.inject.spi.BeanManager; +import javax.inject.Inject; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.http.Cookie; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.apache.wicket.Application; import org.apache.wicket.Component; +import org.apache.wicket.IRequestCycleProvider; import org.apache.wicket.Page; import org.apache.wicket.RuntimeConfigurationType; import org.apache.wicket.Session; @@ -20,6 +23,7 @@ import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSessio 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.CdiContainer; import org.apache.wicket.cdi.ConversationPropagation; import org.apache.wicket.core.request.handler.PageProvider; import org.apache.wicket.core.request.handler.RenderPageRequestHandler; @@ -32,12 +36,15 @@ import org.apache.wicket.request.IRequestHandler; import org.apache.wicket.request.Request; import org.apache.wicket.request.Response; import org.apache.wicket.request.Url; +import org.apache.wicket.request.UrlRenderer; import org.apache.wicket.request.component.IRequestableComponent; import org.apache.wicket.request.cycle.AbstractRequestCycleListener; import org.apache.wicket.request.cycle.RequestCycle; +import org.apache.wicket.request.cycle.RequestCycleContext; import org.apache.wicket.util.cookies.CookieUtils; import com.commafeed.backend.services.ApplicationPropertiesService; +import com.commafeed.backend.services.ApplicationSettingsService; import com.commafeed.frontend.pages.DemoLoginPage; import com.commafeed.frontend.pages.HomePage; import com.commafeed.frontend.pages.LogoutPage; @@ -51,6 +58,9 @@ import com.commafeed.frontend.utils.exception.DisplayExceptionPage; @Slf4j public class CommaFeedApplication extends AuthenticatedWebApplication { + @Inject + ApplicationSettingsService applicationSettingsService; + public CommaFeedApplication() { super(); boolean prod = ApplicationPropertiesService.get().isProduction(); @@ -60,6 +70,8 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { @Override protected void init() { super.init(); + setupInjection(); + setupSecurity(); mountPage("welcome", WelcomePage.class); mountPage("demo", DemoLoginPage.class); @@ -72,9 +84,6 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { mountPage("next", NextUnreadRedirectPage.class); - setupInjection(); - setupSecurity(); - getMarkupSettings().setStripWicketTags(true); getMarkupSettings().setCompressWhitespace(true); getMarkupSettings().setDefaultMarkupEncoding("UTF-8"); @@ -95,6 +104,27 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { return new RenderPageRequestHandler(new PageProvider(new DisplayExceptionPage(ex)), policy); } }); + + setRequestCycleProvider(new IRequestCycleProvider() { + @Override + public RequestCycle get(RequestCycleContext context) { + return new RequestCycle(context) { + @Override + protected UrlRenderer newUrlRenderer() { + return new UrlRenderer(getRequest()) { + @Override + public String renderUrl(Url url) { + String publicUrl = applicationSettingsService.get().getPublicUrl(); + if (StringUtils.isNotBlank(publicUrl)) { + url.setProtocol(Url.parse(publicUrl).getProtocol()); + } + return super.renderUrl(url); + } + }; + } + }; + } + }); } private void setupSecurity() { @@ -147,7 +177,8 @@ public class CommaFeedApplication extends AuthenticatedWebApplication { protected void setupInjection() { try { BeanManager beanManager = (BeanManager) new InitialContext().lookup("java:comp/BeanManager"); - new CdiConfiguration(beanManager).setPropagation(ConversationPropagation.NONE).configure(this); + CdiContainer container = new CdiConfiguration(beanManager).setPropagation(ConversationPropagation.NONE).configure(this); + container.getNonContextualManager().inject(this); } catch (NamingException e) { log.warn("Could not locate bean manager. CDI is disabled."); }