Skip to content

Commit 51d3943

Browse files
authored
Merge pull request #483 from mkurz/fix-play-java-streaming-example
play-java-streaming-example: Add csp nonce
2 parents 3dc6c39 + 368ac27 commit 51d3943

File tree

11 files changed

+56
-44
lines changed

11 files changed

+56
-44
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package controllers;
2+
3+
import javax.inject.Inject;
4+
5+
import play.routing.*;
6+
7+
import play.mvc.Controller;
8+
import play.mvc.Http;
9+
import play.mvc.Result;
10+
11+
public class HomeController extends Controller {
12+
13+
public Result index(final Http.Request request) {
14+
return ok(views.html.index.render(request));
15+
}
16+
17+
public Result javascriptRoutes(final Http.Request request) {
18+
return ok(
19+
JavaScriptReverseRouter.create(
20+
"jsRoutes",
21+
"jQuery.ajax",
22+
request.host(),
23+
routes.javascript.JavaEventSourceController.streamClock()
24+
)
25+
).as("text/javascript");
26+
}
27+
}

play-java-streaming-example/app/controllers/HomeController.scala

Lines changed: 0 additions & 21 deletions
This file was deleted.

play-java-streaming-example/app/controllers/JavaCometController.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,23 @@
44
import play.mvc.Controller;
55
import play.mvc.Http;
66
import play.mvc.Result;
7+
import views.html.helper.CSPNonce;
78

89
import javax.inject.Singleton;
910

1011
@Singleton
1112
public class JavaCometController extends Controller implements JavaTicker {
1213

13-
public Result index() {
14-
return ok(views.html.javacomet.render());
14+
public Result index(final Http.Request request) {
15+
return ok(views.html.javacomet.render(request));
1516
}
1617

17-
public Result streamClock() {
18-
return ok().chunked(getStringSource().via(Comet.string("parent.clockChanged"))).as(Http.MimeTypes.HTML);
18+
public Result streamClock(final Http.Request request) {
19+
return ok().chunked(getStringSource().via(Comet.string("parent.clockChanged", CSPNonce.apply(request.asScala())))).as(Http.MimeTypes.HTML);
1920
}
2021

21-
public Result jsonClock() {
22-
return ok().chunked(getJsonSource().via(Comet.json("parent.clockChanged"))).as(Http.MimeTypes.HTML);
22+
public Result jsonClock(final Http.Request request) {
23+
return ok().chunked(getJsonSource().via(Comet.json("parent.clockChanged", CSPNonce.apply(request.asScala())))).as(Http.MimeTypes.HTML);
2324
}
2425

2526
}

play-java-streaming-example/app/controllers/JavaEventSourceController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
@Singleton
1212
public class JavaEventSourceController extends Controller implements JavaTicker {
1313

14-
public Result index() {
15-
return ok(views.html.javaeventsource.render());
14+
public Result index(final Http.Request request) {
15+
return ok(views.html.javaeventsource.render(request));
1616
}
1717

1818
public Result streamClock() {

play-java-streaming-example/app/views/index.scala.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@()
1+
@()(implicit request: JRequestHeader)
22

33
@main {
44

play-java-streaming-example/app/views/javacomet.scala.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@()
1+
@()(implicit request: JRequestHeader)
22

33
@main {
44

@@ -10,8 +10,8 @@ <h1 id="clock"></h1>
1010
Clock events are pushed from the Server using a Comet connection.
1111
</p>
1212

13-
<script src="@routes.Assets.at("javascripts/comet.js")"></script>
13+
<script @{CSPNonce.attr} src="@routes.Assets.at("javascripts/comet.js")"></script>
1414

15-
<iframe id="comet" src="@routes.JavaCometController.streamClock().unique()"></iframe>
15+
<iframe id="comet" hidden src="@routes.JavaCometController.streamClock().unique()"></iframe>
1616

1717
}

play-java-streaming-example/app/views/javaeventsource.scala.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@()
1+
@()(implicit request: JRequestHeader)
22

33
@main {
44
<h1>Server Sent Event clock</h1>
@@ -9,5 +9,5 @@ <h1 id="clock"></h1>
99
Clock events are pushed from the Server using a Server Sent Event connection.
1010
</p>
1111

12-
<script src="@routes.Assets.at("javascripts/eventsource.js")"></script>
12+
<script @{CSPNonce.attr} src="@routes.Assets.at("javascripts/eventsource.js")"></script>
1313
}

play-java-streaming-example/app/views/main.scala.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@(content: Html)
1+
@(content: Html)(implicit request: play.api.mvc.RequestHeader)
22

33
<!DOCTYPE html>
44

@@ -7,8 +7,8 @@
77
<title>EventSource clock</title>
88
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
99
<link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
10-
<script src="@routes.Assets.at("javascripts/jquery-3.2.0.slim.js")" type="text/javascript"></script>
11-
<script type="text/javascript" src="@routes.HomeController.javascriptRoutes"></script>
10+
<script @{CSPNonce.attr} src="@routes.Assets.at("javascripts/jquery-3.2.0.slim.js")" type="text/javascript"></script>
11+
<script @{CSPNonce.attr} type="text/javascript" src="@routes.HomeController.javascriptRoutes()"></script>
1212
</head>
1313
<body>
1414
@content

play-java-streaming-example/build.sbt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,8 @@ javacOptions ++= Seq(
1616
"-Xlint:deprecation",
1717
"-Werror"
1818
)
19+
20+
TwirlKeys.templateImports ++= Seq(
21+
"play.mvc.Http.{ RequestHeader => JRequestHeader }",
22+
"views.html.helper.CSPNonce"
23+
)

play-java-streaming-example/conf/routes

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
# Home page
66

7-
GET / controllers.HomeController.index()
7+
GET / controllers.HomeController.index(request: Request)
88

9-
GET /java/comet controllers.JavaCometController.index()
10-
GET /java/comet/liveClock controllers.JavaCometController.streamClock()
9+
GET /java/comet controllers.JavaCometController.index(request: Request)
10+
GET /java/comet/liveClock controllers.JavaCometController.streamClock(request: Request)
1111

12-
GET /java/eventSource controllers.JavaEventSourceController.index()
12+
GET /java/eventSource controllers.JavaEventSourceController.index(request: Request)
1313
GET /java/eventSource/liveClock controllers.JavaEventSourceController.streamClock()
1414

15-
GET /javascriptRoutes controllers.HomeController.javascriptRoutes
15+
GET /javascriptRoutes controllers.HomeController.javascriptRoutes(request: Request)
1616

1717
# Map static resources from the /public folder to the /assets URL path
1818
GET /assets/*file controllers.Assets.at(path="/public", file)

0 commit comments

Comments
 (0)