Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
- Datasets downloaded with Clowder now include DataCite v4 XML files in the output /metadata folder for interoperability purposes.
- Script to clean extractors' tmp files.
- Script for RabbitMQ error queue cleanup.
- Ability to use basic html formatting in the welcome message on the home page. [#51](https://github.com/clowder-framework/clowder/issues/51)

### Changed
- Improved simple test to report all day success.
Expand Down
12 changes: 9 additions & 3 deletions app/controllers/Application.scala
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package controllers

import java.net.URL
import javax.inject.{Inject, Singleton}

import javax.inject.{Inject, Singleton}
import api.Permission
import api.Permission._
import play.api.{Logger, Play, Routes}
import play.api.mvc.Action
import services._
import models.{Event, UUID, User, UserStatus}
import org.owasp.html.Sanitizers
import play.api.Logger
import play.api.libs.concurrent.Execution.Implicits._
import play.api.Play.current
import util.Formatters.sanitizeHTML

import scala.collection.immutable.List
import scala.collection.mutable.ListBuffer
Expand Down Expand Up @@ -212,9 +214,11 @@ class Application @Inject() (files: FileService, collections: CollectionService,
val spacesCount = spaces.count()
val usersCount = users.count()

val sanitezedWelcomeText = sanitizeHTML(AppConfiguration.getWelcomeMessage)

Ok(views.html.index(datasetsCount, filesCount, filesBytes,
collectionsCount, spacesCount, usersCount,
AppConfiguration.getDisplayName, AppConfiguration.getWelcomeMessage))
AppConfiguration.getDisplayName, sanitezedWelcomeText))
}
}
}
Expand All @@ -233,8 +237,10 @@ class Application @Inject() (files: FileService, collections: CollectionService,
val spacesCount = spaces.count()
val usersCount = users.count()

val sanitezedWelcomeText = sanitizeHTML(AppConfiguration.getWelcomeMessage)

Ok(views.html.index(datasetsCount, filesCount, filesBytes, collectionsCount,
spacesCount, usersCount, AppConfiguration.getDisplayName, AppConfiguration.getWelcomeMessage))
spacesCount, usersCount, AppConfiguration.getDisplayName, sanitezedWelcomeText))
}

def email(subject: String, body: String) = UserAction(needActive=false) { implicit request =>
Expand Down
14 changes: 14 additions & 0 deletions app/util/Formatters.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package util
import java.text.SimpleDateFormat
import java.util.Date

import org.owasp.html.Sanitizers
import services.AppConfiguration

/**
* Formatters
*/
Expand Down Expand Up @@ -77,4 +80,15 @@ object Formatters {
val formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX")
formatter.parse(date)
}

/**
* Sanitize text to safely output to web frontend. For example remove any kind of javascript snippets.
* @param unsanitezedText user created text that has not been sanitized
* @return text that has been sanitized
*/
def sanitizeHTML(unsanitezedText: String): String = {
val policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS).and(Sanitizers.IMAGES).and(Sanitizers.BLOCKS).
and(Sanitizers.STYLES).and(Sanitizers.TABLES)
policy.sanitize(AppConfiguration.getWelcomeMessage)
}
}
2 changes: 1 addition & 1 deletion app/views/index.scala.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<div class="row featurette">
<div class="col-md-7">
<h2 class="featurette-heading">Welcome to @displayedName</h2>
<p class="lead">@welcomeMessage</p>
<p class="lead">@Html(welcomeMessage)</p>
</div>
<div class="col-md-5" id="resources-panel-container">
<div class="panel panel-default" id="resources-panel" data-clampedwidth=".col-md-5">
Expand Down
3 changes: 3 additions & 0 deletions project/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ object ApplicationBuild extends Build {

val appDependencies = Seq(
filters,

"com.googlecode.owasp-java-html-sanitizer" % "owasp-java-html-sanitizer" % "20180219.1",

// login
"ws.securesocial" %% "securesocial" % "2.1.4" exclude("org.scala-stm", "scala-stm_2.10.0"),
"com.unboundid" % "unboundid-ldapsdk" % "4.0.1",
Expand Down