play.api.libs.json.JsArray Scala Examples
The following examples show how to use play.api.libs.json.JsArray.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: DDPCAlgorithmJsonParser.scala From CM-Well with Apache License 2.0 | 5 votes |
package cmwell.dc.stream.algo import java.net.URL import cmwell.dc.LazyLogging import cmwell.dc.stream.MessagesTypesAndExceptions.AlgoData import play.api.libs.json.{JsArray, JsDefined, JsLookupResult, JsObject, JsString} object DDPCAlgorithmJsonParser extends LazyLogging { def extractAlgoInfo(f: JsLookupResult):AlgoData = { val algoClass = f \ "algoClass" match { case JsDefined(JsArray(seq)) if seq.length == 1 && seq.head.isInstanceOf[JsString] => seq.head.as[String] } val algoJarUrl = f \ "algoJarUrl" match { case JsDefined(JsArray(seq)) if seq.length == 1 && seq.head.isInstanceOf[JsString] => seq.head.as[String] } val params = f \ "algoParams" match { case JsDefined(JsArray(seq)) => seq.collect { case JsString(rule) => rule.split("->") match { case Array(source, target) => (source, target) } }.toMap case _ => Map.empty[String, String] } val url = new URL(algoJarUrl) if(url.getHost != "localhost" || !url.getPath.startsWith("/meta")) throw new IllegalArgumentException(s"Host is not localhost or url doesn't in /meta, url=$algoJarUrl") AlgoData(algoClass, algoJarUrl, params) } }
Example 2
Source File: BackOfficeController.scala From izanami with Apache License 2.0 | 5 votes |
package controllers import ch.qos.logback.classic.{Level, LoggerContext} import controllers.actions.SecuredAuthContext import domains.user.User import org.slf4j.LoggerFactory import play.api.libs.json.{JsArray, Json} import play.api.mvc.{AbstractController, ActionBuilder, AnyContent, ControllerComponents} class BackOfficeController(AuthAction: ActionBuilder[SecuredAuthContext, AnyContent], cc: ControllerComponents) extends AbstractController(cc) { def changeLogLevel(name: String, newLevel: Option[String]) = AuthAction { ctx => if (isAdmin(ctx)) { val loggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext] val _logger = loggerContext.getLogger(name) val oldLevel = Option(_logger.getLevel).map(_.levelStr).getOrElse(Level.OFF.levelStr) _logger.setLevel(newLevel.map(v => Level.valueOf(v)).getOrElse(Level.ERROR)) Ok(Json.obj("name" -> name, "oldLevel" -> oldLevel, "newLevel" -> _logger.getLevel.levelStr)) } else { Unauthorized } } def getLogLevel(name: String) = AuthAction { ctx => if (isAdmin(ctx)) { val loggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext] val _logger = loggerContext.getLogger(name) Ok(Json.obj("name" -> name, "level" -> _logger.getLevel.levelStr)) } else { Unauthorized } } def getAllLoggers() = AuthAction { ctx => if (isAdmin(ctx)) { import scala.jdk.CollectionConverters._ val loggerContext = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext] val rawLoggers = loggerContext.getLoggerList.asScala.toIndexedSeq val loggers = JsArray(rawLoggers.map(logger => { val level: String = Option(logger.getLevel).map(_.levelStr).getOrElse("OFF") Json.obj("name" -> logger.getName, "level" -> level) })) Ok(loggers) } else { Unauthorized } } private def isAdmin(ctx: SecuredAuthContext[AnyContent]) = ctx.auth.exists { case u: User => u.admin case _ => false } }
Example 3
Source File: SearchController.scala From izanami with Apache License 2.0 | 5 votes |
package controllers import akka.actor.ActorSystem import akka.stream.scaladsl.{GraphDSL, Interleave, Sink, Source} import akka.stream.{ActorMaterializer, SourceShape} import controllers.actions.SecuredAuthContext import domains.abtesting.ExperimentService import domains.config.ConfigService import domains.feature.FeatureService import domains.script.GlobalScriptService import domains.configuration.GlobalContext import play.api.libs.json.{JsArray, JsValue, Json} import play.api.mvc.{AbstractController, ActionBuilder, AnyContent, ControllerComponents} import store.Query import zio.{Runtime, ZIO} import libs.http.HttpContext class SearchController(AuthAction: ActionBuilder[SecuredAuthContext, AnyContent], cc: ControllerComponents)( implicit system: ActorSystem, R: HttpContext[GlobalContext] ) extends AbstractController(cc) { import libs.http._ def search(pattern: String, features: Boolean, configs: Boolean, experiments: Boolean, scripts: Boolean) = AuthAction.asyncTask[GlobalContext] { ctx => val query: Query = Query.oneOf(ctx.authorizedPatterns).and(pattern.split(",").toList) for { featuresRes <- if (features) FeatureService .findByQuery(query, 1, 10) .map(_.results.map(value => Json.obj("type" -> "features", "id" -> Json.toJson(value.id)))) .map(value => Source(value.toList)) else ZIO.succeed(Source.empty[JsValue]) configsRes <- if (configs) ConfigService .findByQuery(query, 1, 10) .map( _.results.map(value => Json.obj("type" -> "configurations", "id" -> Json.toJson(value.id))) ) .map(value => Source(value.toList)) else ZIO.succeed(Source.empty[JsValue]) experimentsRes <- if (experiments) ExperimentService .findByQuery(query, 1, 10) .map( _.results.map(value => Json.obj("type" -> "experiments", "id" -> Json.toJson(value.id))) ) .map(value => Source(value.toList)) else ZIO.succeed(Source.empty[JsValue]) scriptsRes <- if (scripts) GlobalScriptService .findByQuery(query, 1, 10) .map(_.results.map(value => Json.obj("type" -> "scripts", "id" -> Json.toJson(value.id)))) .map(value => Source(value.toList)) else ZIO.succeed(Source.empty[JsValue]) res <- ZIO.fromFuture { implicit ec => val all = Source.fromGraph(GraphDSL.create() { implicit builder => import GraphDSL.Implicits._ val interleave = builder.add(Interleave[JsValue](4, 1)) featuresRes ~> interleave.in(0) configsRes ~> interleave.in(1) experimentsRes ~> interleave.in(2) scriptsRes ~> interleave.in(3) SourceShape(interleave.out) }) all.take(10).runWith(Sink.seq) map { jsons => Ok(JsArray(jsons)) } } } yield res } }
Example 4
Source File: BaseTxJson.scala From Waves with MIT License | 5 votes |
package com.wavesplatform.transaction.serialization.impl import com.wavesplatform.transaction.{LegacyPBSwitch, ProvenTransaction, SigProofsSwitch, VersionedTransaction} import play.api.libs.json.{JsArray, JsObject, JsString, Json} object BaseTxJson { def toJson(tx: ProvenTransaction): JsObject = { import tx._ Json.obj( "type" -> typeId, "id" -> id().toString, "sender" -> sender.toAddress, "senderPublicKey" -> sender, "fee" -> assetFee._2, "feeAssetId" -> assetFee._1.maybeBase58Repr, "timestamp" -> timestamp, "proofs" -> JsArray(proofs.proofs.map(p => JsString(p.toString))) ) ++ (tx match { // Compatibility case s: SigProofsSwitch if s.usesLegacySignature => Json.obj("signature" -> tx.signature.toString) case _ => Json.obj() }) ++ (tx match { case v: VersionedTransaction => Json.obj("version" -> v.version) case _ => Json.obj() }) ++ (tx match { case pbs: LegacyPBSwitch if pbs.isProtobufVersion => Json.obj("chainId" -> tx.chainId) case _ => Json.obj() }) } }
Example 5
Source File: InvokeScriptTxSerializer.scala From Waves with MIT License | 5 votes |
package com.wavesplatform.transaction.serialization.impl import java.nio.ByteBuffer import com.google.common.primitives.{Bytes, Longs} import com.wavesplatform.account.AddressScheme import com.wavesplatform.common.state.ByteStr import com.wavesplatform.common.utils._ import com.wavesplatform.lang.v1.Serde import com.wavesplatform.lang.v1.compiler.Terms import com.wavesplatform.lang.v1.compiler.Terms.{EXPR, FUNCTION_CALL} import com.wavesplatform.serialization._ import com.wavesplatform.transaction.Asset.{IssuedAsset, Waves} import com.wavesplatform.transaction.smart.InvokeScriptTransaction import com.wavesplatform.transaction.smart.InvokeScriptTransaction.Payment import com.wavesplatform.transaction.{Asset, TxVersion} import play.api.libs.json.{JsArray, JsObject, JsString, Json} import scala.util.Try object InvokeScriptTxSerializer { def functionCallToJson(fc: Terms.FUNCTION_CALL): JsObject = { Json.obj( "function" -> JsString(fc.function.asInstanceOf[com.wavesplatform.lang.v1.FunctionHeader.User].internalName), "args" -> JsArray( fc.args.map { case Terms.ARR(elements) => Json.obj("type" -> "list", "value" -> elements.map(mapSingleArg)) case other => mapSingleArg(other) } ) ) } private def mapSingleArg(arg: EXPR) = arg match { case Terms.CONST_LONG(num) => Json.obj("type" -> "integer", "value" -> num) case Terms.CONST_BOOLEAN(bool) => Json.obj("type" -> "boolean", "value" -> bool) case Terms.CONST_BYTESTR(bytes) => Json.obj("type" -> "binary", "value" -> bytes.base64) case Terms.CONST_STRING(str) => Json.obj("type" -> "string", "value" -> str) case arg => throw new NotImplementedError(s"Not supported: $arg") } def toJson(tx: InvokeScriptTransaction): JsObject = { import tx._ BaseTxJson.toJson(tx) ++ Json.obj( "dApp" -> dAppAddressOrAlias.stringRepr, "payment" -> payments ) ++ (funcCallOpt match { case Some(fc) => Json.obj("call" -> this.functionCallToJson(fc)) case None => JsObject.empty }) } def bodyBytes(tx: InvokeScriptTransaction): Array[Byte] = { import tx._ version match { case TxVersion.V1 => Bytes.concat( Array(builder.typeId, version, chainId), sender.arr, dAppAddressOrAlias.bytes, Deser.serializeOption(funcCallOpt)(Serde.serialize(_)), Deser.serializeArrays(payments.map(pmt => Longs.toByteArray(pmt.amount) ++ pmt.assetId.byteRepr)), Longs.toByteArray(fee), feeAssetId.byteRepr, Longs.toByteArray(timestamp) ) case _ => PBTransactionSerializer.bodyBytes(tx) } } def toBytes(tx: InvokeScriptTransaction): Array[Byte] = if (tx.isProtobufVersion) PBTransactionSerializer.bytes(tx) else Bytes.concat(Array(0: Byte), this.bodyBytes(tx), tx.proofs.bytes()) def parseBytes(bytes: Array[Byte]): Try[InvokeScriptTransaction] = Try { def parsePayment(arr: Array[Byte]): Payment = { val amt = Longs.fromByteArray(arr.take(8)) val (maybeAssetId, _) = Deser.parseOption(arr, 8, 32)(ByteStr.apply) val asset = maybeAssetId.fold[Asset](Waves)(IssuedAsset) Payment(amt, asset) } val buf = ByteBuffer.wrap(bytes) require(buf.getByte == 0 && buf.getByte == InvokeScriptTransaction.typeId && buf.getByte == 1, "transaction type mismatch") val chainId = buf.getByte require(chainId == AddressScheme.current.chainId, "chainId mismatch") val sender = buf.getPublicKey val dApp = buf.getAddressOrAlias val functionCall = Deser.parseOption(buf)(Serde.deserialize(_).explicitGet().asInstanceOf[FUNCTION_CALL]) val payments = Deser.parseArrays(buf).map(parsePayment) val fee = buf.getLong val feeAssetId = buf.getAsset val timestamp = buf.getLong InvokeScriptTransaction(TxVersion.V1, sender, dApp, functionCall, payments, fee, feeAssetId, timestamp, buf.getProofs, chainId) } }
Example 6
Source File: OutputTransformer.scala From play-swagger with Apache License 2.0 | 5 votes |
package com.iheart.playSwagger import java.util.regex.Pattern import com.iheart.playSwagger.OutputTransformer.SimpleOutputTransformer import play.api.libs.json.{ JsArray, JsString, JsValue, JsObject } import scala.util.matching.Regex import scala.util.{ Success, Failure, Try } def >=>(b: JsObject ⇒ Try[JsObject]): OutputTransformer = SimpleOutputTransformer { value: JsObject ⇒ this.apply(value).flatMap(b) } } object OutputTransformer { final case class SimpleOutputTransformer(run: (JsObject ⇒ Try[JsObject])) extends OutputTransformer { override def apply(value: JsObject): Try[JsObject] = run(value) } def traverseTransformer(vals: JsArray)(transformer: JsValue ⇒ Try[JsValue]): Try[JsArray] = { val tryElements = vals.value.map { case value: JsObject ⇒ traverseTransformer(value)(transformer) case value: JsArray ⇒ traverseTransformer(value)(transformer) case value: JsValue ⇒ transformer(value) } val failures: Seq[Failure[JsValue]] = tryElements.filter(_.isInstanceOf[Failure[_]]).asInstanceOf[Seq[Failure[JsValue]]] if (failures.nonEmpty) { Failure(failures.head.exception) } else { Success(JsArray(tryElements.asInstanceOf[Seq[Success[JsValue]]].map(_.value))) } } def traverseTransformer(obj: JsObject)(transformer: JsValue ⇒ Try[JsValue]): Try[JsObject] = { val tryFields = obj.fields.map { case (key, value: JsObject) ⇒ (key, traverseTransformer(value)(transformer)) case (key, values: JsArray) ⇒ (key, traverseTransformer(values)(transformer)) case (key, value: JsValue) ⇒ (key, transformer(value)) } val failures: Seq[(String, Failure[JsValue])] = tryFields .filter(_._2.isInstanceOf[Failure[_]]) .asInstanceOf[Seq[(String, Failure[JsValue])]] if (failures.nonEmpty) { Failure(failures.head._2.exception) } else { Success(JsObject(tryFields.asInstanceOf[Seq[(String, Success[JsValue])]].map { case (key, Success(result)) ⇒ (key, result) })) } } } class PlaceholderVariablesTransformer(map: String ⇒ Option[String], pattern: Regex = "^\\$\\{(.*)\\}$".r) extends OutputTransformer { def apply(value: JsObject) = OutputTransformer.traverseTransformer(value) { case JsString(pattern(key)) ⇒ map(key) match { case Some(result) ⇒ Success(JsString(result)) case None ⇒ Failure(new IllegalStateException(s"Unable to find variable $key")) } case e: JsValue ⇒ Success(e) } } final case class MapVariablesTransformer(map: Map[String, String]) extends PlaceholderVariablesTransformer(map.get) class EnvironmentVariablesTransformer extends PlaceholderVariablesTransformer((key: String) ⇒ Option(System.getenv(key)))
Example 7
Source File: DataFrameConverterSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.utils import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{DataFrame, Row} import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{BeforeAndAfterAll, FunSpec, Matchers} import play.api.libs.json.{JsArray, JsString, Json} import test.utils.SparkContextProvider import scala.collection.mutable class DataFrameConverterSpec extends FunSpec with MockitoSugar with Matchers with BeforeAndAfterAll { lazy val spark = SparkContextProvider.sparkContext override protected def afterAll(): Unit = { spark.stop() super.afterAll() } val dataFrameConverter: DataFrameConverter = new DataFrameConverter val mockDataFrame = mock[DataFrame] val mockRdd = spark.parallelize(Seq(Row(new mutable.WrappedArray.ofRef(Array("test1", "test2")), 2, null))) val mockStruct = mock[StructType] val columns = Seq("foo", "bar").toArray doReturn(mockStruct).when(mockDataFrame).schema doReturn(columns).when(mockStruct).fieldNames doReturn(mockRdd).when(mockDataFrame).rdd describe("DataFrameConverter") { describe("#convert") { it("should convert to a valid JSON object") { val someJson = dataFrameConverter.convert(mockDataFrame, "json") val jsValue = Json.parse(someJson.get) jsValue \ "columns" should be (JsArray(Seq(JsString("foo"), JsString("bar")))) jsValue \ "rows" should be (JsArray(Seq( JsArray(Seq(JsString("[test1, test2]"), JsString("2"), JsString("null"))) ))) } it("should convert to csv") { val csv = dataFrameConverter.convert(mockDataFrame, "csv").get val values = csv.split("\n") values(0) shouldBe "foo,bar" values(1) shouldBe "[test1, test2],2,null" } it("should convert to html") { val html = dataFrameConverter.convert(mockDataFrame, "html").get html.contains("<th>foo</th>") should be(true) html.contains("<th>bar</th>") should be(true) html.contains("<td>[test1, test2]</td>") should be(true) html.contains("<td>2</td>") should be(true) html.contains("<td>null</td>") should be(true) } it("should convert limit the selection") { val someLimited = dataFrameConverter.convert(mockDataFrame, "csv", 1) val limitedLines = someLimited.get.split("\n") limitedLines.length should be(2) } it("should return a Failure for invalid types") { val result = dataFrameConverter.convert(mockDataFrame, "Invalid Type") result.isFailure should be(true) } } } }
Example 8
Source File: PersistenceIT.scala From metronome with Apache License 2.0 | 5 votes |
package dcos.metronome.integrationtest import org.scalatest.time.{Minutes, Span} import play.api.libs.json.{JsArray, JsObject} import scala.concurrent.Await import scala.concurrent.duration._ class PersistenceIT extends MetronomeITBase { override val timeLimit = Span(3, Minutes) override lazy implicit val patienceConfig = PatienceConfig(180.seconds, interval = 1.second) "A job and run should be available after a restart of metronome" in withFixture() { f => When("A job description is posted") val jobId = "persistence-my-job" val jobDef = s""" |{ | "id": "$jobId", | "description": "A job that sleeps", | "run": { | "cmd": "sleep 120", | "cpus": 0.02, | "mem": 64, | "disk": 0 | } |} """.stripMargin val resp = f.metronome.createJob(jobDef) Then("The response should be OK") resp shouldBe Created When("A job run is started") val startRunResp = f.metronome.startRun(jobId) Then("The response should be OK") startRunResp shouldBe Created eventually(timeout(30.seconds)) { val runsJson = f.metronome.getRuns(jobId) runsJson shouldBe OK val runs = runsJson.entityJson.as[JsArray] runs.value should have size 1 val run = runs.value.head.as[JsObject] val status = run.value("status").as[String] status shouldBe "ACTIVE" } When("Metronome is stopped and restarted") Await.result(f.metronomeFramework.stop(), 30.seconds) Await.result(f.metronomeFramework.start(), 60.seconds) Then("The Job and the Run should be available") val jobResp = f.metronome.getJob(jobId) jobResp shouldBe OK (jobResp.entityJson \ "id").as[String] shouldBe jobId val runResp = f.metronome.getRuns(jobId) val runs = runResp.entityJson.as[JsArray] runs.value.length shouldBe 1 } }
Example 9
Source File: SimpleJobsIT.scala From metronome with Apache License 2.0 | 5 votes |
package dcos.metronome.integrationtest import play.api.libs.json.{JsArray, JsObject} import scala.concurrent.duration._ class SimpleJobsIT extends MetronomeITBase { override lazy implicit val patienceConfig = PatienceConfig(180.seconds, interval = 1.second) "A job run should complete" in withFixture() { f => When("A job description is posted") val appId = "my-job" val jobDef = s""" |{ | "id": "${appId}", | "description": "A job that sleeps", | "run": { | "cmd": "sleep 60", | "cpus": 0.01, | "mem": 32, | "disk": 0 | } |} """.stripMargin val resp = f.metronome.createJob(jobDef) Then("The response should be OK") resp shouldBe Created When("A job run is started") val startRunResp = f.metronome.startRun(appId) Then("The response should be OK") startRunResp shouldBe Created eventually(timeout(30.seconds)) { val runsJson = f.metronome.getRuns(appId) runsJson shouldBe OK val runs = runsJson.entityJson.as[JsArray] runs.value should have size 1 val run = runs.value.head.as[JsObject] val status = run.value("status").as[String] status shouldBe "ACTIVE" } } }
Example 10
Source File: JSONBuilder.scala From mimir with Apache License 2.0 | 5 votes |
package mimir.util; import mimir.algebra.{PrimitiveValue,StringPrimitive,TypePrimitive}; import play.api.libs.json.JsString import play.api.libs.json.JsArray import play.api.libs.json.JsObject import play.api.libs.json.JsValue import play.api.libs.json.JsNumber import play.api.libs.json.JsNull import play.api.libs.json.JsBoolean import mimir.algebra.NullPrimitive import mimir.algebra.RowIdPrimitive import mimir.algebra.IntPrimitive import mimir.algebra.FloatPrimitive import mimir.algebra.BoolPrimitive import mimir.algebra.TimestampPrimitive import mimir.algebra.DatePrimitive object JSONBuilder { def list(content: Seq[Any]): String = listJs(content).toString() private def listJs(content: Seq[Any]): JsArray = JsArray(content.map { el => value(el) }) def dict(content: Map[String,Any]): String = dictJs(content).toString() def dict(content: Seq[(String,Any)]): String = JsObject(content.map( (x) => x._1.toLowerCase() -> value(x._2))).toString() private def dictJs(content: Map[String,Any]): JsObject = JsObject(content.map { el => el._1 -> value(el._2) } ) def string(content: String): String = { value(content).toString() } def int(content: Int): String = { value(content).toString() } def double(content: Double): String = { value(content).toString() } def boolean(content: Boolean): String = { value(content).toString() } def prim(content: PrimitiveValue) = { primJs(content).toString() } private def primJs(content: PrimitiveValue) = { content match { case StringPrimitive(s) => JsString(s) case TypePrimitive(t) => JsString(t.toString()) case NullPrimitive() => JsNull case RowIdPrimitive(s) => JsString(s) case IntPrimitive(i) => JsNumber(i) case FloatPrimitive(f) => JsNumber(f) case BoolPrimitive(b) => JsBoolean(b) case TimestampPrimitive(_,_,_,_,_,_,_) => JsString(content.asString) case DatePrimitive(_,_,_) => JsString(content.asString) case _ => JsString(content.toString()) } } private def value(content: Any): JsValue = { content match { case s:String => { try { play.api.libs.json.Json.parse(s) } catch { case t: Throwable => JsString(s) } } case null => JsNull case i:Int => JsNumber(i) case f:Float => JsNumber(f) case l:Long => JsNumber(l) case d:Double => JsNumber(d) case b:Boolean => JsBoolean(b) case seq:Seq[Any] => listJs(seq) case map:Map[_,_] => dictJs(map.asInstanceOf[Map[String,Any]]) case jsval:JsValue => jsval case prim:PrimitiveValue => primJs(prim) case _ => JsString(content.toString()) } } }
Example 11
Source File: NamedEntityController.scala From pujangga with Apache License 2.0 | 5 votes |
package controllers import scala.collection.JavaConverters._ import scala.collection.mutable.ListBuffer import scala.util.{Failure, Success, Try} import javax.inject._ import play.api.libs.json.{JsArray, JsValue, Json} import play.api.mvc._ import IndonesianNLP._ @Singleton class NamedEntityController @Inject()(cc: ControllerComponents) extends AbstractController(cc) { val nETagger = new IndonesianNETagger def tagger: Action[JsValue] = Action(parse.json) { implicit request: Request[JsValue] => val string = (request.body \ "string").as[String] Try { nETagger.extractNamedEntity(string) } match { case Success(extracted) => val namedEntityList = new ListBuffer[JsValue]() for(tag <- extracted.asScala) { namedEntityList += Json.toJson(tag) } Ok(Json.obj("status" -> "success", "data" -> JsArray(namedEntityList))) case Failure(failure) => InternalServerError(Json.obj("status" -> "error", "message" -> failure.toString)) } } }
Example 12
Source File: PhraseController.scala From pujangga with Apache License 2.0 | 5 votes |
package controllers import scala.collection.JavaConverters._ import scala.collection.mutable.ListBuffer import scala.util.{Failure, Success, Try} import javax.inject._ import play.api.libs.json.{JsArray, JsValue, Json} import play.api.mvc._ import IndonesianNLP._ @Singleton class PhraseController @Inject()(cc: ControllerComponents) extends AbstractController(cc) { val phraseChunker = new IndonesianPhraseChunker def chunker: Action[JsValue] = Action(parse.json) { implicit request: Request[JsValue] => val string = (request.body \ "string").as[String] Try { phraseChunker.doPhraseChunker(string) } match { case Success(chunked) => val chunkListString = new ListBuffer[String]() val chunkListJs = new ListBuffer[JsValue]() for(chunk <- chunked.asScala) { for(phrase <- chunk) { chunkListString += phrase if(chunk.indexOf(phrase) % 2 == 1) { chunkListJs += Json.toJson(phrase) } } } val chunkMap = chunkListString.grouped(2).collect { case ListBuffer(k, v) => k -> v }.toMap Ok(Json.obj("status" -> "success", "data" -> Json.obj("map" -> Json.toJson(chunkMap), "list" -> JsArray(chunkListJs)))) case Failure(failure) => InternalServerError(Json.obj("status" -> "error", "message" -> failure.toString)) } } }
Example 13
Source File: PartOfSpeechController.scala From pujangga with Apache License 2.0 | 5 votes |
package controllers import scala.collection.JavaConverters._ import scala.collection.mutable.ListBuffer import scala.util.{Failure, Success, Try} import javax.inject._ import play.api.libs.json.{JsArray, JsValue, Json} import play.api.mvc._ import IndonesianNLP._ @Singleton class PartOfSpeechController @Inject()(cc: ControllerComponents) extends AbstractController(cc) { def tagger: Action[JsValue] = Action(parse.json) { implicit request: Request[JsValue] => val string = (request.body \ "string").as[String] Try { IndonesianPOSTagger.doPOSTag(string) } match { case Success(tagged) => val tagListString = new ListBuffer[String]() val tagListJs = new ListBuffer[JsValue]() for(tag <- tagged.asScala) { for(word <- tag) { tagListString += word if(tag.indexOf(word) % 2 == 1) { tagListJs += Json.toJson(word) } } } val tagMap = tagListString.grouped(2).collect { case ListBuffer(k, v) => k -> v }.toMap Ok(Json.obj("status" -> "success", "data" -> Json.obj("map" -> Json.toJson(tagMap), "list" -> JsArray(tagListJs)))) case Failure(failure) => InternalServerError(Json.obj("status" -> "error", "message" -> failure.toString)) } } }
Example 14
Source File: Helpers.scala From CM-Well with Apache License 2.0 | 5 votes |
import play.api.libs.json.{JsArray, JsValue} import scala.language.{implicitConversions, postfixOps} import scala.util.{Failure, Try} trait Helpers { implicit class JsValueExtensions(v: JsValue) { def getValue = withPrettyException({(v\"value").as[String]}, "getValue") def getQuad = withPrettyException({(v\"quad").as[String]}, "getQuad") def getArr(prop: String): collection.Seq[JsValue] = withPrettyException(_=>{((v \ prop).get: @unchecked) match { case JsArray(seq) => seq }},"getArr",prop) def getFirst(prop: String) = getArr(prop).head def getValueOfFirst(prop: String) = getFirst(prop).getValue private def withPrettyException(f: => String, desc: String):String = Try(f).getOrElse(throw new Exception(s"Operation $desc failed on $v")) private def withPrettyException(f: String => collection.Seq[JsValue], desc: String, prop: String):collection.Seq[JsValue] = { Try(f(prop)).recoverWith { case t: Throwable => Failure(new Exception(s"""Operation $desc("$prop") failed on $v""",t)) }.get } } }
Example 15
Source File: HttpV1LevelAgg.scala From matcher with MIT License | 5 votes |
package com.wavesplatform.dex.api.http.entities import com.wavesplatform.dex.domain.asset.AssetPair import com.wavesplatform.dex.domain.model.Denormalization import com.wavesplatform.dex.error.ErrorFormatterContext import com.wavesplatform.dex.json import com.wavesplatform.dex.model.LevelAgg import io.swagger.annotations.ApiModelProperty import play.api.libs.json.{Format, JsArray, _} case class HttpV1LevelAgg(@ApiModelProperty( dataType = "string", example = "831.87648950" ) amount: Double, @ApiModelProperty( dataType = "string", example = "0.00012079" ) price: Double) object HttpV1LevelAgg { implicit val doubleFormat: Format[Double] = json.stringAsDoubleFormat implicit val httpV1LevelAggReads: Reads[HttpV1LevelAgg] = Reads { case JsArray(value) if value.lengthCompare(2) == 0 => JsSuccess(HttpV1LevelAgg(value(1).as[Double], value(0).as[Double])) case x => JsError(s"Cannot parse $x as ApiV1LevelAgg") } def fromLevelAgg(la: LevelAgg, assetPair: AssetPair)(implicit efc: ErrorFormatterContext): HttpV1LevelAgg = HttpV1LevelAgg( Denormalization.denormalizeAmountAndFee(la.amount, efc.assetDecimals(assetPair.amountAsset)).toDouble, Denormalization.denormalizePrice(la.price, efc.assetDecimals(assetPair.amountAsset), efc.assetDecimals(assetPair.priceAsset)).toDouble ) }
Example 16
Source File: WebhookDelivererWorker.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.worker.workers import akka.http.scaladsl.model.ContentTypes import cool.graph.akkautil.http.{RequestFailedError, SimpleHttpClient} import cool.graph.cuid.Cuid import cool.graph.messagebus.{QueueConsumer, QueuePublisher} import cool.graph.worker.payloads.{LogItem, Webhook} import cool.graph.worker.utils.Utils import play.api.libs.json.{JsArray, JsObject, Json} import scala.concurrent.{ExecutionContext, Future} import scala.util.{Failure, Success, Try} case class WebhookDelivererWorker( httpClient: SimpleHttpClient, webhooksConsumer: QueueConsumer[Webhook], logsPublisher: QueuePublisher[LogItem] )(implicit ec: ExecutionContext) extends Worker { import scala.concurrent.ExecutionContext.Implicits.global // Current decision: Do not retry delivery, treat all return codes as work item "success" (== ack). val consumeFn = (wh: Webhook) => { val startTime = System.currentTimeMillis() def handleError(msg: String) = { val timing = System.currentTimeMillis() - startTime val timestamp = Utils.msqlDateTime3Timestamp() val logItem = LogItem(Cuid.createCuid(), wh.projectId, wh.functionId, wh.requestId, "FAILURE", timing, timestamp, formatFunctionErrorMessage(msg)) logsPublisher.publish(logItem) } httpClient .post(wh.url, wh.payload, ContentTypes.`application/json`, wh.headers.toList) .map { response => val timing = System.currentTimeMillis() - startTime val body = response.body val timestamp = Utils.msqlDateTime3Timestamp() val functionReturnValue = formatFunctionSuccessMessage(wh.payload, body.getOrElse("")) val logItem = LogItem(Cuid.createCuid(), wh.projectId, wh.functionId, wh.requestId, "SUCCESS", timing, timestamp, functionReturnValue) logsPublisher.publish(logItem) } .recover { case e: RequestFailedError => val message = s"Call to ${wh.url} failed with status ${e.response.status}, response body '${e.response.body.getOrElse("")}' and headers [${formatHeaders(e.response.headers)}]" handleError(message) case e: Throwable => val message = s"Call to ${wh.url} failed with: ${e.getMessage}" handleError(message) } } lazy val consumerRef = webhooksConsumer.withConsumer(consumeFn) def formatFunctionErrorMessage(errMsg: String): JsObject = Json.obj("error" -> errMsg) override def start: Future[_] = Future { consumerRef } override def stop: Future[_] = Future { consumerRef.stop } }
Example 17
Source File: EndpointSubscriberService.scala From HAT2.0 with GNU Affero General Public License v3.0 | 5 votes |
package org.hatdex.hat.api.service.monitoring import org.hatdex.hat.api.models._ import org.hatdex.hat.api.service.richData.JsonDataTransformer import org.joda.time.DateTime import play.api.Logger import play.api.libs.json.Reads._ import play.api.libs.json.{ JsArray, JsValue, Json, _ } case class EndpointQueryException(message: String = "", cause: Throwable = None.orNull) extends Exception(message, cause) object EndpointSubscriberService { private val logger = Logger(this.getClass) def matchesBundle(data: EndpointData, bundle: EndpointDataBundle): Boolean = { val endpointQueries = bundle.flatEndpointQueries .filter(_.endpoint == data.endpoint) endpointQueries collectFirst { case q if q.filters.isEmpty => true case q if q.filters.exists(dataMatchesFilters(data, _)) => true } getOrElse { false } } private implicit val dateReads: Reads[DateTime] = JodaReads.jodaDateReads("yyyy-MM-dd'T'HH:mm:ssZ") private def dataMatchesFilters(data: EndpointData, filters: Seq[EndpointQueryFilter]): Boolean = { logger.debug("Checking if data matches provided filters") filters.exists { f => data.data.transform(JsonDataTransformer.parseJsPath(f.field).json.pick).fold( invalid = { _ => false }, valid = { fieldData => val data = f.transformation map { case _: FieldTransformation.Identity => fieldData case trans: FieldTransformation.DateTimeExtract => Json.toJson(dateTimeExtractPart(fieldData.as[DateTime](dateReads), trans.part)) case trans: FieldTransformation.TimestampExtract => Json.toJson(dateTimeExtractPart(new DateTime(fieldData.as[Long] * 1000L), trans.part)) case trans => throw EndpointQueryException(s"Invalid field transformation `${trans.getClass.getName}` for ongoing tracking") } getOrElse { fieldData } f.operator match { case op: FilterOperator.In => jsContains(op.value, data) case op: FilterOperator.Contains => jsContains(data, op.value) case op: FilterOperator.Between => jsLessThanOrEqual(op.lower, data) && jsLessThanOrEqual(data, op.upper) case op => throw EndpointQueryException(s"Invalid match operator `${op.getClass.getName}` for ongoing tracking") } }) } } private def dateTimeExtractPart(d: DateTime, part: String): Int = { part match { case "milliseconds" => d.getMillisOfSecond case "second" => d.getSecondOfMinute case "minute" => d.getMinuteOfDay case "hour" => d.getHourOfDay case "day" => d.getDayOfMonth case "week" => d.getWeekOfWeekyear case "month" => d.getMonthOfYear case "year" => d.getYear case "decade" => d.getYear / 10 case "century" => d.getCenturyOfEra case "dow" => d.getDayOfWeek case "doy" => d.getDayOfYear case "epoch" => (d.getMillis / 1000).toInt } } private def jsContains(contains: JsValue, contained: JsValue): Boolean = { (contains, contained) match { case (a: JsObject, b: JsObject) => b.fieldSet.subsetOf(a.fieldSet) case (a: JsArray, b: JsArray) => a.value.containsSlice(b.value) case (a: JsArray, b: JsValue) => a.value.contains(b) case (a: JsValue, b: JsValue) => a == b case _ => false } } private def jsLessThanOrEqual(a: JsValue, b: JsValue): Boolean = { (a, b) match { case (aa: JsNumber, bb: JsNumber) => aa.value <= bb.value case (aa: JsString, bb: JsString) => aa.value <= bb.value case _ => false } } }
Example 18
Source File: BlockFilterTest.scala From bitcoin-s with MIT License | 5 votes |
package org.bitcoins.core.gcs import org.bitcoins.core.protocol.blockchain.Block import org.bitcoins.core.protocol.script.ScriptPubKey import org.bitcoins.crypto.DoubleSha256DigestBE import org.bitcoins.testkit.util.BitcoinSUnitTest import play.api.libs.json.{JsArray, Json} import scala.io.Source class BlockFilterTest extends BitcoinSUnitTest { behavior of "BlockFilter" // https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki#appendix-c-test-vectors case class Bip158TestCase( blockHeight: Int, blockHash: DoubleSha256DigestBE, block: Block, prevOutputScripts: Vector[ScriptPubKey], prevHeader: DoubleSha256DigestBE, filter: GolombFilter, header: DoubleSha256DigestBE, notes: String ) { val clue: String = s"Test Notes: $notes" def runTest(): org.scalatest.Assertion = { val constructedFilter = BlockFilter(block, prevOutputScripts) assert(constructedFilter.encodedData.bytes == filter.encodedData.bytes, clue) val matcher = new BinarySearchFilterMatcher(filter) val constructedMatcher = new BinarySearchFilterMatcher(constructedFilter) assert(constructedMatcher.decodedHashes == matcher.decodedHashes, clue) val constructedHeader = constructedFilter.getHeader(prevHeader.flip) assert(constructedHeader.hash == header.flip, clue) } } object Bip158TestCase { //["Block Height,Block Hash,Block,[Prev Output Scripts for Block],Previous Basic Header,Basic Filter,Basic Header,Notes"] def fromJsArray(array: JsArray): Bip158TestCase = { val parseResult = for { height <- array(0).validate[Int] blockHash <- array(1).validate[String].map(DoubleSha256DigestBE.fromHex) block <- array(2).validate[String].map(Block.fromHex) scriptArray <- array(3).validate[JsArray] scripts = parseScripts(scriptArray) prevHeader <- array(4) .validate[String] .map(DoubleSha256DigestBE.fromHex) filter <- array(5) .validate[String] .map(BlockFilter.fromHex(_, blockHash.flip)) header <- array(6).validate[String].map(DoubleSha256DigestBE.fromHex) notes <- array(7).validate[String] } yield Bip158TestCase(height, blockHash, block, scripts, prevHeader, filter, header, notes) parseResult.get } private def parseScripts(array: JsArray): Vector[ScriptPubKey] = { val hexScripts = array.validate[Vector[String]].get hexScripts.map(ScriptPubKey.fromAsmHex) } } it must "pass bip 158 test vectors" in { val source = Source.fromURL(getClass.getResource("/testnet-19.json")) val vec: Vector[JsArray] = Json.parse(source.mkString).validate[Vector[JsArray]].get.tail val testCases = vec.map(Bip158TestCase.fromJsArray) testCases.foreach(_.runTest()) } }
Example 19
Source File: MultisigRpc.scala From bitcoin-s with MIT License | 5 votes |
package org.bitcoins.rpc.client.common import org.bitcoins.commons.jsonmodels.bitcoind.MultiSigResult import org.bitcoins.commons.jsonmodels.bitcoind.RpcOpts.AddressType import org.bitcoins.commons.serializers.JsonSerializers._ import org.bitcoins.commons.serializers.JsonWriters._ import org.bitcoins.core.protocol.P2PKHAddress import org.bitcoins.crypto.ECPublicKey import play.api.libs.json.{JsArray, JsNumber, JsString, Json} import scala.concurrent.Future trait MultisigRpc { self: Client => private def addMultiSigAddress( minSignatures: Int, keys: Vector[Either[ECPublicKey, P2PKHAddress]], account: String = "", addressType: Option[AddressType]): Future[MultiSigResult] = { def keyToString(key: Either[ECPublicKey, P2PKHAddress]): JsString = key match { case Right(k) => JsString(k.value) case Left(k) => JsString(k.hex) } val params = List(JsNumber(minSignatures), JsArray(keys.map(keyToString)), JsString(account)) ++ addressType.map(Json.toJson(_)).toList bitcoindCall[MultiSigResult]("addmultisigaddress", params) } def addMultiSigAddress( minSignatures: Int, keys: Vector[Either[ECPublicKey, P2PKHAddress]]): Future[MultiSigResult] = addMultiSigAddress(minSignatures, keys, addressType = None) def addMultiSigAddress( minSignatures: Int, keys: Vector[Either[ECPublicKey, P2PKHAddress]], account: String): Future[MultiSigResult] = addMultiSigAddress(minSignatures, keys, account, None) def addMultiSigAddress( minSignatures: Int, keys: Vector[Either[ECPublicKey, P2PKHAddress]], addressType: AddressType): Future[MultiSigResult] = addMultiSigAddress(minSignatures, keys, addressType = Some(addressType)) def addMultiSigAddress( minSignatures: Int, keys: Vector[Either[ECPublicKey, P2PKHAddress]], account: String, addressType: AddressType): Future[MultiSigResult] = addMultiSigAddress(minSignatures, keys, account, Some(addressType)) def createMultiSig( minSignatures: Int, keys: Vector[ECPublicKey]): Future[MultiSigResult] = { bitcoindCall[MultiSigResult]( "createmultisig", List(JsNumber(minSignatures), Json.toJson(keys.map(_.hex)))) } }
Example 20
Source File: DataFrameConverterSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.utils import org.apache.spark.sql.types.StructType import org.apache.spark.sql.{DataFrame, Row} import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{BeforeAndAfterAll, FunSpec, Matchers} import play.api.libs.json.{JsArray, JsString, Json} import test.utils.SparkContextProvider import scala.collection.mutable class DataFrameConverterSpec extends FunSpec with MockitoSugar with Matchers with BeforeAndAfterAll { lazy val spark = SparkContextProvider.sparkContext override protected def afterAll(): Unit = { spark.stop() super.afterAll() } val dataFrameConverter: DataFrameConverter = new DataFrameConverter val mockDataFrame = mock[DataFrame] val mockRdd = spark.parallelize(Seq(Row(new mutable.WrappedArray.ofRef(Array("test1", "test2")), 2, null))) val mockStruct = mock[StructType] val columns = Seq("foo", "bar").toArray doReturn(mockStruct).when(mockDataFrame).schema doReturn(columns).when(mockStruct).fieldNames doReturn(mockRdd).when(mockDataFrame).rdd describe("DataFrameConverter") { describe("#convert") { it("should convert to a valid JSON object") { val someJson = dataFrameConverter.convert(mockDataFrame, "json") val jsValue = Json.parse(someJson.get) jsValue \ "columns" should be (JsArray(Seq(JsString("foo"), JsString("bar")))) jsValue \ "rows" should be (JsArray(Seq( JsArray(Seq(JsString("[test1, test2]"), JsString("2"), JsString("null"))) ))) } it("should convert to csv") { val csv = dataFrameConverter.convert(mockDataFrame, "csv").get val values = csv.split("\n") values(0) shouldBe "foo,bar" values(1) shouldBe "[test1, test2],2,null" } it("should convert to html") { val html = dataFrameConverter.convert(mockDataFrame, "html").get html.contains("<th>foo</th>") should be(true) html.contains("<th>bar</th>") should be(true) html.contains("<td>[test1, test2]</td>") should be(true) html.contains("<td>2</td>") should be(true) html.contains("<td>null</td>") should be(true) } it("should convert limit the selection") { val someLimited = dataFrameConverter.convert(mockDataFrame, "csv", 1) val limitedLines = someLimited.get.split("\n") limitedLines.length should be(2) } it("should return a Failure for invalid types") { val result = dataFrameConverter.convert(mockDataFrame, "Invalid Type") result.isFailure should be(true) } } } }
Example 21
Source File: SchemaReadsSpec.scala From play-json-schema-validator with Apache License 2.0 | 5 votes |
package com.eclipsesource.schema.internal.serialization import com.eclipsesource.schema._ import com.eclipsesource.schema.{JsonSource, SchemaType, SchemaValue} import com.eclipsesource.schema.drafts.{Version4, Version7} import com.eclipsesource.schema.internal.draft7.constraints.{AnyConstraints7, NumberConstraints7, StringConstraints7} import org.specs2.mutable.Specification import play.api.libs.json.{JsArray, JsBoolean, JsString, Json} class SchemaReadsSpec extends Specification { "Schema Reads for draft 4" should { import Version4._ "not fail with match error (#104)" in { val schema = JsonSource.schemaFromString(""" |{ | "someProp": {"type": "sting"} |}""".stripMargin) schema.isSuccess must beTrue } "not be able to read boolean schema" in { Json.fromJson[SchemaType](JsBoolean(true)).isError must beTrue } "fail if exclusiveMinimum is not a boolean" in { val result = JsonSource.schemaFromString( """{ "exclusiveMinimum": 3 }""".stripMargin ) result.asEither must beLeft.like { case error => (error.toJson(0) \ "msgs").get.as[JsArray].value.head == JsString("error.expected.jsboolean") } } } "Schema Reads for draft 7" should { import Version7._ "read boolean schema" in { val booleanSchema = Json.fromJson[SchemaType](JsBoolean(true)).get booleanSchema must beEqualTo(SchemaValue(JsBoolean(true))) } "read compound type with error" in { val schema = JsonSource.schemaFromString(""" |{ | "type": ["number", "string"] |}""".stripMargin) schema.isSuccess must beTrue schema.asOpt must beSome.which( _ == CompoundSchemaType( Seq( SchemaNumber(NumberConstraints7().copy(any = AnyConstraints7().copy(schemaType = Some("number")))), SchemaString(StringConstraints7().copy(any = AnyConstraints7().copy(schemaType = Some("string")))) ) ) ) } } }
Example 22
Source File: AdditionalItemsSpec.scala From play-json-schema-validator with Apache License 2.0 | 5 votes |
package com.eclipsesource.schema import com.eclipsesource.schema.drafts.{Version4, Version7} import com.eclipsesource.schema.test.JsonSpec import org.specs2.mutable.Specification import play.api.libs.json.{JsArray, JsNumber} class AdditionalItemsSpec extends Specification with JsonSpec { "validate draft4" in { import Version4._ implicit val validator: SchemaValidator = SchemaValidator(Some(Version4)) validate("additionalItems", "draft4") } "validate draft7" in { import Version7._ implicit val validator: SchemaValidator = SchemaValidator(Some(Version7)) validate("additionalItems", "draft7") } "AdditionalItems" should { import Version7._ val schema = JsonSource.schemaFromString( """{ | "items": [{}, {}, {}], | "additionalItems": false |}""".stripMargin).get "no additional items present" in { val data = JsArray(Seq(JsNumber(1), JsNumber(2), JsNumber(3))) SchemaValidator(Some(Version4)).validate(schema, data).isSuccess must beTrue } } }
Example 23
Source File: ArrayValidator.scala From play-json-schema-validator with Apache License 2.0 | 5 votes |
package com.eclipsesource.schema.internal.validators import com.eclipsesource.schema.internal.validation.VA import com.eclipsesource.schema.internal.{Keywords, Results, SchemaUtil, ValidatorMessages} import com.eclipsesource.schema.{SchemaArray, SchemaResolutionContext} import com.osinka.i18n.Lang import play.api.libs.json.{JsArray, JsValue} import scalaz.{Failure, Success} object ArrayValidator extends SchemaTypeValidator[SchemaArray] { override def validate(schema: SchemaArray, json: => JsValue, context: SchemaResolutionContext) (implicit lang: Lang): VA[JsValue] = { json match { case JsArray(values) => val elements: Seq[VA[JsValue]] = values.toSeq.zipWithIndex.map { case (jsValue, idx) => schema.item.validate( jsValue, context.updateScope( _.copy(instancePath = context.instancePath \ idx.toString) ) ) } if (elements.exists(_.isFailure)) { Failure(elements.collect { case Failure(err) => err }.reduceLeft(_ ++ _)) } else { val updatedArr = JsArray(elements.collect { case Success(js) => js }) schema.constraints.validate(schema, updatedArr, context) } case _ => Results.failureWithPath( Keywords.Any.Type, ValidatorMessages("err.expected.type", SchemaUtil.typeOfAsString(json)), context, json ) } } }
Example 24
Source File: AnyConstraints4.scala From play-json-schema-validator with Apache License 2.0 | 5 votes |
package com.eclipsesource.schema.internal.draft4.constraints import com.eclipsesource.schema.{SchemaMap, SchemaProp, SchemaResolutionContext, SchemaSeq, SchemaType, SchemaValue} import com.eclipsesource.schema.internal.Keywords import com.eclipsesource.schema.internal.constraints.Constraints.AnyConstraints import com.eclipsesource.schema.internal.validation.{Rule, VA} import com.osinka.i18n.Lang import play.api.libs.json.{JsArray, JsString, JsValue} import scalaz.std.option._ import scalaz.std.set._ import scalaz.syntax.semigroup._ case class AnyConstraints4(schemaType: Option[String] = None, allOf: Option[Seq[SchemaType]] = None, anyOf: Option[Seq[SchemaType]] = None, oneOf: Option[Seq[SchemaType]] = None, definitions: Option[Map[String, SchemaType]] = None, enum: Option[Seq[JsValue]] = None, not: Option[SchemaType] = None, description: Option[String] = None, id: Option[String] = None ) extends AnyConstraints { override def subSchemas: Set[SchemaType] = (definitions.map(_.values.toSet) |+| allOf.map(_.toSet) |+| anyOf.map(_.toSet) |+| oneOf.map(_.toSet)) .getOrElse(Set.empty[SchemaType]) override def resolvePath(path: String): Option[SchemaType] = path match { case Keywords.Any.Type => schemaType.map(t => SchemaValue(JsString(t))) case Keywords.Any.AllOf => allOf.map(types => SchemaSeq(types)) case Keywords.Any.AnyOf => anyOf.map(types => SchemaSeq(types)) case Keywords.Any.OneOf => oneOf.map(types => SchemaSeq(types)) case Keywords.Any.Definitions => definitions.map(entries => SchemaMap( Keywords.Any.Definitions, entries.toSeq.map { case (name, schema) => SchemaProp(name, schema) }) ) case Keywords.Any.Enum => enum.map(e => SchemaValue(JsArray(e))) case Keywords.Any.Not => not case "id" => id.map(id => SchemaValue(JsString(id))) case _ => None } import com.eclipsesource.schema.internal.validators.AnyConstraintValidators._ override def validate(schema: SchemaType, json: JsValue, context: SchemaResolutionContext)(implicit lang: Lang): VA[JsValue] = { val reader: scalaz.Reader[SchemaResolutionContext, Rule[JsValue, JsValue]] = for { allOfRule <- validateAllOf(schema, allOf) anyOfRule <- validateAnyOf(schema, anyOf) oneOfRule <- validateOneOf(schema, oneOf) enumRule <- validateEnum(enum) notRule <- validateNot(not) } yield allOfRule |+| anyOfRule |+| oneOfRule |+| enumRule |+| notRule reader .run(context) .repath(_.compose(context.instancePath)) .validate(json) } }
Example 25
Source File: KeyAuthSrv.scala From Cortex with GNU Affero General Public License v3.0 | 5 votes |
package org.thp.cortex.services import java.util.Base64 import javax.inject.{Inject, Singleton} import scala.concurrent.{ExecutionContext, Future} import scala.util.Random import play.api.libs.json.JsArray import play.api.mvc.RequestHeader import akka.stream.Materializer import akka.stream.scaladsl.Sink import org.elastic4play.controllers.Fields import org.elastic4play.services.{AuthCapability, AuthContext, AuthSrv} import org.elastic4play.{AuthenticationError, BadRequestError} @Singleton class KeyAuthSrv @Inject()(userSrv: UserSrv, implicit val ec: ExecutionContext, implicit val mat: Materializer) extends AuthSrv { override val name = "key" final protected def generateKey(): String = { val bytes = Array.ofDim[Byte](24) Random.nextBytes(bytes) Base64.getEncoder.encodeToString(bytes) } override val capabilities = Set(AuthCapability.authByKey) override def authenticate(key: String)(implicit request: RequestHeader): Future[AuthContext] = { import org.elastic4play.services.QueryDSL._ // key attribute is sensitive so it is not possible to search on that field userSrv .find("status" ~= "Ok", Some("all"), Nil) ._1 .filter(_.key().contains(key)) .runWith(Sink.headOption) .flatMap { case Some(user) ⇒ userSrv.getFromUser(request, user, name) case None ⇒ Future.failed(AuthenticationError("Authentication failure")) } } override def renewKey(username: String)(implicit authContext: AuthContext): Future[String] = { val newKey = generateKey() userSrv.update(username, Fields.empty.set("key", newKey)).map(_ ⇒ newKey) } override def getKey(username: String)(implicit authContext: AuthContext): Future[String] = userSrv.get(username).map(_.key().getOrElse(throw BadRequestError(s"User $username hasn't key"))) override def removeKey(username: String)(implicit authContext: AuthContext): Future[Unit] = userSrv.update(username, Fields.empty.set("key", JsArray())).map(_ ⇒ ()) }
Example 26
Source File: User.scala From Cortex with GNU Affero General Public License v3.0 | 5 votes |
package org.thp.cortex.models import scala.concurrent.Future import play.api.libs.json.{JsArray, JsBoolean, JsObject, JsString} import org.elastic4play.models.JsonFormat.enumFormat import org.elastic4play.models.{AttributeDef, BaseEntity, EntityDef, HiveEnumeration, ModelDef, AttributeFormat ⇒ F, AttributeOption ⇒ O} import org.elastic4play.services.{User ⇒ EUser} object UserStatus extends Enumeration with HiveEnumeration { type Type = Value val Ok, Locked = Value implicit val reads = enumFormat(this) } trait UserAttributes { _: AttributeDef ⇒ val login = attribute("login", F.userFmt, "Login of the user", O.form) val userId = attribute("_id", F.stringFmt, "User id (login)", O.model) val key = optionalAttribute("key", F.stringFmt, "API key", O.sensitive, O.unaudited) val userName = attribute("name", F.stringFmt, "Full name (Firstname Lastname)") val roles = multiAttribute("roles", RoleAttributeFormat, "Comma separated role list (READ, WRITE and ADMIN)") val status = attribute("status", F.enumFmt(UserStatus), "Status of the user", UserStatus.Ok) val password = optionalAttribute("password", F.stringFmt, "Password", O.sensitive, O.unaudited) val avatar = optionalAttribute("avatar", F.rawFmt, "Base64 representation of user avatar image", O.unaudited) val preferences = attribute("preferences", F.rawFmt, "User preferences", "{}", O.sensitive, O.unaudited) val organization = attribute("organization", F.stringFmt, "User organization") } class UserModel extends ModelDef[UserModel, User]("user", "User", "/user") with UserAttributes with AuditedModel { private def setUserId(attrs: JsObject) = (attrs \ "login").asOpt[JsString].fold(attrs) { login ⇒ attrs - "login" + ("_id" → login) } override def creationHook(parent: Option[BaseEntity], attrs: JsObject): Future[JsObject] = Future.successful(setUserId(attrs)) } class User(model: UserModel, attributes: JsObject) extends EntityDef[UserModel, User](model, attributes) with UserAttributes with EUser { override def getUserName = userName() override def getRoles = roles() override def toJson: JsObject = super.toJson + ("roles" → JsArray(roles().map(r ⇒ JsString(r.name.toLowerCase())))) + ("hasKey" → JsBoolean(key().isDefined)) + ("hasPassword" → JsBoolean(password().isDefined)) }
Example 27
Source File: CatalogControllersSpec.scala From daf with BSD 3-Clause "New" or "Revised" License | 5 votes |
import java.io.IOException import java.net.ServerSocket import akka.actor.ActorSystem import akka.stream.ActorMaterializer import catalog_manager.yaml.MetaCatalog import org.specs2.mutable.Specification import play.api.Application import play.api.http.Status import play.api.routing.Router import play.api.inject.guice.GuiceApplicationBuilder import play.api.libs.json.{JsArray, JsValue, Json} import play.api.libs.ws.WSResponse import play.api.libs.ws.ahc.AhcWSClient import play.api.test._ import it.gov.daf.catalogmanager import it.gov.daf.catalogmanager.client.Catalog_managerClient import scala.concurrent.duration.Duration import scala.concurrent.{Await, Future} class CatalogControllersSpec extends Specification { def application: Application = GuiceApplicationBuilder().build() import catalog_manager.yaml.BodyReads.MetaCatalogReads "The catalog-manager" should { "Call catalog-manager/v1/dataset-catalogs return ok status" in new WithServer(app = application, port = 9000) { WsTestClient.withClient { implicit client => val response: WSResponse = Await.result[WSResponse](client. url(s"http://localhost:9001/catalog-manager/v1/dataset-catalogs"). execute, Duration.Inf) println(response.status) response.status must be equalTo Status.OK } } "Call catalog-manager/v1/dataset-catalogs return a non empty list if" + "you have error maybe is necessaty to add data to db" in new WithServer(app = application, port = 9000) { WsTestClient.withClient { implicit client => val response: WSResponse = Await.result[WSResponse](client. url(s"http://localhost:9001/catalog-manager/v1/dataset-catalogs"). execute, Duration.Inf) println(response.status) println("ALE") println(response.body) val json: JsValue = Json.parse(response.body) json.as[JsArray].value.size must be greaterThan (0) } } "The catalog-manager" should { "Call catalog-manager/v1/dataset-catalogs/{logical_uri} return ok status" in new WithServer(app = application, port = 9000) { val logicalUri = "daf://dataset/std/standard/standard/uri_cultura/standard" val url = s"http://localhost:9001/catalog-manager/v1/dataset-catalogs/$logicalUri" println(url) WsTestClient.withClient { implicit client => val response: WSResponse = Await.result[WSResponse](client. url(url). execute, Duration.Inf) println(response.status) response.status must be equalTo Status.OK } } } "The catalog-manager" should { "Call catalog-manager/v1/dataset-catalogs/{anything} return 401" in new WithServer(app = application, port = 9000) { val logicalUri = "anything" val url = s"http://localhost:9001/catalog-manager/v1/dataset-catalogs/$logicalUri" println(url) WsTestClient.withClient { implicit client => val response: WSResponse = Await.result[WSResponse](client. url(url). execute, Duration.Inf) println(response.status) response.status must be equalTo 401 } } } } }
Example 28
Source File: TestJson.scala From daf with BSD 3-Clause "New" or "Revised" License | 5 votes |
package it.gov.daf.catalogmanager.repository.voc import java.io.FileInputStream import catalog_manager.yaml.KeyValue import play.api.libs.json.{JsArray, JsValue} object TestJson extends App { import play.api.libs.json.{JsError, JsResult, JsSuccess, Json} val stream = new FileInputStream("data/voc/cv_theme-subtheme_bk.json") val json = try { (Json.parse(stream) \ "voc").asOpt[JsArray]} finally {stream.close()} val dcatapitThemeId = "AGRI" val subthemeId = "policy" print { json match { case Some(s) => s.value.map(x => ((x \ "theme_code").as[String], (x \ "subthemes").as[List[JsValue]])).map{ x=> x._2.map{ y=> //subthemes (x._1, (y \ "subthemes_ita").as[List[List[String]]]) } }.flatten .filter(x=>x._1.equals(dcatapitThemeId)) .map{x=> println(x) x._2.map{y=> println(y) println(y.length) //println(y(0)) //println(y(1)) KeyValue(y(0), y(1)) } }.flatMap(x=>x) case None => println("VocRepositoryFile - Error occurred with Json") Seq() } } }