diff --git a/framework/src/play/mvc/Router.java b/framework/src/play/mvc/Router.java index 5171c99f42..9e57f60be2 100755 --- a/framework/src/play/mvc/Router.java +++ b/framework/src/play/mvc/Router.java @@ -323,7 +323,7 @@ public static String reverse(VirtualFile file, boolean absolute) { } if (absolute) { if (!StringUtils.isEmpty(route.host)) { - to = "http://" + route.host + to; + to = (Http.Request.current().secure ? "https://" : "http://") + route.host + to; } else { to = Http.Request.current().getBase() + to; } @@ -502,10 +502,12 @@ public String toString() { } public void absolute() { - if (StringUtils.isEmpty(host)) { - url = Http.Request.current().getBase() + url; - } else { - url = "http://" + host + url; + if (!url.startsWith("http")) { + if (StringUtils.isEmpty(host)) { + url = Http.Request.current().getBase() + url; + } else { + url = (Http.Request.current().secure ? "https://" : "http://") + host + url; + } } } @@ -571,7 +573,7 @@ public void compute() { String p = this.path; this.path = p.substring(p.indexOf("/")); this.host = p.substring(0, p.indexOf("/")); - String pattern = host.replaceAll("\\.","\\\\.").replaceFirst("\\{.*\\}", "(.*)"); + String pattern = host.replaceAll("\\.", "\\\\.").replaceFirst("\\{.*\\}", "(.*)"); Logger.trace("pattern [" + pattern + "]"); Logger.trace("host [" + host + "]"); @@ -580,7 +582,7 @@ public void compute() { if (m.matches()) { if (this.host.contains("{")) { - String name = m.group(1).replace("{", "").replace("}",""); + String name = m.group(1).replace("{", "").replace("}", ""); hostArg = new Arg(); hostArg.name = name; Logger.trace("hostArg name [" + name + "]"); diff --git a/framework/src/play/server/PlayHandler.java b/framework/src/play/server/PlayHandler.java index 16f5e0d444..99e976e257 100644 --- a/framework/src/play/server/PlayHandler.java +++ b/framework/src/play/server/PlayHandler.java @@ -49,6 +49,11 @@ public class PlayHandler extends SimpleChannelUpstreamHandler { private final static String signature = "Play! Framework;" + Play.version + ";" + Play.mode.name().toLowerCase(); + public Request processRequest(Request request) { + return request; + } + + @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { Logger.trace("messageReceived: begin"); @@ -57,7 +62,9 @@ public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Ex if (msg instanceof HttpRequest) { final HttpRequest nettyRequest = (HttpRequest) msg; try { - final Request request = parseRequest(ctx, nettyRequest); + Request request = parseRequest(ctx, nettyRequest); + request = processRequest(request); + final Response response = new Response(); Http.Response.current.set(response); @@ -81,6 +88,7 @@ public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Ex } Logger.trace("messageReceived: end"); } + private static Map staticPathsCache = new HashMap(); public class NettyInvocation extends Invoker.Invocation { diff --git a/framework/src/play/server/ssl/SslPlayHandler.java b/framework/src/play/server/ssl/SslPlayHandler.java index cbada8aef9..c22ec421a8 100644 --- a/framework/src/play/server/ssl/SslPlayHandler.java +++ b/framework/src/play/server/ssl/SslPlayHandler.java @@ -4,6 +4,7 @@ import org.jboss.netty.handler.codec.http.*; import org.jboss.netty.handler.ssl.SslHandler; import play.Logger; +import play.mvc.Http; import play.server.PlayHandler; import play.server.Server; @@ -17,16 +18,23 @@ public class SslPlayHandler extends PlayHandler { public SslPlayHandler() { } + @Override + public Http.Request processRequest(Http.Request request) { + request.secure = true; + return request; + } + + @Override public void channelConnected( ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { - ctx.setAttachment(e.getValue()); - // Get the SslHandler in the current pipeline. - final SslHandler sslHandler = ctx.getPipeline().get(SslHandler.class); - sslHandler.setEnableRenegotiation(false); - // Get notified when SSL handshake is done. - ChannelFuture handshakeFuture = sslHandler.handshake(); - handshakeFuture.addListener(new SslListener()); + ctx.setAttachment(e.getValue()); + // Get the SslHandler in the current pipeline. + final SslHandler sslHandler = ctx.getPipeline().get(SslHandler.class); + sslHandler.setEnableRenegotiation(false); + // Get notified when SSL handshake is done. + ChannelFuture handshakeFuture = sslHandler.handshake(); + handshakeFuture.addListener(new SslListener()); } private static final class SslListener implements ChannelFutureListener {