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 7 maven-compiler-plugin 7 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