Skip to content

Commit 41cdcbd

Browse files
marcospereiradwijnand
authored andcommitted
Migrate to 2.6.0 (#111)
* Migrate to Play 2.6.0 This was done against a local snapshot in order to validate our Migration docs: https://playframework.com/documentation/2.6.x/Migration26 Except some minor details, all the changes here are already documented at the page above. * Remove use of deprecated APIs This is not documented at the migration guide, but the user would be guided by the deprecated messages. * Update to Play RC1 * Remove unnecessary self type * Remove deprecated APIs calls * Remove actor * Update sbt-web plugins * Proper CSP configuration * Fix merge problems * Fix scalacOptions config
1 parent d3d1bdc commit 41cdcbd

55 files changed

Lines changed: 340 additions & 299 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/actors/Actors.scala

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@ package actors
22

33
import java.io.File
44

5-
import akka.actor.{ ActorSystem, ActorRef }
6-
import javax.inject.{Provider, Inject, Singleton}
75
import com.google.inject.AbstractModule
6+
import com.typesafe.config.Config
7+
import javax.inject.{Inject, Provider, Singleton}
88
import models.documentation._
99
import play.api._
10-
import play.api.i18n.{MessagesApi, Lang}
11-
import play.api.libs.concurrent.{AkkaGuiceSupport, Akka}
12-
import scala.collection.JavaConversions._
10+
import play.api.i18n.Lang
11+
import play.api.libs.concurrent.AkkaGuiceSupport
1312

1413
class ActorsModule extends AbstractModule with AkkaGuiceSupport {
1514
def configure() = {
@@ -21,56 +20,55 @@ class ActorsModule extends AbstractModule with AkkaGuiceSupport {
2120
}
2221

2322
@Singleton
24-
class DocumentationRedirectsProvider @Inject() (configuration: Configuration) extends Provider[DocumentationRedirects] {
25-
override def get: DocumentationRedirects = {
26-
configuration.getConfigList("documentation.redirects") match {
27-
case Some(redirectsConfig) => DocumentationRedirects(
28-
redirectsConfig.map { config =>
29-
RedirectPage(
30-
from = config.getString("from").getOrElse(""),
31-
to = config.getString("to").getOrElse("")
32-
)
33-
}
23+
class DocumentationRedirectsProvider @Inject()(configuration: Configuration) extends Provider[DocumentationRedirects] {
24+
override def get: DocumentationRedirects = DocumentationRedirects(
25+
configuration.get[Seq[Config]]("documentation.redirects").map { config =>
26+
RedirectPage(
27+
from = config.getString("from"),
28+
to = config.getString("to")
3429
)
35-
case None => DocumentationRedirects(Seq.empty)
3630
}
37-
}
31+
)
3832
}
3933

4034
@Singleton
4135
class DocumentationConfigProvider @Inject() (environment: Environment, configuration: Configuration) extends Provider[DocumentationConfig] {
4236

43-
lazy val get = loadConfig.getOrElse(DocumentationConfig(
37+
lazy val get: DocumentationConfig = loadConfig.getOrElse(DocumentationConfig(
4438
TranslationConfig(Lang("en"), environment.rootPath, None, "origin", None, None), Nil))
4539

4640
private def loadConfig: Option[DocumentationConfig] = {
4741
for {
48-
docsConfig <- configuration.getConfig("documentation")
49-
path <- docsConfig.getString("path").map(basePath)
50-
mainConfig <- docsConfig.getConfig("main")
42+
docsConfig <- configuration.getOptional[Configuration]("documentation")
43+
path <- docsConfig.getOptional[String]("path").map(basePath)
44+
mainConfig <- docsConfig.getOptional[Configuration]("main")
5145
mainTranslation <- loadTranslationConfig(path, mainConfig)
52-
translations <- docsConfig.getConfigList("translations")
46+
translations <- docsConfig.getOptional[Seq[Config]]("translations")
5347
} yield {
5448
DocumentationConfig(mainTranslation,
5549
translations.toList.collect(Function.unlift(loadTranslationConfig(path, _))))
5650
}
5751
}
5852

53+
private def loadTranslationConfig(base: File, config: Config): Option[TranslationConfig] = {
54+
loadTranslationConfig(base, Configuration(config))
55+
}
56+
5957
private def loadTranslationConfig(base: File, config: Configuration): Option[TranslationConfig] = {
6058
for {
61-
lang <- config.getString("lang")
62-
repo <- config.getString("repo") if verifyTranslationPath(base, repo, lang)
59+
lang <- config.getOptional[String]("lang")
60+
repo <- config.getOptional[String]("repo") if verifyTranslationPath(base, repo, lang)
6361
} yield {
6462
TranslationConfig(
6563
Lang(lang),
6664
new File(base, repo).getCanonicalFile,
67-
config.getString("path"),
68-
config.getString("remote").getOrElse("origin"),
65+
config.getOptional[String]("path"),
66+
config.getOptional[String]("remote").getOrElse("origin"),
6967
for {
70-
file <- config.getString("versionFile")
71-
pattern <- config.getString("versionPattern")
68+
file <- config.getOptional[String]("versionFile")
69+
pattern <- config.getOptional[String]("versionPattern")
7270
} yield MasterVersion(file, pattern.r),
73-
config.getString("gitHubSource")
71+
config.getOptional[String]("gitHubSource")
7472
)
7573
}
7674
}

app/assets/javascripts/munchkin.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
(function () {
2+
var didInit = false;
3+
function initMunchkin() {
4+
if (didInit === false) {
5+
didInit = true;
6+
Munchkin.init('558-NCX-702');
7+
}
8+
}
9+
var s = document.createElement('script');
10+
s.type = 'text/javascript';
11+
s.async = true;
12+
s.src = '//munchkin.marketo.net/munchkin.js';
13+
s.onreadystatechange = function () {
14+
if (this.readyState == 'complete' || this.readyState == 'loaded') {
15+
initMunchkin();
16+
}
17+
};
18+
s.onload = initMunchkin;
19+
document.getElementsByTagName('head')[0].appendChild(s);
20+
})();

app/controllers/Application.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import models._
77
import models.certification.Certification
88
import org.apache.commons.io.IOUtils
99
import play.api._
10-
import play.api.cache.CacheApi
11-
import play.api.i18n.{I18nSupport, Lang, MessagesApi}
10+
import play.api.cache.SyncCacheApi
11+
import play.api.i18n.{I18nSupport, Lang}
1212
import play.api.mvc._
1313
import play.twirl.api.Html
1414
import services.certification.CertificationDao
@@ -21,12 +21,12 @@ import scala.concurrent.{ExecutionContext, Future}
2121
class Application @Inject() (
2222
environment: Environment,
2323
configuration: Configuration,
24-
val messagesApi: MessagesApi,
2524
certificationDao: CertificationDao,
2625
releases: PlayReleases,
2726
exampleProjectsService: PlayExampleProjectsService,
28-
cacheApi: CacheApi
29-
)(implicit ec: ExecutionContext) extends Controller with Common with I18nSupport {
27+
components: ControllerComponents,
28+
cacheApi: SyncCacheApi
29+
)(implicit ec: ExecutionContext, val reverseRouter: documentation.ReverseRouter) extends AbstractController(components) with Common with I18nSupport {
3030

3131
private val VulnerableVersions = Set(
3232
"2.0", "2.0.1", "2.0.2", "2.0.3", "2.0.4", "2.0.5",
@@ -84,7 +84,7 @@ class Application @Inject() (
8484
val selectedPlatform = Platform(platform.orElse(request.headers.get("User-Agent")))
8585
Ok(html.allreleases(releases, selectedPlatform))
8686
}
87-
87+
8888
def changelog = markdownAction("public/markdown/changelog.md", { implicit request =>
8989
views.html.changelog(_)
9090
})

app/controllers/Code.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package controllers
22

33
import javax.inject.Inject
4-
import play.api.mvc._
5-
import play.api.libs.concurrent.Execution.Implicits._
4+
5+
import play.api.mvc.{AbstractController, ControllerComponents}
66
import services.github.ContributorsSummariser
77

8-
class Code @Inject() (contributorsSummariser: ContributorsSummariser) extends Controller {
8+
import scala.concurrent.ExecutionContext
9+
10+
class Code @Inject() (
11+
contributorsSummariser: ContributorsSummariser,
12+
components: ControllerComponents)(implicit executionContext: ExecutionContext, reverseRouter: documentation.ReverseRouter) extends AbstractController(components) {
913

1014
def index = Action.async { implicit req =>
1115
contributorsSummariser.fetchContributors.map { contributors =>

app/controllers/Common.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package controllers
22

33
import play.api.mvc._
4+
import play.api.mvc.Results._
45

56
trait Common {
6-
self: Controller =>
7-
87
def notFound(implicit request: RequestHeader) = NotFound(views.html.notfound())
8+
9+
implicit def reverseRouter: documentation.ReverseRouter
910
}

app/controllers/Modules.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ import play.api.libs.json._
66
import services.modules._
77
import models.modules._
88

9+
import scala.concurrent.ExecutionContext
10+
911
@Singleton
1012
class Modules @Inject() (
1113
modulesLookup: ModulesLookup,
12-
moduleDao: ModuleDao) extends Controller {
14+
moduleDao: ModuleDao,
15+
components: ControllerComponents)(implicit ec: ExecutionContext, reverseRouter: documentation.ReverseRouter) extends AbstractController(components) {
1316

1417
def index(keyword: String) = Action { implicit request =>
1518
render {

app/controllers/Outreachy.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package controllers
22

3-
import play.api.mvc._
3+
import javax.inject.Inject
4+
5+
import play.api.mvc.{ AbstractController, ControllerComponents }
46

57
/**
68
* The outreachy controller
79
*/
8-
class Outreachy extends Controller {
10+
class Outreachy @Inject() (components: ControllerComponents)(implicit reverseRouter: documentation.ReverseRouter) extends AbstractController(components) {
911

1012
def outreachy = Action(Redirect(routes.Outreachy.round15()))
1113

app/controllers/Security.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package controllers
22

3-
import javax.inject.{ Inject, Singleton }
4-
import play.api.mvc.{Action, Controller}
5-
import play.api.{Environment, Play}
3+
import javax.inject.{Inject, Singleton}
4+
5+
import play.api.mvc.{BaseController, ControllerComponents}
6+
import play.api.Environment
67
import play.twirl.api.Html
78
import utils.Markdown
89
import org.apache.commons.io.IOUtils
910
import java.io.File
1011

1112
@Singleton
12-
class Security @Inject() (environment: Environment) extends Controller with Common {
13+
class Security @Inject() (environment: Environment, val controllerComponents: ControllerComponents)
14+
(implicit val reverseRouter: documentation.ReverseRouter) extends BaseController with Common {
1315

1416
def vulnerability(name: String) = Action { implicit req =>
1517
val path = "public/markdown/vulnerabilities/" + name
@@ -32,7 +34,7 @@ class Security @Inject() (environment: Environment) extends Controller with Comm
3234
}
3335

3436
def index = Action { implicit req =>
35-
Ok(views.html.vulnerabilities(req)).withHeaders(CACHE_CONTROL -> "max-age=1000")
37+
Ok(views.html.vulnerabilities()).withHeaders(CACHE_CONTROL -> "max-age=1000")
3638
}
3739

3840
}

app/controllers/documentation/DocumentationController.scala

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@ import org.joda.time.format.DateTimeFormat
1212
import play.api.http.HttpEntity
1313
import play.api.i18n.{MessagesApi, Lang}
1414
import play.api.mvc._
15-
import scala.concurrent.Future
15+
import scala.concurrent.{ ExecutionContext, Future }
1616
import scala.concurrent.duration._
1717

18-
import play.api.libs.MimeTypes
19-
import play.api.libs.concurrent.Execution.Implicits.defaultContext
2018

2119
import scala.reflect.ClassTag
2220

@@ -25,9 +23,8 @@ class DocumentationController @Inject()(
2523
messages: MessagesApi,
2624
documentationRedirects: DocumentationRedirects,
2725
@Named("documentation-actor") documentationActor: ActorRef,
28-
releases: PlayReleases) extends Controller {
29-
30-
import DocumentationController._
26+
releases: PlayReleases,
27+
components: ControllerComponents)(implicit executionContext: ExecutionContext, reverseRouter: ReverseRouter) extends AbstractController(components) {
3128

3229
private implicit val timeout = Timeout(5.seconds)
3330

@@ -114,7 +111,7 @@ class DocumentationController @Inject()(
114111
//
115112

116113
def v1Home(lang: Option[Lang], version: String) = Action {
117-
Redirect(ReverseRouter.page(lang, version, "home"))
114+
Redirect(reverseRouter.page(lang, version, "home"))
118115
}
119116

120117
def v1Page(lang: Option[Lang], v: String, page: String) = VersionAction(v) { (actor, version) => implicit req =>
@@ -156,7 +153,7 @@ class DocumentationController @Inject()(
156153
//
157154

158155
def home(lang: Option[Lang], version: String) = Action {
159-
Redirect(ReverseRouter.page(lang, version, "Home"))
156+
Redirect(reverseRouter.page(lang, version))
160157
}
161158

162159
def page(lang: Option[Lang], v: String, page: String) = VersionAction(v) { (actor, version) => implicit req =>
@@ -170,7 +167,7 @@ class DocumentationController @Inject()(
170167
documentationRedirects.redirectFor(page) match {
171168
case Some(redirect) =>
172169
pageExists(version, redirect.to).map {
173-
case Some(_) => Results.MovedPermanently(ReverseRouter.page(lang, v, redirect.to))
170+
case Some(_) => Results.MovedPermanently(reverseRouter.page(lang, v, redirect.to))
174171
case None => Results.MovedPermanently(redirect.to)
175172
}
176173
case None =>
@@ -192,14 +189,14 @@ class DocumentationController @Inject()(
192189

193190
// -- API
194191
def v1Api(lang: Option[Lang], version: String) = Action {
195-
Redirect(ReverseRouter.api(version, "index.html"))
192+
Redirect(reverseRouter.api(version, "index.html"))
196193
}
197194

198195
def api(lang: Option[Lang], v: String, path: String) =
199196
ResourceAction(v, path, (version, etag) => LoadApi(version, etag, path))
200197

201198
def apiRedirect(lang: Option[Lang], version: String, path: String) =
202-
Action(MovedPermanently(ReverseRouter.api(version, path)))
199+
Action(MovedPermanently(reverseRouter.api(version, path)))
203200

204201
// -- Latest
205202

@@ -229,7 +226,7 @@ class DocumentationController @Inject()(
229226
}
230227
}
231228
version.map { v =>
232-
val url = ReverseRouter.home(selectedLang, v.name)
229+
val url = reverseRouter.home(selectedLang, v.name)
233230
Redirect(s"$url/$path").withHeaders(VARY -> ACCEPT_LANGUAGE)
234231
}.getOrElse(pageNotFound(summary.translationContext, path, Nil))
235232
}
@@ -259,7 +256,7 @@ class DocumentationController @Inject()(
259256
} else {
260257
Seq(CONTENT_DISPOSITION -> s"""attachment; filename="$fileName"""")
261258
}
262-
val entity = HttpEntity.Streamed(source, Some(size), Some(MimeTypes.forFileName(fileName).getOrElse(BINARY)))
259+
val entity = HttpEntity.Streamed(source, Some(size), Some(fileMimeTypes.forFileName(fileName).getOrElse(BINARY)))
263260
cacheable(Ok.sendEntity(entity).withHeaders(contentDisposition: _*), cacheId)
264261
}
265262
}
@@ -284,17 +281,17 @@ class DocumentationController @Inject()(
284281
VersionAction(v) { (actor, version) => implicit req =>
285282
actorRequest(actor, page, msg(lang, version, etag(req), page)) {
286283
case PageExists(true, cacheId) =>
287-
cacheable(TemporaryRedirect(ReverseRouter.page(lang, version.name, page)), cacheId)
284+
cacheable(TemporaryRedirect(reverseRouter.page(lang, version.name, page)), cacheId)
288285
case PageExists(false, cacheId) =>
289-
cacheable(TemporaryRedirect(ReverseRouter.page(lang, version.name, home)), cacheId)
286+
cacheable(TemporaryRedirect(reverseRouter.page(lang, version.name, home)), cacheId)
290287
}
291288
}
292289
}
293290

294291
def withLangHeaders(result: Result, page: String, context: TranslationContext)(implicit req: RequestHeader) = {
295292
val linkHeader = context.alternatives.filterNot(_.lang == context.lang).collect {
296293
case AlternateTranslation(l, isDefault, Some(v)) =>
297-
val url = Call("GET", ReverseRouter.page(Some(l).filterNot(_ => isDefault), v.name, page)).absoluteURL()
294+
val url = Call("GET", reverseRouter.page(Some(l).filterNot(_ => isDefault), v.name, page)).absoluteURL()
298295
s"""<$url>; rel="alternate"; hreflang="${l.code}""""
299296
}.mkString(", ")
300297
if (linkHeader.nonEmpty) {

app/controllers/documentation/Router.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,6 @@ class Router @Inject() (
7474
}
7575
}
7676

77-
object ReverseRouter extends ReverseRouter(new Provider[Router] {
78-
def get = play.api.Play.current.injector.instanceOf[Router]
79-
})
80-
8177
@Singleton
8278
class ReverseRouter @Inject() (routerProvider: Provider[Router]) {
8379
private def router: Router = routerProvider.get

0 commit comments

Comments
 (0)