diff --git a/adapter/adapter-api/pom.xml b/adapter/adapter-api/pom.xml
index 1c40d5f34..c28940bce 100644
--- a/adapter/adapter-api/pom.xml
+++ b/adapter/adapter-api/pom.xml
@@ -1,74 +1,74 @@
4.0.0
SHRINE Adapter Client API
shrine-adapter-client-api
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-client
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
diff --git a/adapter/adapter-service/pom.xml b/adapter/adapter-service/pom.xml
index c8fdc26ff..594aeed77 100644
--- a/adapter/adapter-service/pom.xml
+++ b/adapter/adapter-service/pom.xml
@@ -1,180 +1,180 @@
4.0.0
SHRINE Adapter
shrine-adapter-service
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
org.squeryl
squeryl_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-data-commons
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-config
${project.version}
com.typesafe.slick
slick_2.11
${slick-version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
mysql
mysql-connector-java
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
net.shrine
shrine-util
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
diff --git a/apps/dashboard-app/pom.xml b/apps/dashboard-app/pom.xml
index 7d67fa298..67f669a27 100644
--- a/apps/dashboard-app/pom.xml
+++ b/apps/dashboard-app/pom.xml
@@ -1,200 +1,200 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
dashboard-app
- 1.22.6
+ 1.22.8
Dashboard App
jar
net.alchim31.maven
scala-maven-plugin
com.github.eirslett
frontend-maven-plugin
0.0.23
src/main/js
install node and npm
install-node-and-npm
v0.10.33
2.7.4
npm install
npm
generate-resources
install
bower install
bower
install
grunt default
grunt
--no-color
log4j
log4j
io.spray
spray-routing_2.11
${spray-version}
io.spray
spray-servlet_2.11
${spray-version}
io.spray
spray-util_2.11
${spray-version}
io.spray
spray-testkit_2.11
${spray-version}
test
com.typesafe.akka
akka-actor_2.11
${akka-version}
com.typesafe.akka
akka-slf4j_2.11
${akka-version}
com.typesafe.akka
akka-testkit_2.11
${akka-testkit-version}
test
org.json4s
json4s-native_2.11
${json4s-version}
com.typesafe.slick
slick_2.11
${slick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
com.h2database
h2
${h2-version}
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-data-commons
${project.version}
mysql
mysql-connector-java
${mysql-version}
io.jsonwebtoken
jjwt
0.6.0
net.sourceforge.jtds
jtds
1.3.1
net.shrine
shrine-adapter-client-api
${project.version}
com.typesafe
config
${typesafe-config-version}
diff --git a/apps/dashboard-app/src/main/scala/net/shrine/dashboard/DashboardService.scala b/apps/dashboard-app/src/main/scala/net/shrine/dashboard/DashboardService.scala
index 36f83c3f9..df3ad7b26 100644
--- a/apps/dashboard-app/src/main/scala/net/shrine/dashboard/DashboardService.scala
+++ b/apps/dashboard-app/src/main/scala/net/shrine/dashboard/DashboardService.scala
@@ -1,527 +1,554 @@
package net.shrine.dashboard
import akka.actor.Actor
import akka.event.Logging
import net.shrine.authentication.UserAuthenticator
import net.shrine.authorization.steward.OutboundUser
import net.shrine.config.ConfigExtensions
import net.shrine.crypto.{BouncyKeyStoreCollection, KeyStoreDescriptorParser, UtilHasher}
import net.shrine.dashboard.httpclient.HttpClientDirectives.{forwardUnmatchedPath, requestUriThenRoute}
import net.shrine.dashboard.jwtauth.ShrineJwtAuthenticator
import net.shrine.i2b2.protocol.pm.User
import net.shrine.log.Loggable
-import net.shrine.problem.{ProblemDigest, Problems}
+import net.shrine.problem.{AbstractProblem, ProblemDigest, ProblemSources, Problems}
import net.shrine.serialization.NodeSeqSerializer
import net.shrine.source.ConfigSource
import net.shrine.spray._
import net.shrine.status.protocol.{Config => StatusProtocolConfig}
import net.shrine.util.SingleHubModel
import org.json4s.native.JsonMethods.{parse => json4sParse}
import org.json4s.{DefaultFormats, Formats}
import shapeless.HNil
import spray.http.{HttpRequest, HttpResponse, StatusCodes, Uri}
import spray.httpx.Json4sSupport
import spray.routing._
import spray.routing.directives.LogEntry
import scala.collection.immutable.Iterable
import scala.concurrent.ExecutionContext.Implicits.global
+import scala.util.{Failure, Success, Try}
/**
* Mixes the DashboardService trait with an Akka Actor to provide the actual service.
*/
class DashboardServiceActor extends Actor with DashboardService {
// the HttpService trait defines only one abstract member, which
// connects the services environment to the enclosing actor or test
def actorRefFactory = context
// this actor only runs our route, but you could add
// other things here, like request stream processing
// or timeout handling
def receive = runRoute(route)
}
/**
* A web service that provides the Dashboard endpoints. It is a trait to support testing independent of Akka.
*/
trait DashboardService extends HttpService with Loggable {
val userAuthenticator = UserAuthenticator(ConfigSource.config)
//don't need to do anything special for unauthorized users, but they do need access to a static form.
lazy val route:Route = gruntWatchCorsSupport {
redirectToIndex ~ staticResources ~ makeTrouble ~ about ~ authenticatedInBrowser ~ authenticatedDashboard ~ post {
// Chicken and egg problem; Can't check status of certs validation between sites if you need valid certs to exchange messages
pathPrefix("status")
pathPrefix("verifySignature")
verifySignature
}
}
/** logs the request method, uri and response at info level */
def logEntryForRequestResponse(req: HttpRequest): Any => Option[LogEntry] = {
case res: HttpResponse => Some(LogEntry(s"\n Request: $req\n Response: $res", Logging.InfoLevel))
case _ => None // other kind of responses
}
/** logs just the request method, uri and response status at info level */
def logEntryForRequest(req: HttpRequest): Any => Option[LogEntry] = {
case res: HttpResponse => Some(LogEntry(s"\n Request: $req\n Response status: ${res.status}", Logging.InfoLevel))
case _ => None // other kind of responses
}
def authenticatedInBrowser: Route = pathPrefixTest("user"|"admin"|"toDashboard") {
logRequestResponse(logEntryForRequestResponse _) { //logging is controlled by Akka's config, slf4j, and log4j config
reportIfFailedToAuthenticate {
authenticate(userAuthenticator.basicUserAuthenticator) { user =>
pathPrefix("user") {
userRoute(user)
} ~
pathPrefix("admin") {
adminRoute(user)
} ~
pathPrefix("toDashboard") {
toDashboardRoute(user)
}
}
}
}
}
val reportIfFailedToAuthenticate = routeRouteResponse {
case Rejected(List(AuthenticationFailedRejection(_,_))) =>
complete("AuthenticationFailed")
}
def authenticatedDashboard:Route = pathPrefix("fromDashboard") {
logRequestResponse(logEntryForRequestResponse _) { //logging is controlled by Akka's config, slf4j, and log4j config
get { //all remote dashboard calls are gets.
authenticate(ShrineJwtAuthenticator.authenticate) { user =>
info(s"Sucessfully authenticated user `$user`")
adminRoute(user)
}
}
}
}
def makeTrouble = pathPrefix("makeTrouble") {
complete(throw new IllegalStateException("fake trouble"))
}
lazy val redirectToIndex = pathEnd {
redirect("shrine-dashboard/client/index.html", StatusCodes.PermanentRedirect) //todo pick up "shrine-dashboard" programatically
} ~
( path("index.html") | pathSingleSlash) {
redirect("client/index.html", StatusCodes.PermanentRedirect)
}
lazy val staticResources = pathPrefix("client") {
pathEnd {
redirect("client/index.html", StatusCodes.PermanentRedirect)
} ~
pathSingleSlash {
redirect("index.html", StatusCodes.PermanentRedirect)
} ~ {
getFromResourceDirectory("client")
}
}
lazy val about = pathPrefix("about") {
complete("Nothing here yet") //todo
}
def userRoute(user:User):Route = get {
pathPrefix("whoami") {
complete(OutboundUser.createFromUser(user))
}
}
//todo check that this an admin.
def adminRoute(user:User):Route = get {
pathPrefix("happy") {
val happyBaseUrl: String = ConfigSource.config.getString("shrine.dashboard.happyBaseUrl")
forwardUnmatchedPath(happyBaseUrl)
} ~
pathPrefix("messWithHappyVersion") { //todo is this used?
val happyBaseUrl: String = ConfigSource.config.getString("shrine.dashboard.happyBaseUrl")
def pullClasspathFromConfig(httpResponse:HttpResponse,uri:Uri):Route = {
ctx => {
val result = httpResponse.entity.asString
ctx.complete(s"Got '$result' from $uri")
}
}
requestUriThenRoute(happyBaseUrl+"/version",pullClasspathFromConfig)
} ~
pathPrefix("ping") { complete("pong") }~
pathPrefix("status") { statusRoute(user) }
}
//Manually test this by running a curl command
//curl -k -w "\n%{response_code}\n" -u dave:kablam "https://shrine-dev1.catalyst:6443/shrine-dashboard/toDashboard/shrine-dev2.catalyst/ping"
/**
* Forward a request from this dashboard to a remote dashboard
*/
def toDashboardRoute(user:User):Route = get {
pathPrefix(Segment) { dnsName =>
import scala.collection.JavaConversions._
- val urlToParse: String = KeyStoreInfo.keyStoreDescriptor.trustModel match {
- case SingleHubModel(false) => ConfigSource.config.getString("shrine.queryEntryPoint.broadcasterServiceEndpoint.url")
- case _ => ConfigSource.config.getObject("shrine.hub.downstreamNodes").values.head.unwrapped.toString
+ // Check that it makes sense to call toDashboard
+ KeyStoreInfo.keyStoreDescriptor.trustModel match {
+ case SingleHubModel(false) =>
+ warn("toDashboard route called on a non-hub node, returning Forbidden")
+ complete(StatusCodes.Forbidden)
+ case _ =>
+ ConfigSource.config.getObject("shrine.hub.downstreamNodes")
+ .values
+ .map(cv => Try(new java.net.URL(cv.unwrapped().toString)) match {
+ case Failure(exception) =>
+ MalformedURLProblem(exception, cv.unwrapped().toString)
+ throw exception
+ case Success(goodUrl) => goodUrl
+ })
+ .find(_.getHost == dnsName) match {
+ case None =>
+ warn(s"Could not find a downstream node matching the requested host `$dnsName`, returning NotFound")
+ complete(StatusCodes.NotFound)
+ case Some(downstreamUrl) =>
+ val remoteDashboardPathPrefix = downstreamUrl.getPath
+ .replaceFirst("shrine/rest/adapter/requests", "shrine-dashboard/fromDashboard") // I don't think this needs to be configurable
+ val port = if (downstreamUrl.getPort == -1)
+ downstreamUrl.getDefaultPort
+ else
+ downstreamUrl.getPort
+
+ val baseUrl = s"${downstreamUrl.getProtocol}://$dnsName:$port$remoteDashboardPathPrefix"
+
+ info(s"toDashboardRoute: BaseURL: $baseUrl")
+ forwardUnmatchedPath(baseUrl,Some(ShrineJwtAuthenticator.createOAuthCredentials(user, dnsName)))
+ }
}
+ }
+ }
- val remoteDashboardPort = urlToParse.split(':')(2).split('/')(0) // TODO: Do ports vary between sites?
- val remoteDashboardProtocol = urlToParse.split("://")(0)
- val remoteDashboardPathPrefix = "shrine-dashboard/fromDashboard" // I don't think this needs to be configurable
+ case class MalformedURLProblem(malformattedURLException: Throwable, malformattedURL: String) extends AbstractProblem(ProblemSources.Commons) {
+ override val throwable = Some(malformattedURLException)
- val baseUrl = s"$remoteDashboardProtocol://$dnsName:$remoteDashboardPort/$remoteDashboardPathPrefix"
+ override def summary: String = s"Encountered a malformatted url `$malformattedURL` while parsing urls from downstream nodes"
- forwardUnmatchedPath(baseUrl,Some(ShrineJwtAuthenticator.createOAuthCredentials(user, dnsName)))
- }
+ override def description: String = description
}
-
def statusRoute(user:User):Route = get {
val( adapter , hub , i2b2 , keystore , optionalParts , qep , summary ) =
("adapter", "hub", "i2b2", "keystore", "optionalParts", "qep", "summary")
pathPrefix("classpath") { getClasspath }~
pathPrefix("config") { getConfig }~
pathPrefix("problems") { getProblems }~
pathPrefix(adapter) { getFromSubService(adapter) }~
pathPrefix(hub) { getFromSubService(hub) }~
pathPrefix(i2b2) { getFromSubService(i2b2) }~
pathPrefix(keystore) { getFromSubService(keystore) }~
pathPrefix(optionalParts) { getFromSubService(optionalParts) }~
pathPrefix(qep) { getFromSubService(qep) }~
pathPrefix(summary) { getFromSubService(summary) }
}
val statusBaseUrl = ConfigSource.config.getString("shrine.dashboard.statusBaseUrl")
// TODO: Move this over to Status API?
lazy val verifySignature:Route = {
formField("sha256".as[String].?) { sha256: Option[String] =>
val response = sha256.map(s => KeyStoreInfo.hasher.handleSig(s))
implicit val format = ShaResponse.json4sFormats
response match {
case None => complete(StatusCodes.BadRequest)
case Some(sh@ShaResponse(ShaResponse.badFormat, _)) => complete(StatusCodes.BadRequest -> sh)
case Some(sh@ShaResponse(_, false)) => complete(StatusCodes.NotFound -> sh)
case Some(sh@ShaResponse(_, true)) => complete(StatusCodes.OK -> sh)
}
}
}
-
lazy val getConfig:Route = {
def completeConfigRoute(httpResponse:HttpResponse,uri:Uri):Route = {
ctx => {
val config = ParsedConfig(httpResponse.entity.asString)
ctx.complete(
ShrineConfig(config)
)
}
}
requestUriThenRoute(statusBaseUrl + "/config", completeConfigRoute)
}
lazy val getClasspath:Route = {
def pullClasspathFromConfig(httpResponse:HttpResponse,uri:Uri):Route = {
ctx => {
val result = httpResponse.entity.asString
val shrineConfig = ShrineConfig(ParsedConfig(result))
ctx.complete(shrineConfig)
}
}
requestUriThenRoute(statusBaseUrl + "/config",pullClasspathFromConfig)
}
def getFromSubService(key: String):Route = {
requestUriThenRoute(s"$statusBaseUrl/$key")
}
// table based view, can see N problems at a time. Front end sends how many problems that they want
// to skip, and it will take N the 'nearest N' ie with n = 20, 0-19 -> 20, 20-39 -> 20-40
lazy val getProblems:Route = {
def floorMod(x: Int, y: Int) = {
x - (x % y)
}
val db = Problems.DatabaseConnector
// Intellij loudly complains if you use parameters instead of chained parameter calls.
// ¯\_(ツ)_/¯
- parameter("offset".as[Int].?(0)) {(offsetPreMod:Int) => {
+ parameter("offset".as[Int].?(0)) {(offsetPreMod:Int) =>
parameter("n".as[Int].?(20)) {(nPreMax:Int) =>
parameter("epoch".as[Long].?) {(epoch:Option[Long]) =>
val n = Math.max(0, nPreMax)
val moddedOffset = floorMod(Math.max(0, offsetPreMod), n)
val query = for {
result <- db.IO.sizeAndProblemDigest(n, moddedOffset)
} yield (result._2, floorMod(Math.max(0, moddedOffset), n), n, result._1)
val query2 = for {
dateOffset <- db.IO.findIndexOfDate(epoch.getOrElse(0))
moddedOffset = floorMod(dateOffset, n)
result <- db.IO.sizeAndProblemDigest(n, moddedOffset)
} yield (result._2, moddedOffset, n, result._1)
val queryReal = if (epoch.isEmpty) query else query2
val tupled = db.runBlocking(queryReal)
val response: ProblemResponse = ProblemResponse(tupled._1, tupled._2, tupled._3, tupled._4)
implicit val formats = response.json4sMarshaller
complete(response)
- }}}}
+ }}}
}
}
case class ProblemResponse(size: Int, offset: Int, n: Int, problems: Seq[ProblemDigest]) extends Json4sSupport {
override implicit def json4sFormats: Formats = DefaultFormats + new NodeSeqSerializer
}
object KeyStoreInfo {
val config = ConfigSource.config
val keyStoreDescriptor = KeyStoreDescriptorParser(
config.getConfig("shrine.keystore"),
config.getConfigOrEmpty("shrine.hub"),
config.getConfigOrEmpty("shrine.queryEntryPoint"))
val certCollection = BouncyKeyStoreCollection.fromFileRecoverWithClassPath(keyStoreDescriptor)
val hasher = UtilHasher(certCollection)
}
/**
* Centralized parsing logic for map of shrine.conf
* the class literal `T.class` in Java.
*/
//todo most of this info should come directly from the status service in Shrine, not from reading the config
case class ParsedConfig(configMap:Map[String, String]){
private val trueVal = "true"
private val rootKey = "shrine"
def isHub =
getOrElse(rootKey + ".hub.create", "")
.toLowerCase == trueVal
def stewardEnabled =
configMap.keySet
.contains(rootKey + ".queryEntryPoint.shrineSteward")
def shouldQuerySelf =
getOrElse(rootKey + ".hub.shouldQuerySelf", "")
.toLowerCase == trueVal
def fromJsonString(jsonString:String): String = jsonString.split("\"").mkString("")
def get(key:String): Option[String] = configMap.get(key).map(fromJsonString)
def getOrElse(key:String, elseVal:String = ""): String = get(key).getOrElse(elseVal)
}
object ParsedConfig {
def apply(jsonString:String):ParsedConfig = {
implicit def json4sFormats: Formats = DefaultFormats
ParsedConfig(json4sParse(jsonString).extract[StatusProtocolConfig].keyValues)//.filterKeys(_.toLowerCase.startsWith("shrine")))
}
}
case class DownstreamNode(name:String, url:String)
object DownstreamNode {
def create(configMap:Map[String,String]):Iterable[DownstreamNode] = {
for ((k, v) <- configMap.filterKeys(_.toLowerCase.startsWith
("shrine.hub.downstreamnodes")))
yield DownstreamNode(k.split('.').last,v.split("\"").mkString(""))
}
}
//todo replace with the actual config, scrubbed of passwords
case class ShrineConfig(isHub:Boolean,
hub:Hub,
pmEndpoint:Endpoint,
ontEndpoint:Endpoint,
hiveCredentials: HiveCredentials,
adapter: Adapter,
queryEntryPoint:QEP,
networkStatusQuery:String,
configMap:Map[String, String]
) extends DefaultJsonSupport
object ShrineConfig extends DefaultJsonSupport {
def apply(config:ParsedConfig):ShrineConfig = {
val hub = Hub(config)
val isHub = config.isHub
val pmEndpoint = Endpoint("pm",config)
val ontEndpoint = Endpoint("ont",config)
val hiveCredentials = HiveCredentials(config)
val adapter = Adapter(config)
val queryEntryPoint = QEP(config)
val networkStatusQuery = config.configMap("shrine.networkStatusQuery")
ShrineConfig(isHub, hub, pmEndpoint, ontEndpoint, hiveCredentials, adapter, queryEntryPoint, networkStatusQuery, config.configMap)
}
}
case class Endpoint(acceptAllCerts:Boolean, url:String, timeoutSeconds:Int)
object Endpoint{
def apply(endpointType:String,parsedConfig:ParsedConfig):Endpoint = {
val prefix = "shrine." + endpointType.toLowerCase + "Endpoint."
val acceptAllCerts = parsedConfig.configMap.getOrElse(prefix + "acceptAllCerts", "") == "true"
val url = parsedConfig.configMap.getOrElse(prefix + "url","")
val timeoutSeconds = parsedConfig.configMap.getOrElse(prefix + "timeout.seconds", "0").toInt
Endpoint(acceptAllCerts, url, timeoutSeconds)
}
}
case class HiveCredentials(domain:String,
username:String,
password:String,
crcProjectId:String,
ontProjectId:String)
object HiveCredentials{
def apply(parsedConfig:ParsedConfig):HiveCredentials = {
val key = "shrine.hiveCredentials."
val domain = parsedConfig.configMap.getOrElse(key + "domain","")
val username = parsedConfig.configMap.getOrElse(key + "username","")
val password = "REDACTED"
val crcProjectId = parsedConfig.configMap.getOrElse(key + "crcProjectId","")
val ontProjectId = parsedConfig.configMap.getOrElse(key + "ontProjectId","")
HiveCredentials(domain, username, password, crcProjectId, ontProjectId)
}
}
// -- hub only -- //
//todo delete when the Dashboard front end can use the status service's hub method
case class Hub(shouldQuerySelf:Boolean,
create:Boolean,
downstreamNodes:Iterable[DownstreamNode])
object Hub{
def apply(parsedConfig:ParsedConfig):Hub = {
val shouldQuerySelf = parsedConfig.shouldQuerySelf
val create = parsedConfig.isHub
val downstreamNodes = DownstreamNode.create(parsedConfig.configMap)
Hub(shouldQuerySelf, create, downstreamNodes)
}
}
// -- adapter info -- //
case class Adapter(crcEndpointUrl:String, setSizeObfuscation:Boolean, adapterLockoutAttemptsThreshold:Int,
adapterMappingsFilename:String)
object Adapter{
def apply(parsedConfig:ParsedConfig):Adapter = {
val key = "shrine.adapter."
val crcEndpointUrl = parsedConfig.configMap.getOrElse(key + "crcEndpoint.url","")
val setSizeObfuscation = parsedConfig.configMap.getOrElse(key + "setSizeObfuscation","").toLowerCase == "true"
val adapterLockoutAttemptsThreshold = parsedConfig.configMap.getOrElse(key + "adapterLockoutAttemptsThreshold", "0").toInt
val adapterMappingsFileName = parsedConfig.configMap.getOrElse(key + "adapterMappingsFileName","")
Adapter(crcEndpointUrl, setSizeObfuscation, adapterLockoutAttemptsThreshold, adapterMappingsFileName)
}
}
case class Steward(qepUserName:String, stewardBaseUrl:String)
object Steward {
def apply (parsedConfig:ParsedConfig):Steward = {
val key = "shrine.queryEntryPoint.shrineSteward."
val qepUserName = parsedConfig.configMap.getOrElse(key + "qepUserName","")
val stewardBaseUrl = parsedConfig.configMap.getOrElse(key + "stewardBaseUrl","")
Steward(qepUserName, stewardBaseUrl)
}
}
// -- if needed -- //
case class TimeoutInfo (timeUnit:String, description:String)
case class DatabaseInfo(createTablesOnStart:Boolean, dataSourceFrom:String,
jndiDataSourceName:String, slickProfileClassName:String)
case class Audit(database:DatabaseInfo, collectQepAudit:Boolean)
object Audit{
def apply(parsedConfig:ParsedConfig):Audit = {
val key = "shrine.queryEntryPoint.audit."
val createTablesOnStart = parsedConfig.configMap.getOrElse(key + "database.createTablesOnStart","") == "true"
val dataSourceFrom = parsedConfig.configMap.getOrElse(key + "database.dataSourceFrom","")
val jndiDataSourceName = parsedConfig.configMap.getOrElse(key + "database.jndiDataSourceName","")
val slickProfileClassName = parsedConfig.configMap.getOrElse(key + "database.slickProfileClassName","")
val collectQepAudit = parsedConfig.configMap.getOrElse(key + "collectQepAudit","") == "true"
val database = DatabaseInfo(createTablesOnStart, dataSourceFrom, jndiDataSourceName, slickProfileClassName)
Audit(database, collectQepAudit)
}
}
case class QEP(
maxQueryWaitTimeMinutes:Int,
create:Boolean,
attachSigningCert:Boolean,
authorizationType:String,
includeAggregateResults:Boolean,
authenticationType:String,
audit:Audit,
shrineSteward:Steward,
broadcasterServiceEndpointUrl:Option[String]
)
object QEP{
val key = "shrine.queryEntryPoint."
def apply(parsedConfig:ParsedConfig):QEP = QEP(
maxQueryWaitTimeMinutes = parsedConfig.configMap.getOrElse(key + "maxQueryWaitTime.minutes", "0").toInt,
create = parsedConfig.configMap.getOrElse(key + "create","") == "true",
attachSigningCert = parsedConfig.configMap.getOrElse(key + "attachSigningCert","") == "true",
authorizationType = parsedConfig.configMap.getOrElse(key + "authorizationType",""),
includeAggregateResults = parsedConfig.configMap.getOrElse(key + "includeAggregateResults","") == "true",
authenticationType = parsedConfig.configMap.getOrElse(key + "authenticationType", ""),
audit = Audit(parsedConfig),
shrineSteward = Steward(parsedConfig),
broadcasterServiceEndpointUrl = parsedConfig.configMap.get(key + "broadcasterServiceEndpoint.url")
)
}
//adapted from https://gist.github.com/joseraya/176821d856b43b1cfe19
object gruntWatchCorsSupport extends Directive0 with RouteConcatenation {
import spray.http.AllOrigins
import spray.http.HttpHeaders.{`Access-Control-Allow-Headers`, `Access-Control-Allow-Methods`, `Access-Control-Allow-Origin`, `Access-Control-Max-Age`}
import spray.http.HttpMethods.{GET, OPTIONS, POST}
import spray.routing.directives.MethodDirectives.options
import spray.routing.directives.RespondWithDirectives.respondWithHeaders
import spray.routing.directives.RouteDirectives.complete
private val allowOriginHeader = `Access-Control-Allow-Origin`(AllOrigins)
private val optionsCorsHeaders = List(
`Access-Control-Allow-Headers`("Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host, Referer, User-Agent, Authorization"),
`Access-Control-Max-Age`(1728000)) //20 days
val gruntWatch:Boolean = ConfigSource.config.getBoolean("shrine.dashboard.gruntWatch")
override def happly(f: (HNil) => Route): Route = {
if(gruntWatch) {
options {
respondWithHeaders(`Access-Control-Allow-Methods`(OPTIONS, GET, POST) :: allowOriginHeader :: optionsCorsHeaders){
complete(StatusCodes.OK)
}
} ~ f(HNil)
}
else f(HNil)
}
}
\ No newline at end of file
diff --git a/apps/dashboard-app/src/test/scala/net/shrine/dashboard/DashboardServiceTest.scala b/apps/dashboard-app/src/test/scala/net/shrine/dashboard/DashboardServiceTest.scala
index 584f9eecb..c10f1114d 100644
--- a/apps/dashboard-app/src/test/scala/net/shrine/dashboard/DashboardServiceTest.scala
+++ b/apps/dashboard-app/src/test/scala/net/shrine/dashboard/DashboardServiceTest.scala
@@ -1,434 +1,434 @@
package net.shrine.dashboard
import java.security.PrivateKey
import java.util.Date
import io.jsonwebtoken.impl.TextCodec
import io.jsonwebtoken.{Jwts, SignatureAlgorithm}
import net.shrine.authorization.steward.OutboundUser
import net.shrine.config.ConfigExtensions
import net.shrine.crypto.{BouncyKeyStoreCollection, KeyStoreDescriptorParser}
import net.shrine.dashboard.jwtauth.ShrineJwtAuthenticator
import net.shrine.i2b2.protocol.pm.User
import net.shrine.protocol.Credential
import net.shrine.source.ConfigSource
import net.shrine.spray.ShaResponse
import org.json4s.native.JsonMethods.parse
import org.junit.runner.RunWith
import org.scalatest.FlatSpec
import org.scalatest.junit.JUnitRunner
import spray.http.StatusCodes.{NotFound, OK, PermanentRedirect, Unauthorized}
import spray.http.{BasicHttpCredentials, FormData, OAuth2BearerToken, StatusCodes}
import spray.testkit.ScalatestRouteTest
import scala.language.postfixOps
@RunWith(classOf[JUnitRunner])
class DashboardServiceTest extends FlatSpec with ScalatestRouteTest with DashboardService {
def actorRefFactory = system
import scala.concurrent.duration._
implicit val routeTestTimeout = RouteTestTimeout(10 seconds)
val adminUserName = "keith"
val adminFullName = adminUserName
/**
* to run these tests with I2B2
* add a user named keith, to be the admin
* add a Boolean parameter for keith, Admin, true
* add all this user to the i2b2 project
*/
val adminCredentials = BasicHttpCredentials(adminUserName,"shh!")
val brokenCredentials = BasicHttpCredentials(adminUserName,"wrong password")
val adminUser = User(
fullName = adminUserName,
username = adminFullName,
domain = "domain",
credential = new Credential("admin's password",false),
params = Map(),
rolesByProject = Map()
)
val adminOutboundUser = OutboundUser.createFromUser(adminUser)
"DashboardService" should "return an OK and a valid outbound user for a user/whoami request" in {
Get(s"/user/whoami") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
implicit val formats = OutboundUser.json4sFormats
val userJson = new String(body.data.toByteArray)
val outboundUser = parse(userJson).extract[OutboundUser]
assertResult(adminOutboundUser)(outboundUser)
}
}
"DashboardService" should "return an OK and a valid outbound user for a user/whoami request and an '' " in {
Get(s"/user/whoami") ~>
addCredentials(brokenCredentials) ~>
route ~> check {
assertResult(OK)(status)
val response = new String(body.data.toByteArray)
assertResult("""AuthenticationFailed""")(response)
}
}
"DashboardService" should "redirect several urls to client/index.html" in {
Get() ~>
route ~> check {
status === PermanentRedirect
header("Location") === "client/index.html"
}
Get("/") ~>
route ~> check {
status === PermanentRedirect
header("Location") === "client/index.html"
}
Get("/index.html") ~>
route ~> check {
status === PermanentRedirect
header("Location") === "client/index.html"
}
Get("/client") ~>
route ~> check {
status === PermanentRedirect
header("Location") === "client/index.html"
}
Get("/client/") ~>
route ~> check {
status === PermanentRedirect
header("Location") === "client/index.html"
}
}
- "DashboardService" should "return an OK and the right version string for an admin/happy/all test" in {
+ "DashboardService" should "return an OK and the right version string for an admin/happy/all?extra=true test" in {
- Get(s"/admin/happy/all") ~>
+ Get(s"/admin/happy/all?extra=true") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val allString = new String(body.data.toByteArray)
//todo test it to see if it's right
}
}
"DashboardService" should "return an OK and mess with the right version string for an admin/messWithHappyVersion test" in {
Get(s"/admin/messWithHappyVersion") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val versionString = new String(body.data.toByteArray)
//todo test it to see if it's right
}
}
"DashboardService" should "return an OK for admin/status/config" in {
Get(s"/admin/status/config") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val configString = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/classpath" in {
Get(s"/admin/status/classpath") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val classpathString = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/optionalParts" in {
Get(s"/admin/status/optionalParts") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val options = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/summary" in {
Get(s"/admin/status/summary") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val summary = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/adapter" in {
Get(s"/admin/status/adapter") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val adapter = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/hub" in {
Get(s"/admin/status/hub") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val hub = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/i2b2" in {
Get(s"/admin/status/i2b2") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val i2b2 = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/keystore" in {
Get(s"/admin/status/keystore") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val keystore = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/qep" in {
Get(s"/admin/status/qep") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val qep = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/problems" in {
Get("/admin/status/problems") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val problems = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/problems with queries" in {
Get("/admin/status/problems?offset=2&n=1") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val problems = new String(body.data.toByteArray)
}
}
"DashboardService" should "return an OK for admin/status/problems with queries and an epoch filter" in {
Get("/admin/status/problems?offset=2&n=3&epoch=3") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
val problems = new String(body.data.toByteArray)
}
}
"DashboardService" should "return a BadRequest for admin/status/signature with no signature parameter" in {
Post("/status/verifySignature") ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(StatusCodes.BadRequest)(status)
}
}
"DashboardService" should "return a BadRequest for admin/status/signature with a malformatted signature parameter" in {
Post("/status/verifySignature", FormData(Seq("sha256" -> "foo"))) ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(StatusCodes.BadRequest)(status)
implicit val formats = ShaResponse.json4sFormats
assertResult(ShaResponse(ShaResponse.badFormat, false))(parse(new String(body.data.toByteArray)).extract[ShaResponse])
}
}
"DashboardService" should "return a NotFound for admin/status/signature with a correctly formatted parameter that is not in the keystore" in {
Post("/status/verifySignature", FormData(Seq("sha256" -> "00:00:00:00:00:00:00:7C:4B:FD:8D:A8:0A:C7:A4:AA:13:3E:22:B3:57:A7:C6:B0:95:15:1B:22:C0:E5:15:9A"))) ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(NotFound)(status)
implicit val formats = ShaResponse.json4sFormats
assertResult(ShaResponse("0E:5D:D1:10:68:2B:63:F4:66:E2:50:41:EA:13:AF:1A:F9:99:DB:40:6A:F7:EE:39:F2:1A:0D:51:7A:44:09:7A", false)) (
parse(new String(body.data.toByteArray)).extract[ShaResponse])
}
}
"DashboardService" should "return an OK for admin/status/signature with a valid sha256 hash" in {
val post = Post("/status/verifySignature", FormData(Seq("sha256" -> "0E:5D:D1:10:68:2B:63:F4:66:E2:50:41:EA:13:AF:1A:F9:99:DB:40:6A:F7:EE:39:F2:1A:0D:51:7A:44:09:7A")))
post ~>
addCredentials(adminCredentials) ~>
route ~> check {
assertResult(OK)(status)
implicit val formats = ShaResponse.json4sFormats
assertResult(ShaResponse("0E:5D:D1:10:68:2B:63:F4:66:E2:50:41:EA:13:AF:1A:F9:99:DB:40:6A:F7:EE:39:F2:1A:0D:51:7A:44:09:7A", true))(
parse(new String(body.data.toByteArray)).extract[ShaResponse]
)
}
}
val dashboardCredentials = BasicHttpCredentials(adminUserName,"shh!")
"DashboardService" should "return an OK and pong for fromDashboard/ping" in {
Get(s"/fromDashboard/ping") ~>
addCredentials(ShrineJwtAuthenticator.createOAuthCredentials(adminUser, "")) ~>
route ~> check {
assertResult(OK)(status)
val string = new String(body.data.toByteArray)
assertResult("pong")(string)
}
}
"DashboardService" should "reject a fromDashboard/ping with an expired jwts header" in {
val config = ConfigSource.config
val shrineCertCollection: BouncyKeyStoreCollection = BouncyKeyStoreCollection.fromFileRecoverWithClassPath(KeyStoreDescriptorParser(
config.getConfig("shrine.keystore"),
config.getConfigOrEmpty("shrine.hub"),
config.getConfigOrEmpty("shrine.queryEntryPoint")))
val base64Cert = new String(TextCodec.BASE64URL.encode(shrineCertCollection.myEntry.cert.getEncoded))
val key: PrivateKey = shrineCertCollection.myEntry.privateKey.get
val expiration: Date = new Date(System.currentTimeMillis() - 300 * 1000) //bad for 5 minutes
val jwtsString = Jwts.builder().
setHeaderParam("kid", base64Cert).
setSubject(java.net.InetAddress.getLocalHost.getHostName).
setExpiration(expiration).
signWith(SignatureAlgorithm.RS512, key).
compact()
Get(s"/fromDashboard/ping") ~>
addCredentials(OAuth2BearerToken(jwtsString)) ~>
sealRoute(route) ~> check {
assertResult(Unauthorized)(status)
}
}
"DashboardService" should "reject a fromDashboard/ping with no subject" in {
val config = ConfigSource.config
val shrineCertCollection: BouncyKeyStoreCollection = BouncyKeyStoreCollection.fromFileRecoverWithClassPath(KeyStoreDescriptorParser(
config.getConfig("shrine.keystore"),
config.getConfigOrEmpty("shrine.hub"),
config.getConfigOrEmpty("shrine.queryEntryPoint")))
val base64Cert = new String(TextCodec.BASE64URL.encode(shrineCertCollection.myEntry.cert.getEncoded))
val key: PrivateKey = shrineCertCollection.myEntry.privateKey.get
val expiration: Date = new Date(System.currentTimeMillis() + 30 * 1000)
val jwtsString = Jwts.builder().
setHeaderParam("kid", base64Cert).
setExpiration(expiration).
signWith(SignatureAlgorithm.RS512, key).
compact()
Get(s"/fromDashboard/ping") ~>
addCredentials(OAuth2BearerToken(jwtsString)) ~>
sealRoute(route) ~> check {
assertResult(Unauthorized)(status)
}
}
"DashboardService" should "reject a fromDashboard/ping with no Authorization header" in {
Get(s"/fromDashboard/ping") ~>
sealRoute(route) ~> check {
assertResult(Unauthorized)(status)
}
}
"DashboardService" should "reject a fromDashboard/ping with an Authorization header for the wrong authorization spec" in {
Get(s"/fromDashboard/ping") ~>
addCredentials(adminCredentials) ~>
sealRoute(route) ~> check {
assertResult(Unauthorized)(status)
}
}
- "DashboardService" should "not find a bogus web service to talk to" in {
-
+ "DashboardService" should "not be able to make a toDashboard request" in {
+ // Can't make a request because it's configured as a downstream node
Get(s"/toDashboard/bogus.harvard.edu/ping") ~>
addCredentials(adminCredentials) ~>
sealRoute(route) ~> check {
val string = new String(body.data.toByteArray)
- assertResult(NotFound)(status)
+ assertResult(StatusCodes.Forbidden)(status)
}
}
}
diff --git a/apps/dashboard-war/pom.xml b/apps/dashboard-war/pom.xml
index 7bea494d3..d23454ab9 100644
--- a/apps/dashboard-war/pom.xml
+++ b/apps/dashboard-war/pom.xml
@@ -1,37 +1,37 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
dashboard-war
Dashboard War
war
org.apache.maven.plugins
maven-war-plugin
shrine-dashboard
net.shrine
dashboard-app
${project.version}
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
diff --git a/apps/meta-app/pom.xml b/apps/meta-app/pom.xml
index 404583410..88d8b9565 100644
--- a/apps/meta-app/pom.xml
+++ b/apps/meta-app/pom.xml
@@ -1,92 +1,92 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
meta-app
MetaData App
jar
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-config
${project.version}
log4j
log4j
io.spray
spray-routing_2.11
${spray-version}
io.spray
spray-servlet_2.11
${spray-version}
io.spray
spray-util_2.11
${spray-version}
io.spray
spray-testkit_2.11
${spray-version}
test
com.typesafe.akka
akka-actor_2.11
${akka-version}
com.typesafe.akka
akka-slf4j_2.11
${akka-version}
com.typesafe.akka
akka-testkit_2.11
${akka-testkit-version}
test
org.json4s
json4s-native_2.11
${json4s-version}
com.typesafe
config
${typesafe-config-version}
mysql
mysql-connector-java
${mysql-version}
diff --git a/apps/meta-war/pom.xml b/apps/meta-war/pom.xml
index 2abca742b..877e4f583 100644
--- a/apps/meta-war/pom.xml
+++ b/apps/meta-war/pom.xml
@@ -1,37 +1,37 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
meta-war
MetaData War
war
org.apache.maven.plugins
maven-war-plugin
shrine-metadata
net.shrine
meta-app
${project.version}
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
diff --git a/apps/proxy/pom.xml b/apps/proxy/pom.xml
index fb15c4f50..8d46458b2 100644
--- a/apps/proxy/pom.xml
+++ b/apps/proxy/pom.xml
@@ -1,52 +1,52 @@
4.0.0
SHRINE Proxy
shrine-proxy
war
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
javax.servlet
javax.servlet-api
provided
src/main/scala
src/test/scala
shrine-proxy
net.alchim31.maven
scala-maven-plugin
diff --git a/apps/shrine-app/pom.xml b/apps/shrine-app/pom.xml
index 1c1cff054..06bce95e7 100644
--- a/apps/shrine-app/pom.xml
+++ b/apps/shrine-app/pom.xml
@@ -1,118 +1,118 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
shrine-app
SHRINE App
jar
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-hms-core
${project.version}
net.shrine
shrine-qep
${project.version}
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-broadcaster-service
${project.version}
net.shrine
shrine-adapter-service
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-ont-support
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
net.shrine
shrine-broadcaster-aggregator
${project.version}
test-jar
test
net.shrine
shrine-client
${project.version}
test-jar
test
com.h2database
h2
${h2-version}
test
org.json4s
json4s-native_2.11
${json4s-version}
diff --git a/apps/steward-app/pom.xml b/apps/steward-app/pom.xml
index bba5167cb..0127947e9 100644
--- a/apps/steward-app/pom.xml
+++ b/apps/steward-app/pom.xml
@@ -1,177 +1,177 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
steward-app
Steward App
jar
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
com.github.eirslett
frontend-maven-plugin
1.0
src/main/js
install node and npm
install-node-and-npm
v6.2.2
3.10.3
npm install
npm
generate-resources
bower install
bower
gulp test and build
gulp
--no-color
io.spray
spray-routing_2.11
${spray-version}
io.spray
spray-servlet_2.11
${spray-version}
io.spray
spray-util_2.11
${spray-version}
io.spray
spray-testkit_2.11
${spray-version}
test
com.typesafe.akka
akka-actor_2.11
${akka-version}
com.typesafe.akka
akka-slf4j_2.11
${akka-version}
com.typesafe.akka
akka-testkit_2.11
${akka-testkit-version}
test
org.json4s
json4s-native_2.11
${json4s-version}
com.typesafe.slick
slick_2.11
${slick-version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
com.h2database
h2
${h2-version}
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-email
${project.version}
net.shrine
shrine-data-commons
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-auth
${project.version}
mysql
mysql-connector-java
${mysql-version}
diff --git a/apps/steward-app/src/main/js/.gitignore b/apps/steward-app/src/main/js/.gitignore
index f0d7d55c3..f1a9c01bf 100644
--- a/apps/steward-app/src/main/js/.gitignore
+++ b/apps/steward-app/src/main/js/.gitignore
@@ -1,20 +1,21 @@
*.class
*.log
# mvn
target/
# emacs cruft
*.*~
# javascript artifacts
./node_modules/
**/*/node_modules/
./app/server/node_modules/
+**/*/bower_components/
# idea
.idea/
*.iml
# osx cruft
-.DS_Store
\ No newline at end of file
+.DS_Store
diff --git a/apps/steward-war/pom.xml b/apps/steward-war/pom.xml
index 4502d12b5..e74ee4c13 100644
--- a/apps/steward-war/pom.xml
+++ b/apps/steward-war/pom.xml
@@ -1,43 +1,43 @@
shrine-base
net.shrine
- 1.22.6
+ 1.22.8
../../pom.xml
4.0.0
steward
Steward War
war
org.apache.maven.plugins
maven-war-plugin
steward
net.shrine
steward-app
${project.version}
com.h2database
h2
${h2-version}
test
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
diff --git a/apps/war/pom.xml b/apps/war/pom.xml
index 7328c402e..26324da6b 100644
--- a/apps/war/pom.xml
+++ b/apps/war/pom.xml
@@ -1,58 +1,64 @@
4.0.0
SHRINE War
shrine-war
war
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-app
${project.version}
net.shrine
shrine-adapter-service
${project.version}
javax.servlet
javax.servlet-api
provided
com.sun.jersey
jersey-servlet
net.shrine
shrine-adapter-service
${project.version}
test-jar
test
+
+ org.slf4j
+ slf4j-log4j12
+ ${slf4j-version}
+ runtime
+
shrine-cell
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/auth/pom.xml b/commons/auth/pom.xml
index 4fcf22c0a..5ab5c38ff 100644
--- a/commons/auth/pom.xml
+++ b/commons/auth/pom.xml
@@ -1,97 +1,97 @@
4.0.0
SHRINE Auth*
shrine-auth
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-protocol
${project.version}
com.typesafe.akka
akka-actor_2.11
${akka-version}
org.json4s
json4s-native_2.11
${json4s-version}
io.spray
spray-client_2.11
${spray-version}
io.spray
spray-routing_2.11
${spray-version}
io.spray
spray-servlet_2.11
${spray-version}
io.spray
spray-util_2.11
${spray-version}
io.spray
spray-testkit_2.11
${spray-version}
test
com.typesafe.akka
akka-slf4j_2.11
${akka-version}
com.typesafe.akka
akka-testkit_2.11
${akka-version}
test
net.shrine
shrine-client
${project.version}
net.shrine
shrine-test-commons
${project.version}
test-jar
test
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/client/pom.xml b/commons/client/pom.xml
index e055ddb22..0f27ea6db 100644
--- a/commons/client/pom.xml
+++ b/commons/client/pom.xml
@@ -1,68 +1,68 @@
4.0.0
SHRINE Client
shrine-client
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
com.sun.jersey
jersey-client
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/config/pom.xml b/commons/config/pom.xml
index 6c0d13a21..4f289f483 100644
--- a/commons/config/pom.xml
+++ b/commons/config/pom.xml
@@ -1,56 +1,56 @@
4.0.0
SHRINE Config
shrine-config
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.sf.opencsv
opencsv
com.typesafe
config
net.shrine
shrine-util
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/crypto/pom.xml b/commons/crypto/pom.xml
index 9e9aa827d..3536ebb1b 100644
--- a/commons/crypto/pom.xml
+++ b/commons/crypto/pom.xml
@@ -1,58 +1,58 @@
4.0.0
SHRINE Crypto
shrine-crypto
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-config
${project.version}
org.bouncycastle
bcpkix-jdk15on
${bouncy-castle-version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/data-commons/pom.xml b/commons/data-commons/pom.xml
index b9f7d463d..9e77dd58c 100644
--- a/commons/data-commons/pom.xml
+++ b/commons/data-commons/pom.xml
@@ -1,87 +1,87 @@
4.0.0
SHRINE Data Access Classes
shrine-data-commons
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-util
${project.version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.squeryl
squeryl_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
org.springframework
spring-jdbc
test
com.h2database
h2
test
diff --git a/commons/email/pom.xml b/commons/email/pom.xml
index bcdbfe837..dcf6ef204 100644
--- a/commons/email/pom.xml
+++ b/commons/email/pom.xml
@@ -1,71 +1,72 @@
4.0.0
SHRINE Email
shrine-email
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
org.slf4j
slf4j-simple
1.6.4
+ test
org.json4s
json4s-native_2.11
${json4s-version}
me.lessis
courier_2.11
0.1.3
net.shrine
shrine-config
${project.version}
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.jvnet.mock-javamail
mock-javamail
1.9
test
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
2.6
test-jar
diff --git a/commons/ont-support/pom.xml b/commons/ont-support/pom.xml
index e60702c9a..a8ec1e560 100644
--- a/commons/ont-support/pom.xml
+++ b/commons/ont-support/pom.xml
@@ -1,63 +1,63 @@
4.0.0
SHRINE Ontology Support
shrine-ont-support
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-util
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-client
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/protocol-query/pom.xml b/commons/protocol-query/pom.xml
index 7891060f4..11d91c9c0 100644
--- a/commons/protocol-query/pom.xml
+++ b/commons/protocol-query/pom.xml
@@ -1,57 +1,57 @@
4.0.0
SHRINE Query Protocol
shrine-protocol-query
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.liftweb
lift-json_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
net.shrine
shrine-util
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/protocol/pom.xml b/commons/protocol/pom.xml
index 535fca55b..50838422f 100644
--- a/commons/protocol/pom.xml
+++ b/commons/protocol/pom.xml
@@ -1,91 +1,91 @@
4.0.0
SHRINE Protocol
shrine-protocol
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
net.shrine
shrine-protocol-query
${project.version}
net.shrine
shrine-util
${project.version}
net.shrine
shrine-util
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-data-commons
${project.version}
net.liftweb
lift-json_${scala-major-version}
org.easymock
easymock
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
src/main/scala
src/test/scala
src/main/resources
true
shrine-versions.properties
net.alchim31.maven
scala-maven-plugin
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
diff --git a/commons/test-commons/pom.xml b/commons/test-commons/pom.xml
index fc39e56d9..ce7d67fde 100644
--- a/commons/test-commons/pom.xml
+++ b/commons/test-commons/pom.xml
@@ -1,48 +1,48 @@
4.0.0
SHRINE Test Commons
shrine-test-commons
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
com.sun.jersey
jersey-client
test
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
src/test/scala
org.apache.maven.plugins
maven-jar-plugin
test-jar
net.alchim31.maven
scala-maven-plugin
diff --git a/commons/util/pom.xml b/commons/util/pom.xml
index ef191aa9d..9479fe23b 100644
--- a/commons/util/pom.xml
+++ b/commons/util/pom.xml
@@ -1,102 +1,101 @@
4.0.0
SHRINE Utility Code
shrine-util
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
com.typesafe.slick
slick_2.11
${slick-version}
io.spray
spray-httpx_2.11
${spray-version}
org.slf4j
slf4j-simple
1.6.4
+ test
net.liftweb
lift-json_${scala-major-version}
org.scala-lang
scalap
-
org.scala-lang
scalap
${scala-version}
-
log4j
log4j
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.json4s
json4s-native_2.11
${json4s-version}
com.h2database
h2
test
src/main/scala
src/test/scala
src/main/resources
true
shrine-versions.properties
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
2.6
test-jar
diff --git a/hms-support/hms-core/pom.xml b/hms-support/hms-core/pom.xml
index ab7ace275..605f598f2 100644
--- a/hms-support/hms-core/pom.xml
+++ b/hms-support/hms-core/pom.xml
@@ -1,62 +1,62 @@
net.shrine
shrine-hms-support
- 1.22.6
+ 1.22.8
4.0.0
shrine-hms-core
SHRINE HMS Support (Core Classes)
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
org.easymock
easymock
test
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
diff --git a/hms-support/pom.xml b/hms-support/pom.xml
index d2509da67..1a088b67f 100644
--- a/hms-support/pom.xml
+++ b/hms-support/pom.xml
@@ -1,15 +1,15 @@
4.0.0
SHRINE HMS Support
shrine-hms-support
pom
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
hms-core
diff --git a/hub/broadcaster-aggregator/pom.xml b/hub/broadcaster-aggregator/pom.xml
index f50de7573..05de8b27b 100644
--- a/hub/broadcaster-aggregator/pom.xml
+++ b/hub/broadcaster-aggregator/pom.xml
@@ -1,161 +1,161 @@
4.0.0
SHRINE Broadcaster Aggregator
shrine-broadcaster-aggregator
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
src/main/scala
src/test/scala
org.codehaus.mojo
tomcat-maven-plugin
1.0-beta-1
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
mysql
mysql-connector-java
net.shrine
shrine-util
${project.version}
test-jar
test
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
org.codehaus.mojo
findbugs-maven-plugin
2.3.1
Max
org.codehaus.mojo
cobertura-maven-plugin
2.3
org.apache.maven.plugins
maven-checkstyle-plugin
2.5
org.apache.maven.plugins
maven-pmd-plugin
2.4
1.6
diff --git a/hub/broadcaster-service/pom.xml b/hub/broadcaster-service/pom.xml
index 7a321915a..ef330abd7 100644
--- a/hub/broadcaster-service/pom.xml
+++ b/hub/broadcaster-service/pom.xml
@@ -1,148 +1,148 @@
4.0.0
SHRINE Broadcast Service
shrine-broadcaster-service
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
com.sun.jersey
jersey-server
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
log4j
log4j
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
org.codehaus.mojo
findbugs-maven-plugin
2.3.1
Max
org.codehaus.mojo
cobertura-maven-plugin
2.3
org.apache.maven.plugins
maven-checkstyle-plugin
2.5
org.apache.maven.plugins
maven-pmd-plugin
2.4
1.6
diff --git a/install/pom.xml b/install/pom.xml
index 5ba545666..30a4eca38 100644
--- a/install/pom.xml
+++ b/install/pom.xml
@@ -1,34 +1,34 @@
4.0.0
SHRINE Install Scripts
shrine-install-scripts
pom
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
shrine-install-scripts
org.apache.maven.plugins
maven-assembly-plugin
src/main/assembly/assembly.xml
make-assembly
package
single
diff --git a/integration/pom.xml b/integration/pom.xml
index 7238cc686..e89e19180 100644
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -1,127 +1,127 @@
4.0.0
SHRINE Integration Tests
shrine-integration-tests
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-crypto
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
net.shrine
shrine-protocol
${project.version}
test
net.shrine
shrine-adapter-service
${project.version}
test
net.shrine
shrine-adapter-service
${project.version}
test-jar
test
net.shrine
shrine-adapter-client-api
${project.version}
test
net.shrine
shrine-broadcaster-aggregator
${project.version}
test
net.shrine
shrine-qep
${project.version}
test
net.shrine
shrine-broadcaster-service
${project.version}
test
com.h2database
h2
test
org.slf4j
slf4j-log4j12
test
org.springframework
spring-jdbc
test
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.typesafe.slick
slick-hikaricp_2.11
${slick-version}
test
diff --git a/pom.xml b/pom.xml
index 1d5247c67..6b0d2d505 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,387 +1,387 @@
4.0.0
SHRINE
net.shrine
shrine-base
pom
- 1.22.6
+ 1.22.8
UTF-8
4.2.5.RELEASE
2.6.2
2.11.8
2.11
4.12
1.7.18
1.2.17
1.19
2.2.6
3.2.2
0.9.6-RC4
1.2.1
1.4.191
3.4
5.1.38
2.3
3.0.1
0.9.5
1.3.3
2.3.14
2.4.0
3.3.0
3.1.1
3.1.1.1
1.55
apps/meta-app
apps/meta-war
apps/dashboard-app
apps/dashboard-war
apps/steward-app
apps/steward-war
apps/proxy
apps/shrine-app
apps/war
qep/service
hub/broadcaster-aggregator
hub/broadcaster-service
adapter/adapter-api
adapter/adapter-service
hms-support
tools
commons/util
commons/email
commons/auth
commons/protocol-query
commons/data-commons
commons/protocol
commons/crypto
commons/client
commons/config
commons/ont-support
commons/test-commons
install
integration
shrine-webclient
net.alchim31.maven
scala-maven-plugin
${scala-maven-plugin-version}
compile
compile
compile
test-compile
testCompile
test-compile
process-resources
compile
incremental
true
-XX:+AggressiveOpts
-XX:CompileThreshold=500
-XX:+UseFastAccessorMethods
-XX:+UseStringCache
-XX:+OptimizeStringConcat
-XX:+TieredCompilation
-XX:+UseConcMarkSweepGC
-XX:+DoEscapeAnalysis
-server
-Xms64m
-Xmx1024m
-XX:MaxPermSize=384m
${scala-version}
-Xcheckinit
-unchecked
-deprecation
-Xlint:adapted-args,inaccessible,infer-any,missing-interpolator,private-shadow,type-parameter-shadow,unsound-match
7
maven-compiler-plugin
7
org.codehaus.mojo
buildnumber-maven-plugin
1.1
org.apache.maven.plugins
maven-jar-plugin
2.4
org.apache.maven.plugins
maven-war-plugin
2.1.1
org.codehaus.mojo
buildnumber-maven-plugin
validate
create
{0,date,yyyy-MM-dd HH:mm:ss}
(not available)
org.apache.maven.plugins
maven-jar-plugin
true
${buildNumber}
${scmBranch}
${timestamp}
org.apache.maven.plugins
maven-war-plugin
true
${buildNumber}
${scmBranch}
${timestamp}
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
true
true
true
true
http://shrine-dev1.catalyst:6060/shrine/rest/happy
scm:git:https://open.med.harvard.edu/stash/scm/shrine/shrine.git
CBMI-Nexus
https://repo.open.med.harvard.edu/nexus/content/groups/public/
com.typesafe
config
${typesafe-config-version}
log4j
log4j
${log4j-version}
org.springframework
spring-jdbc
${spring.version}
test
com.h2database
h2
${h2-version}
test
org.easymock
easymock
${easymock-version}
test
org.slf4j
slf4j-log4j12
${slf4j-version}
test
mysql
mysql-connector-java
${mysql-version}
net.sf.opencsv
opencsv
${opencsv-version}
net.liftweb
lift-json_${scala-major-version}
${lift-version}
com.sun.jersey
jersey-server
${jersey-version}
com.sun.jersey
jersey-servlet
${jersey-version}
com.sun.jersey
jersey-client
${jersey-version}
org.squeryl
squeryl_${scala-major-version}
${squeryl-version}
javax.servlet
javax.servlet-api
${servlet-api-version}
provided
org.bouncycastle
bcpkix-jdk15on
${bouncy-castle-version}
org.scala-lang
scala-library
${scala-version}
junit
junit
${junit-version}
test
org.scalatest
scalatest_${scala-major-version}
${scalatest-version}
test
org.scala-lang
scala-actors
org.scala-lang
scala-reflect
org.scala-lang
scala-actors
${scala-version}
test
org.scala-lang
scala-reflect
${scala-version}
nexus
Nexus Repo
https://repo.open.med.harvard.edu/nexus/content/repositories/snapshots
false
nexus
Nexus Repo
https://repo.open.med.harvard.edu/nexus/content/repositories/releases
diff --git a/qep/service/pom.xml b/qep/service/pom.xml
index 0ceecc32a..d05e13a1d 100644
--- a/qep/service/pom.xml
+++ b/qep/service/pom.xml
@@ -1,218 +1,218 @@
4.0.0
SHRINE Service
shrine-qep
jar
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
../../pom.xml
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
false
org.squeryl
squeryl_${scala-major-version}
org.scala-lang
scalap
org.scala-lang
scalap
${scala-version}
com.sun.jersey
jersey-server
com.sun.jersey
jersey-client
net.shrine
shrine-auth
${project.version}
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-adapter-client-api
${project.version}
net.shrine
shrine-protocol
${project.version}
net.shrine
shrine-data-commons
${project.version}
net.shrine
shrine-hms-core
${project.version}
com.typesafe.slick
slick_2.11
${slick-version}
org.suecarter
freeslick_2.11
${freeslick-version}
org.slf4j
slf4j-log4j12
${slf4j-version}
mysql
mysql-connector-java
log4j
log4j
com.sun.jersey.jersey-test-framework
jersey-test-framework-http
${jersey-version}
test
com.sun.jersey.contribs
jersey-simple-server
${jersey-version}
test
com.h2database
h2
test
org.easymock
easymock
test
org.springframework
spring-jdbc
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-data-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
test-jar
test
net.shrine
shrine-util
${project.version}
test-jar
test
org.codehaus.mojo
findbugs-maven-plugin
2.3.1
Max
org.codehaus.mojo
cobertura-maven-plugin
2.3
org.apache.maven.plugins
maven-checkstyle-plugin
2.5
org.apache.maven.plugins
maven-pmd-plugin
2.4
1.6
diff --git a/shrine-webclient/pom.xml b/shrine-webclient/pom.xml
index 478abfa87..7a40894c8 100644
--- a/shrine-webclient/pom.xml
+++ b/shrine-webclient/pom.xml
@@ -1,41 +1,41 @@
4.0.0
SHRINE Web Client
shrine-webclient
pom
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
1.5
2.4
maven-assembly-plugin
${assembly-plugin-version}
assembly
package
single
src/main/assembly/assembly.xml
diff --git a/tools/adapter-queries-to-qep/pom.xml b/tools/adapter-queries-to-qep/pom.xml
index 7b428776f..e1e500c95 100644
--- a/tools/adapter-queries-to-qep/pom.xml
+++ b/tools/adapter-queries-to-qep/pom.xml
@@ -1,57 +1,57 @@
4.0.0
SHRINE Copy Adapter Queries to QEP
adapter-queries-to-qep
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
net.shrine
shrine-data-commons
${project.version}
com.typesafe
config
net.shrine
shrine-adapter-service
${project.version}
net.shrine
shrine-qep
${project.version}
org.slf4j
slf4j-log4j12
${slf4j-version}
runtime
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
adapter-queries-to-qep-${project.version}
false
diff --git a/tools/batch-querier/pom.xml b/tools/batch-querier/pom.xml
index 9656a33db..c99d7acbf 100644
--- a/tools/batch-querier/pom.xml
+++ b/tools/batch-querier/pom.xml
@@ -1,86 +1,86 @@
4.0.0
SHRINE Query Automation Utility
shrine-batch-querier-utility
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-client
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-utility-commons
${project.version}
test-jar
test
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
shrine-batch-querier-${project.version}
false
diff --git a/tools/jersey-http-client-tool/pom.xml b/tools/jersey-http-client-tool/pom.xml
index 9d71247dc..1eab1de55 100644
--- a/tools/jersey-http-client-tool/pom.xml
+++ b/tools/jersey-http-client-tool/pom.xml
@@ -1,41 +1,41 @@
4.0.0
Jersey Http Client Tool
jersey-http-client-test
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
com.typesafe
config
net.shrine
shrine-client
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
jersey-http-client-tool-${project.version}
false
diff --git a/tools/mapping-automation/pom.xml b/tools/mapping-automation/pom.xml
index 4d3cba694..94321576d 100644
--- a/tools/mapping-automation/pom.xml
+++ b/tools/mapping-automation/pom.xml
@@ -1,85 +1,85 @@
4.0.0
SHRINE Term Mapping Automation Utilities
shrine-mapping-automation
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-config
${project.version}
net.shrine
shrine-ont-support
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-utility-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
shrine-mapping-tools-${project.version}
false
diff --git a/tools/monitor/pom.xml b/tools/monitor/pom.xml
index f4f811a11..18fbf5c09 100644
--- a/tools/monitor/pom.xml
+++ b/tools/monitor/pom.xml
@@ -1,90 +1,90 @@
4.0.0
SHRINE Monitor Utilities
shrine-monitor-utilities
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
ant
ant-javamail
1.6.5
net.shrine
shrine-broadcaster-aggregator
${project.version}
net.shrine
shrine-config
${project.version}
org.codehaus.groovy.modules.http-builder
http-builder
0.5.1
org.codehaus.groovy
groovy
org.codehaus.gmaven.runtime
gmaven-runtime-1.7
1.3
mysql
mysql-connector-java
com.h2database
h2
test
net.sf.opencsv
opencsv
org.apache.commons
commons-email
1.2
org.codehaus.gmaven
gmaven-plugin
maven-assembly-plugin
shrine-monitor-${project.version}.zip
false
diff --git a/tools/pom.xml b/tools/pom.xml
index fa9278f74..9e4cfbebf 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -1,81 +1,81 @@
4.0.0
SHRINE Tools
shrine-tools
pom
net.shrine
shrine-base
- 1.22.6
+ 1.22.8
1.5
2.4
jersey-http-client-tool
monitor
utility-commons
scanner
batch-querier
adapter-queries-to-qep
mapping-automation
net.shrine
shrine-protocol
${project.version}
org.codehaus.gmaven
gmaven-plugin
${gmaven-plugin-version}
compile
testCompile
true
true
true
maven-assembly-plugin
${assembly-plugin-version}
assembly
package
single
src/main/assembly/assembly.xml
diff --git a/tools/scanner/pom.xml b/tools/scanner/pom.xml
index e0c4159c4..6c173eea9 100644
--- a/tools/scanner/pom.xml
+++ b/tools/scanner/pom.xml
@@ -1,103 +1,103 @@
4.0.0
SHRINE Scanner Utility
shrine-scanner-utility
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
net.shrine
shrine-test-commons
${project.version}
test-jar
test
net.shrine
shrine-ont-support
${project.version}
net.shrine
shrine-hms-core
${project.version}
net.shrine
shrine-config
${project.version}
net.shrine
shrine-crypto
${project.version}
net.shrine
shrine-utility-commons
${project.version}
net.shrine
shrine-utility-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
net.shrine
shrine-broadcaster-aggregator
${project.version}
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
maven-assembly-plugin
shrine-scanner-${project.version}
false
diff --git a/tools/utility-commons/pom.xml b/tools/utility-commons/pom.xml
index f2003e4f9..e69c9bd18 100644
--- a/tools/utility-commons/pom.xml
+++ b/tools/utility-commons/pom.xml
@@ -1,64 +1,64 @@
4.0.0
SHRINE Common Classes for Utilities
shrine-utility-commons
jar
net.shrine
shrine-tools
- 1.22.6
+ 1.22.8
net.shrine
shrine-test-commons
${project.version}
test-jar
test
org.rogach
scallop_${scala-major-version}
${scallop-version}
net.sf.opencsv
opencsv
com.typesafe
config
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
org.apache.maven.plugins
maven-jar-plugin
test-jar