From 054b8fb3211911492420fd26cbf858d19325630d Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Fri, 24 Nov 2017 16:57:34 +0300 Subject: [PATCH 01/26] update api like in swagger document --- .../scala/scorex/core/api/http/ApiError.scala | 17 +++++------- .../scorex/core/api/http/PeersApiRoute.scala | 26 ++++++++++--------- .../core/api/http/ScorexApiResponse.scala | 5 +--- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/ApiError.scala b/src/main/scala/scorex/core/api/http/ApiError.scala index 8cd737b9a..0e3c300ac 100644 --- a/src/main/scala/scorex/core/api/http/ApiError.scala +++ b/src/main/scala/scorex/core/api/http/ApiError.scala @@ -6,14 +6,11 @@ import io.circe.syntax._ import scala.language.implicitConversions -case class ApiError(error: Int, message: String) extends ScorexApiResponse { +case class ApiError(message: String) extends ScorexApiResponse { override val success: Boolean = false - override val data: Json = Map( - "error-code" -> error.asJson, - "message" -> message.asJson - ).asJson + override val data: Json = message.asJson } case class ApiException(e: Throwable) extends ScorexApiResponse { @@ -23,9 +20,9 @@ case class ApiException(e: Throwable) extends ScorexApiResponse { object ApiError { - val unknown: ApiError = ApiError(0, "Error is unknown") - val wrongJson: ApiError = ApiError(1, "Failed to parse json message") - val apiKeyNotValid: ApiError = ApiError(2, "Provided API key is not correct") - val blockNotExists: ApiError = ApiError(3, "Block does not exist") - val transactionNotExists: ApiError = ApiError(4, "Transaction does not exist") + val unknown: ApiError = ApiError("unknown") + val wrongJson: ApiError = ApiError("invalid.json") + val apiKeyNotValid: ApiError = ApiError("invalid.apikey") + val blockNotExists: ApiError = ApiError("Block does not exist") + val transactionNotExists: ApiError = ApiError("Transaction does not exist") } diff --git a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala index 1606b1926..bc3b3e8e0 100644 --- a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala @@ -6,6 +6,7 @@ import javax.ws.rs.Path import akka.actor.{ActorRef, ActorRefFactory} import akka.http.scaladsl.server.Route import akka.pattern.ask +import io.circe.JsonObject import io.circe.generic.auto._ import io.circe.parser._ import io.circe.syntax._ @@ -40,11 +41,11 @@ case class PeersApiRoute(peerManager: ActorRef, .mapTo[Map[InetSocketAddress, PeerInfo]] .map { peers => peers.map { case (address, peerInfo) => - Map( - "address" -> address.toString, - "nodeName" -> (peerInfo.nodeName.getOrElse("N/A"): String), - "nodeNonce" -> (peerInfo.nonce.map(_.toString).getOrElse("N/A"): String) - ) + Seq( + Some("address" -> address.toString), + Some("lastSeen" -> peerInfo.lastSeen), + peerInfo.nodeName.map(name => "name" -> name), + peerInfo.nonce.map(nonce => "nonce" -> nonce)).flatten.toMap }.asJson }.map(s => SuccessApiResponse(s)) } @@ -57,17 +58,18 @@ case class PeersApiRoute(peerManager: ActorRef, )) def connectedPeers: Route = path("connected") { getJsonRoute { + val now = System.currentTimeMillis() (peerManager ? PeerManager.GetConnectedPeers) .mapTo[Seq[Handshake]] .map { handshakes => - val peerData = handshakes.map { handshake => + handshakes.map { handshake => Map( - "declaredAddress" -> handshake.declaredAddress.toString, - "peerName" -> handshake.nodeName, - "peerNonce" -> handshake.nodeNonce.toString + "address" -> handshake.declaredAddress.toString, + "name" -> handshake.nodeName, + "nonce" -> handshake.nodeNonce, + "lastSeen" -> now ).asJson }.asJson - Map("peers" -> peerData).asJson }.map(s => SuccessApiResponse(s)) } } @@ -92,7 +94,7 @@ case class PeersApiRoute(peerManager: ActorRef, case Right(ConnectCommandParams(host, port)) => val add: InetSocketAddress = new InetSocketAddress(InetAddress.getByName(host), port) networkController ! ConnectTo(add) - SuccessApiResponse(Map("hostname" -> add.getHostName, "status" -> "Trying to connect").asJson) + SuccessApiResponse(JsonObject.empty.asJson) case _ => ApiError.wrongJson } @@ -110,7 +112,7 @@ case class PeersApiRoute(peerManager: ActorRef, getJsonRoute { (peerManager ? PeerManager.GetBlacklistedPeers) .mapTo[Seq[String]] - .map(s => SuccessApiResponse(s.asJson)) + .map(s => SuccessApiResponse(Map("address" -> s).asJson)) } } } diff --git a/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala b/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala index f6c4c055c..f030aa805 100644 --- a/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala +++ b/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala @@ -8,9 +8,6 @@ trait ScorexApiResponse { val success: Boolean val data: Json - def toJson: Json = Map( - "success" -> success.asJson, - "data" -> data - ).asJson + def toJson: Json = data.asJson } \ No newline at end of file From 024e4fa9acf28caa9acc0d734b599aba704d92d7 Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Fri, 24 Nov 2017 18:42:02 +0300 Subject: [PATCH 02/26] peers api like in swagger docs --- .../scorex/core/api/http/PeersApiRoute.scala | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala index bc3b3e8e0..9dc6c8038 100644 --- a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala @@ -4,11 +4,10 @@ import java.net.{InetAddress, InetSocketAddress} import javax.ws.rs.Path import akka.actor.{ActorRef, ActorRefFactory} +import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.server.Route import akka.pattern.ask -import io.circe.JsonObject import io.circe.generic.auto._ -import io.circe.parser._ import io.circe.syntax._ import io.swagger.annotations._ import scorex.core.network.Handshake @@ -74,7 +73,7 @@ case class PeersApiRoute(peerManager: ActorRef, } } - private case class ConnectCommandParams(host: String, port: Int) + private val addressAndPortRegexp = "\\w+:\\d{1,5}".r @Path("/connect") @ApiOperation(value = "Connect to peer", notes = "Connect to peer", httpMethod = "POST") @@ -89,14 +88,14 @@ case class PeersApiRoute(peerManager: ActorRef, )) def connect: Route = path("connect") { entity(as[String]) { body => withAuth { - postJsonRoute { - decode[ConnectCommandParams](body) match { - case Right(ConnectCommandParams(host, port)) => - val add: InetSocketAddress = new InetSocketAddress(InetAddress.getByName(host), port) - networkController ! ConnectTo(add) - SuccessApiResponse(JsonObject.empty.asJson) - case _ => - ApiError.wrongJson + complete { + if (addressAndPortRegexp.findFirstMatchIn(body).isDefined) { + val Array(host, port) = body.split(":") + val add: InetSocketAddress = new InetSocketAddress(InetAddress.getByName(host), port.toInt) + networkController ! ConnectTo(add) + StatusCodes.OK + } else { + StatusCodes.BadRequest } } } From 713f84888f492fb688ebaf077fb43194b24be12a Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Sat, 25 Nov 2017 16:57:16 +0300 Subject: [PATCH 03/26] compilation fix --- .../scorex/core/api/http/PeersApiRoute.scala | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala index 9dc6c8038..a4c180b1c 100644 --- a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala @@ -41,10 +41,10 @@ case class PeersApiRoute(peerManager: ActorRef, .map { peers => peers.map { case (address, peerInfo) => Seq( - Some("address" -> address.toString), - Some("lastSeen" -> peerInfo.lastSeen), - peerInfo.nodeName.map(name => "name" -> name), - peerInfo.nonce.map(nonce => "nonce" -> nonce)).flatten.toMap + Some("address" -> address.toString.asJson), + Some("lastSeen" -> peerInfo.lastSeen.asJson), + peerInfo.nodeName.map(name => "name" -> name.asJson), + peerInfo.nonce.map(nonce => "nonce" -> nonce.asJson)).flatten.toMap }.asJson }.map(s => SuccessApiResponse(s)) } @@ -63,10 +63,10 @@ case class PeersApiRoute(peerManager: ActorRef, .map { handshakes => handshakes.map { handshake => Map( - "address" -> handshake.declaredAddress.toString, - "name" -> handshake.nodeName, - "nonce" -> handshake.nodeNonce, - "lastSeen" -> now + "address" -> handshake.declaredAddress.toString.asJson, + "name" -> handshake.nodeName.asJson, + "nonce" -> handshake.nodeNonce.asJson, + "lastSeen" -> now.asJson ).asJson }.asJson }.map(s => SuccessApiResponse(s)) From 612b22f5556cc75aaba256095c93954a0a23c20d Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Mon, 27 Nov 2017 18:20:59 +0300 Subject: [PATCH 04/26] correct http codes on errors --- .../scala/scorex/core/api/http/ApiRoute.scala | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/ApiRoute.scala b/src/main/scala/scorex/core/api/http/ApiRoute.scala index f3c13d164..678ff5995 100644 --- a/src/main/scala/scorex/core/api/http/ApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/ApiRoute.scala @@ -2,7 +2,7 @@ package scorex.core.api.http import akka.actor.ActorRefFactory import akka.http.scaladsl.model.headers.RawHeader -import akka.http.scaladsl.model.{ContentTypes, HttpEntity} +import akka.http.scaladsl.model.{ContentTypes, HttpEntity, StatusCodes} import akka.http.scaladsl.server.{Directive0, Directives, Route} import akka.util.Timeout import scorex.core.settings.RESTApiSettings @@ -33,7 +33,23 @@ trait ApiRoute extends Directives { def deleteJsonRoute(fn: Future[ScorexApiResponse]): Route = jsonRoute(Await.result(fn, timeout.duration), delete) protected def jsonRoute(fn: ScorexApiResponse, method: Directive0): Route = method { - val resp = complete(HttpEntity(ContentTypes.`application/json`, fn.toJson.spaces2)) + val resp = fn match { + case SuccessApiResponse(js) => + complete(HttpEntity(ContentTypes.`application/json`, js.spaces2)) + case ApiException(e) => + complete(StatusCodes.InternalServerError -> e.getMessage) + case err@ApiError(msg) => + err match { + case ApiError.transactionNotExists | ApiError.blockNotExists => + complete(StatusCodes.NotFound) + case ApiError.apiKeyNotValid => + complete(StatusCodes.Forbidden -> ApiError.apiKeyNotValid.message) + case ApiError.wrongJson => + complete(StatusCodes.BadRequest) + case _ => + complete(StatusCodes.InternalServerError) + } + } withCors(resp) } @@ -45,7 +61,7 @@ trait ApiRoute extends Directives { def withAuth(route: => Route): Route = { optionalHeaderValueByName("api_key") { keyOpt => if (isValid(keyOpt)) route - else complete(HttpEntity(ContentTypes.`application/json`, ApiError.apiKeyNotValid.toString)) + else withCors(complete(StatusCodes.Forbidden -> ApiError.apiKeyNotValid.message)) } } From 9fec150b3720a6eeb014ad56bb649a59f40def64 Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Mon, 27 Nov 2017 19:17:54 +0300 Subject: [PATCH 05/26] codes moved to error objects --- .../scala/scorex/core/api/http/ApiError.scala | 19 +++++++------------ .../scala/scorex/core/api/http/ApiRoute.scala | 13 ++----------- .../core/api/http/NodeViewApiRoute.scala | 8 ++++---- .../core/api/http/ScorexApiResponse.scala | 6 +++--- .../core/api/http/SuccessApiResponse.scala | 3 ++- 5 files changed, 18 insertions(+), 31 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/ApiError.scala b/src/main/scala/scorex/core/api/http/ApiError.scala index 0e3c300ac..d5476f818 100644 --- a/src/main/scala/scorex/core/api/http/ApiError.scala +++ b/src/main/scala/scorex/core/api/http/ApiError.scala @@ -1,28 +1,23 @@ package scorex.core.api.http +import akka.http.scaladsl.model.{StatusCode, StatusCodes} import io.circe._ -import io.circe.generic.auto._ import io.circe.syntax._ import scala.language.implicitConversions -case class ApiError(message: String) extends ScorexApiResponse { - - override val success: Boolean = false - +case class ApiError(message: String, code: StatusCode) extends ScorexApiResponse { override val data: Json = message.asJson } case class ApiException(e: Throwable) extends ScorexApiResponse { - override val success: Boolean = false + override val code = StatusCodes.InternalServerError override val data: Json = e.getMessage.asJson } object ApiError { - - val unknown: ApiError = ApiError("unknown") - val wrongJson: ApiError = ApiError("invalid.json") - val apiKeyNotValid: ApiError = ApiError("invalid.apikey") - val blockNotExists: ApiError = ApiError("Block does not exist") - val transactionNotExists: ApiError = ApiError("Transaction does not exist") + val unknown: ApiError = ApiError("unknown", StatusCodes.InternalServerError) + val wrongJson: ApiError = ApiError("invalid.json", StatusCodes.BadRequest) + val apiKeyNotValid: ApiError = ApiError("invalid.api-key", StatusCodes.Forbidden) + val notExists: ApiError = ApiError("not-found", StatusCodes.NotFound) } diff --git a/src/main/scala/scorex/core/api/http/ApiRoute.scala b/src/main/scala/scorex/core/api/http/ApiRoute.scala index 678ff5995..b628e7d4d 100644 --- a/src/main/scala/scorex/core/api/http/ApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/ApiRoute.scala @@ -38,17 +38,8 @@ trait ApiRoute extends Directives { complete(HttpEntity(ContentTypes.`application/json`, js.spaces2)) case ApiException(e) => complete(StatusCodes.InternalServerError -> e.getMessage) - case err@ApiError(msg) => - err match { - case ApiError.transactionNotExists | ApiError.blockNotExists => - complete(StatusCodes.NotFound) - case ApiError.apiKeyNotValid => - complete(StatusCodes.Forbidden -> ApiError.apiKeyNotValid.message) - case ApiError.wrongJson => - complete(StatusCodes.BadRequest) - case _ => - complete(StatusCodes.InternalServerError) - } + case err@ApiError(msg, code) => + complete(code -> msg) } withCors(resp) } diff --git a/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala b/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala index 7abe60ffa..44af1a93b 100644 --- a/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala @@ -101,8 +101,8 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] (nodeViewHolderRef ? GetLocalObjects(source, ModifierTypeId @@ 1.toByte, Seq(ModifierId @@ id))) .mapTo[ResponseFromLocal[_ <: NodeViewModifier]] .map(_.localObjects.headOption.map(_.json).map(j => SuccessApiResponse(j)) - .getOrElse(ApiError.blockNotExists)) - case _ => Future(ApiError.blockNotExists) + .getOrElse(ApiError.notExists)) + case _ => Future(ApiError.notExists) } } } @@ -119,8 +119,8 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] (nodeViewHolderRef ? GetLocalObjects(source, Transaction.ModifierTypeId, Seq(ModifierId @@ id))) .mapTo[ResponseFromLocal[_ <: NodeViewModifier]] .map(_.localObjects.headOption.map(_.json).map(r => SuccessApiResponse(r)) - .getOrElse(ApiError.transactionNotExists)) - case _ => Future(ApiError.transactionNotExists) + .getOrElse(ApiError.notExists)) + case _ => Future(ApiError.notExists) } } } diff --git a/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala b/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala index f030aa805..654df8477 100644 --- a/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala +++ b/src/main/scala/scorex/core/api/http/ScorexApiResponse.scala @@ -1,12 +1,12 @@ package scorex.core.api.http +import akka.http.scaladsl.model.StatusCode import io.circe.Json import io.circe.syntax._ trait ScorexApiResponse { - - val success: Boolean - val data: Json + def code: StatusCode + def data: Json def toJson: Json = data.asJson diff --git a/src/main/scala/scorex/core/api/http/SuccessApiResponse.scala b/src/main/scala/scorex/core/api/http/SuccessApiResponse.scala index b558dda79..2811ac348 100644 --- a/src/main/scala/scorex/core/api/http/SuccessApiResponse.scala +++ b/src/main/scala/scorex/core/api/http/SuccessApiResponse.scala @@ -1,7 +1,8 @@ package scorex.core.api.http +import akka.http.scaladsl.model.{StatusCode, StatusCodes} import io.circe.Json case class SuccessApiResponse(data: Json) extends ScorexApiResponse { - override val success: Boolean = true + override val code: StatusCode = StatusCodes.OK } From d88812f3a8edf846c75e7b4e12b0faa49f9f05cd Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Mon, 27 Nov 2017 19:18:34 +0300 Subject: [PATCH 06/26] missed type --- src/main/scala/scorex/core/api/http/ApiError.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/scorex/core/api/http/ApiError.scala b/src/main/scala/scorex/core/api/http/ApiError.scala index d5476f818..c8668ed9d 100644 --- a/src/main/scala/scorex/core/api/http/ApiError.scala +++ b/src/main/scala/scorex/core/api/http/ApiError.scala @@ -11,7 +11,7 @@ case class ApiError(message: String, code: StatusCode) extends ScorexApiResponse } case class ApiException(e: Throwable) extends ScorexApiResponse { - override val code = StatusCodes.InternalServerError + override val code: StatusCode = StatusCodes.InternalServerError override val data: Json = e.getMessage.asJson } From 81cb8d4269e8f88fe62de3923d4dbf8fa7462f27 Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Mon, 27 Nov 2017 19:31:34 +0300 Subject: [PATCH 07/26] default apiKeyHash is empty --- src/main/resources/reference.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/reference.conf b/src/main/resources/reference.conf index 520cba799..827f3b190 100644 --- a/src/main/resources/reference.conf +++ b/src/main/resources/reference.conf @@ -12,7 +12,7 @@ scorex { restApi { bindAddress = "127.0.0.1" port = 6886 - apiKeyHash = "" + # apiKeyHash = "" corsAllowed = false timeout = 5s swaggerInfo { From 9cfafda1fd42fc1d21ac32b9f9474796c25e0fa4 Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Mon, 11 Dec 2017 14:09:51 +0300 Subject: [PATCH 08/26] Utils functions was updated --- .../scorex/core/api/http/UtilsApiRoute.scala | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala b/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala index 64d40d927..67084cf37 100644 --- a/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala @@ -13,14 +13,14 @@ import scorex.crypto.hash.Blake2b256 @Path("/utils") -@Api(value = "/utils", description = "Useful functions", position = 3, produces = "application/json") +@Api(value = "/utils", description = "Useful functions", position = 3, produces = "plain/text") case class UtilsApiRoute(override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) extends ApiRoute { val SeedSize = 32 - private def seed(length: Int): SuccessApiResponse = { + private def seed(length: Int): String = { val seed = new Array[Byte](length) new SecureRandom().nextBytes(seed) //seed mutated here! - SuccessApiResponse(Map("seed" -> Base58.encode(seed)).asJson) + Base58.encode(seed) } override val route = pathPrefix("utils") { @@ -30,11 +30,11 @@ case class UtilsApiRoute(override val settings: RESTApiSettings)(implicit val co @Path("/seed") @ApiOperation(value = "Seed", notes = "Generate random seed", httpMethod = "GET") @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with peer list or error") + new ApiResponse(code = 200, message = "Seed string") )) def seedRoute: Route = path("seed") { - getJsonRoute { - seed(SeedSize) + get { + complete(seed(SeedSize)) } } @@ -43,10 +43,10 @@ case class UtilsApiRoute(override val settings: RESTApiSettings)(implicit val co @ApiImplicitParams(Array( new ApiImplicitParam(name = "length", value = "Seed length ", required = true, dataType = "long", paramType = "path") )) - @ApiResponse(code = 200, message = "Json with peer list or error") + @ApiResponse(code = 200, message = "Seed string") def length: Route = path("seed" / IntNumber) { case length => - getJsonRoute { - seed(length) + get { + complete(seed(length)) } } @@ -56,15 +56,13 @@ case class UtilsApiRoute(override val settings: RESTApiSettings)(implicit val co new ApiImplicitParam(name = "message", value = "Message to hash", required = true, paramType = "body", dataType = "String") )) @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with error or json like {\"message\": \"your message\",\"hash\": \"your message hash\"}") + new ApiResponse(code = 200, message = "hash value") )) def hashBlake2b: Route = { path("hash" / "blake2b") { - entity(as[String]) { message => - withAuth { - postJsonRoute { - SuccessApiResponse(Map("message" -> message, "hash" -> Base58.encode(Blake2b256(message))).asJson) - } + post { + entity(as[String]) { message => + complete(Base58.encode(Blake2b256(message))) } } } From 04f2127988b097d9c45fae4d851cd46a09814b01 Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Tue, 19 Dec 2017 16:36:41 +0300 Subject: [PATCH 09/26] akka http circe dependency was added --- build.sbt | 3 ++- lock.sbt | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index e97fb83c4..83e18c675 100644 --- a/build.sbt +++ b/build.sbt @@ -51,7 +51,8 @@ val apiDependencies = Seq( "io.circe" %% "circe-parser" % circeVersion, "io.swagger" %% "swagger-scala-module" % "1.0.3", "com.github.swagger-akka-http" %% "swagger-akka-http" % "0.10.0", - "com.typesafe.akka" %% "akka-http" % "10.+" + "com.typesafe.akka" %% "akka-http" % "10.+", + "de.heikoseeberger" %% "akka-http-circe" % "1.18.0" ) val loggingDependencies = Seq( diff --git a/lock.sbt b/lock.sbt index 7131bfbff..f42b0122b 100644 --- a/lock.sbt +++ b/lock.sbt @@ -19,11 +19,12 @@ dependencyOverrides in ThisBuild ++= Seq( "com.typesafe" % "config" % "1.3.1", "com.typesafe" % "ssl-config-core_2.12" % "0.2.1", "com.typesafe.akka" % "akka-actor_2.12" % "2.4.20", - "com.typesafe.akka" % "akka-http-core_2.12" % "10.0.10", - "com.typesafe.akka" % "akka-http_2.12" % "10.0.10", - "com.typesafe.akka" % "akka-parsing_2.12" % "10.0.10", - "com.typesafe.akka" % "akka-stream_2.12" % "2.4.19", + "com.typesafe.akka" % "akka-http-core_2.12" % "10.0.11", + "com.typesafe.akka" % "akka-http_2.12" % "10.0.11", + "com.typesafe.akka" % "akka-parsing_2.12" % "10.0.11", + "com.typesafe.akka" % "akka-stream_2.12" % "2.4.20", "commons-net" % "commons-net" % "3.6", + "de.heikoseeberger" % "akka-http-circe_2.12" % "1.18.0", "io.circe" % "circe-core_2.12" % "0.8.0", "io.circe" % "circe-generic_2.12" % "0.8.0", "io.circe" % "circe-jawn_2.12" % "0.8.0", @@ -56,4 +57,4 @@ dependencyOverrides in ThisBuild ++= Seq( "org.whispersystems" % "curve25519-java" % "0.4.1", "org.yaml" % "snakeyaml" % "1.17" ) -// LIBRARY_DEPENDENCIES_HASH 5895ca7d7fe2237e06f13e5d7675bedfccbf031b +// LIBRARY_DEPENDENCIES_HASH 6fa9a3b79637cc43934ecf9b12cdd549dd590862 From 3637fdb0dc2dc92d7dddc69b56722d8a2d320cce Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Tue, 19 Dec 2017 16:36:55 +0300 Subject: [PATCH 10/26] post request --- .../scorex/core/api/http/PeersApiRoute.scala | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala index a4c180b1c..9b2a598d3 100644 --- a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala @@ -86,16 +86,18 @@ case class PeersApiRoute(peerManager: ActorRef, defaultValue = "{\n\t\"host\":\"127.0.0.1\",\n\t\"port\":\"9084\"\n}" ) )) def connect: Route = path("connect") { - entity(as[String]) { body => + post { withAuth { - complete { - if (addressAndPortRegexp.findFirstMatchIn(body).isDefined) { - val Array(host, port) = body.split(":") - val add: InetSocketAddress = new InetSocketAddress(InetAddress.getByName(host), port.toInt) - networkController ! ConnectTo(add) - StatusCodes.OK - } else { - StatusCodes.BadRequest + entity(as[String]) { body => + complete { + if (addressAndPortRegexp.findFirstMatchIn(body).isDefined) { + val Array(host, port) = body.split(":") + val add: InetSocketAddress = new InetSocketAddress(InetAddress.getByName(host), port.toInt) + networkController ! ConnectTo(add) + StatusCodes.OK + } else { + StatusCodes.BadRequest + } } } } From df9f3dbd248611c4cc853e0f7b9901c1ae489bfd Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Tue, 19 Dec 2017 17:45:56 +0300 Subject: [PATCH 11/26] compilation fix --- lock.sbt | 2 ++ src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lock.sbt b/lock.sbt index f42b0122b..211b3475f 100644 --- a/lock.sbt +++ b/lock.sbt @@ -46,6 +46,8 @@ dependencyOverrides in ThisBuild ++= Seq( "org.rudogma" % "supertagged_2.12" % "1.3", "org.scala-lang.modules" % "scala-java8-compat_2.12" % "0.8.0", "org.scala-lang.modules" % "scala-parser-combinators_2.12" % "1.0.4", + "org.scala-sbt" % "test-interface" % "1.0", + "org.scalacheck" % "scalacheck_2.12" % "1.13.5", "org.scorexfoundation" % "scrypto_2.12" % "2.0.3", "org.slf4j" % "slf4j-api" % "1.7.25", "org.spire-math" % "jawn-parser_2.12" % "0.10.4", diff --git a/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala b/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala index 335399577..d28543b2d 100644 --- a/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala @@ -101,7 +101,7 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] def f(v: CurrentView[HIS, MS, VL, MP]): Option[PM] = v.history.modifierById(id) (nodeViewHolderRef ? GetDataFromCurrentView[HIS, MS, VL, MP, Option[PM]](f)).mapTo[Option[PM]] - .map(_.map(tx => SuccessApiResponse(tx.json)).getOrElse(ApiError.blockNotExists)) + .map(_.map(tx => SuccessApiResponse(tx.json)).getOrElse(ApiError.notExists)) case _ => Future(ApiError.notExists) } } @@ -126,7 +126,7 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] } (nodeViewHolderRef ? GetDataFromCurrentView[HIS, MS, VL, MP, Option[TX]](f)).mapTo[Option[TX]] - .map(_.map(tx => SuccessApiResponse(tx.json)).getOrElse(ApiError.transactionNotExists)) + .map(_.map(tx => SuccessApiResponse(tx.json)).getOrElse(ApiError.notExists)) case _ => Future(ApiError.notExists) } } From ba3e3f6abb48cb3b260866f44638738d600a0a79 Mon Sep 17 00:00:00 2001 From: Sergey Tolmachev Date: Tue, 19 Dec 2017 19:12:57 +0300 Subject: [PATCH 12/26] npe fix --- src/main/scala/scorex/core/api/http/ApiRoute.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/scorex/core/api/http/ApiRoute.scala b/src/main/scala/scorex/core/api/http/ApiRoute.scala index b628e7d4d..86b8fec53 100644 --- a/src/main/scala/scorex/core/api/http/ApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/ApiRoute.scala @@ -15,22 +15,22 @@ trait ApiRoute extends Directives { val context: ActorRefFactory val route: Route - implicit val timeout = Timeout(settings.timeout) + implicit lazy val timeout: Timeout = Timeout(settings.timeout) def actorRefFactory: ActorRefFactory = context def getJsonRoute(fn: Future[ScorexApiResponse]): Route = - jsonRoute(Await.result(fn, timeout.duration), get) + jsonRoute(Await.result(fn, settings.timeout), get) def getJsonRoute(fn: ScorexApiResponse): Route = jsonRoute(fn, get) def postJsonRoute(fn: ScorexApiResponse): Route = jsonRoute(fn, post) - def postJsonRoute(fn: Future[ScorexApiResponse]): Route = jsonRoute(Await.result(fn, timeout.duration), post) + def postJsonRoute(fn: Future[ScorexApiResponse]): Route = jsonRoute(Await.result(fn, settings.timeout), post) def deleteJsonRoute(fn: ScorexApiResponse): Route = jsonRoute(fn, delete) - def deleteJsonRoute(fn: Future[ScorexApiResponse]): Route = jsonRoute(Await.result(fn, timeout.duration), delete) + def deleteJsonRoute(fn: Future[ScorexApiResponse]): Route = jsonRoute(Await.result(fn, settings.timeout), delete) protected def jsonRoute(fn: ScorexApiResponse, method: Directive0): Route = method { val resp = fn match { From 5aa0444bfbda5a2dc4186fbafc063eac2cf66a76 Mon Sep 17 00:00:00 2001 From: catena Date: Wed, 20 Dec 2017 16:53:37 +0300 Subject: [PATCH 13/26] Provide locally created yaml file for swagger --- examples/src/main/resources/api/testApi.yaml | 198 ++++++++++++++++++ .../scala/examples/curvepos/SimpleApp.scala | 3 +- .../scala/examples/hybrid/HybridApp.scala | 4 +- lock.sbt | 62 ------ .../core/api/http/CompositeHttpService.scala | 8 +- .../api/http/swagger/SwaggerDocService.scala | 20 -- .../api/http/swagger/SwaggerYamlRoute.scala | 24 +++ .../scala/scorex/core/app/Application.scala | 5 +- 8 files changed, 231 insertions(+), 93 deletions(-) create mode 100644 examples/src/main/resources/api/testApi.yaml delete mode 100644 lock.sbt delete mode 100644 src/main/scala/scorex/core/api/http/swagger/SwaggerDocService.scala create mode 100644 src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala diff --git a/examples/src/main/resources/api/testApi.yaml b/examples/src/main/resources/api/testApi.yaml new file mode 100644 index 000000000..29f7207a9 --- /dev/null +++ b/examples/src/main/resources/api/testApi.yaml @@ -0,0 +1,198 @@ +openapi: "3.0.0" + +info: + version: "0.1" + title: Scorex Node API example + description: API docs for example Scorex project. + contact: + name: Scorex framework Team + email: kushi@protonmail.com + url: https://github.com/scorexfoundation/scorex + license: + name: CC0 1.0 Universal + url: https://raw.githubusercontent.com/ScorexFoundation/Scorex/master/COPYING + +servers: + # todo make it real + - url: https://nodes.ergoplatform.com/api/ + description: Testnet1 + +components: + schemas: + # Objects + ModifierId: + description: Base58-encoded 32 byte modifier id + type: object + required: + - modifierId + properties: + modifierId: + type: string + example: D2bXMwWN8P9nWJ9qqwZJLauAdcZHX9n6s91QQ9vK6Zu4 + + Digest32: + description: Base58-encoded 32 byte digest + type: object + required: + - digest + properties: + digest: + type: string + example: FjX5cPuwMc2ocDLPWzt6jq29BXjvU6d5w5XURDJ6dmoM + Peer: + type: object + required: + - address + properties: + address: + type: string + example: 127.0.0.1:5673 + name: + type: string + example: mynode + nonce: + type: integer + # int32 + format: int64 + example: 123456 + lastSeen: + type: integer + # int32 + format: int64 + example: 123456 + + +paths: + + /peers/all: + get: + summary: Get all known peers + operationId: getAllPeers + tags: + - peers + responses: + 200: + description: Array of peer objects + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Peer' + + /peers/connected: + get: + summary: Get current connected peers + operationId: getConnectedPeers + tags: + - peers + responses: + 200: + description: Array of peer objects + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Peer' + + /peers/connect: + post: + summary: Get current size of the unconfirmed transactions pool + operationId: connectToPeer + tags: + - peers + requestBody: + required: true + content: + application/json: + schema: + type: string + example: 127.0.0.1:5673 + responses: + 200: + description: Attempt to connect to the peer + default: + description: Error + content: + application/json: + schema: + type: string + enum: + - invalid.peer.address + - invalid.json + + /peers/blacklisted: + get: + summary: Get blacklisted peers + operationId: getBlacklistedPeers + tags: + - peers + responses: + 200: + description: Array of peer objects + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Peer' + + /utils/seed: + get: + summary: Get random seed with 32 bytes size + operationId: getRandomSeed + tags: + - utils + responses: + 200: + description: Base58-encoded 32 byte seed + content: + text/plain: + schema: + type: string + example: 7yaASMijGEGTbttYHg1MrXnWB8EbzjJnFLSWvmNoHrXV + + /utils/seed/{length}: + get: + summary: Generate random seed of specified length in bytes + operationId: getRandomSeedWithLength + tags: + - utils + parameters: + - in: path + name: length + required: true + description: seed length in bytes + schema: + type: string + responses: + 200: + description: Base58-encoded N byte seed + content: + text/plain: + schema: + type: string + example: 7yaASMijGEGTbttYHg1MrXnWB8EbzjJnFLSWvmNoHrXV + + /utils/hash/blake2b: + post: + summary: Return Blake2b hash of specified message + operationId: hashBlake2b + tags: + - utils + requestBody: + required: true + content: + text/plain: + schema: + type: string + example: 7yaASMijGEGTbttYHg1MrXnWB8EbzjJnFLSWvmNoHrXV + responses: + 200: + description: Base58-encoded 32 byte hash + content: + text/plain: + schema: + type: string + example: 6QLZkR1RdHvF7gUw7oms1XdQM6kc9kxpmyHRADN5x7uQ \ No newline at end of file diff --git a/examples/src/main/scala/examples/curvepos/SimpleApp.scala b/examples/src/main/scala/examples/curvepos/SimpleApp.scala index 9d2bc54fa..ffde5dd77 100644 --- a/examples/src/main/scala/examples/curvepos/SimpleApp.scala +++ b/examples/src/main/scala/examples/curvepos/SimpleApp.scala @@ -40,7 +40,8 @@ class SimpleApp(val settingsFilename: String) extends Application { actorSystem.actorOf(Props(new NodeViewSynchronizer[P, TX, SimpleSyncInfo, SimpleSyncInfoMessageSpec.type, PMOD, SimpleBlockchain, SimpleMemPool] (networkController, nodeViewHolderRef, localInterface, SimpleSyncInfoMessageSpec, settings.network))) - override val apiTypes: Set[Class[_]] = Set(classOf[UtilsApiRoute], classOf[NodeViewApiRoute[P, TX]]) + override val swaggerYaml = "" + override val apiRoutes: Seq[ApiRoute] = Seq(UtilsApiRoute(settings.restApi), NodeViewApiRoute[P, TX](settings.restApi, nodeViewHolderRef)) } diff --git a/examples/src/main/scala/examples/hybrid/HybridApp.scala b/examples/src/main/scala/examples/hybrid/HybridApp.scala index 6c48ebd6b..691db8da5 100644 --- a/examples/src/main/scala/examples/hybrid/HybridApp.scala +++ b/examples/src/main/scala/examples/hybrid/HybridApp.scala @@ -43,9 +43,7 @@ class HybridApp(val settingsFilename: String) extends Application { PeersApiRoute(peerManagerRef, networkController, settings.restApi) ) - override val apiTypes: Set[Class[_]] = Set(classOf[UtilsApiRoute], classOf[DebugApiRoute], classOf[WalletApiRoute], - classOf[NodeViewApiRoute[P, TX]], classOf[PeersApiRoute], classOf[StatsApiRoute]) - + override val swaggerYaml: String = getClass.getClassLoader.getResourceAsStream("api/testApi.yaml").toString val miner = actorSystem.actorOf(Props(new PowMiner(nodeViewHolderRef, hybridSettings.mining))) val forger = actorSystem.actorOf(Props(new PosForger(hybridSettings, nodeViewHolderRef))) diff --git a/lock.sbt b/lock.sbt deleted file mode 100644 index 211b3475f..000000000 --- a/lock.sbt +++ /dev/null @@ -1,62 +0,0 @@ -// DON'T EDIT THIS FILE. -// This file is auto generated by sbt-lock 0.4.0. -// https://github.com/tkawachi/sbt-lock/ -dependencyOverrides in ThisBuild ++= Seq( - "ch.qos.logback" % "logback-classic" % "1.2.3", - "ch.qos.logback" % "logback-core" % "1.2.3", - "com.chuusai" % "shapeless_2.12" % "2.3.2", - "com.fasterxml.jackson.core" % "jackson-annotations" % "2.8.9", - "com.fasterxml.jackson.core" % "jackson-core" % "2.8.9", - "com.fasterxml.jackson.core" % "jackson-databind" % "2.8.9", - "com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % "2.8.9", - "com.fasterxml.jackson.module" % "jackson-module-paranamer" % "2.8.9", - "com.fasterxml.jackson.module" % "jackson-module-scala_2.12" % "2.8.9", - "com.github.mpilquist" % "simulacrum_2.12" % "0.10.0", - "com.github.swagger-akka-http" % "swagger-akka-http_2.12" % "0.10.0", - "com.google.guava" % "guava" % "20.0", - "com.iheart" % "ficus_2.12" % "1.4.2", - "com.thoughtworks.paranamer" % "paranamer" % "2.8", - "com.typesafe" % "config" % "1.3.1", - "com.typesafe" % "ssl-config-core_2.12" % "0.2.1", - "com.typesafe.akka" % "akka-actor_2.12" % "2.4.20", - "com.typesafe.akka" % "akka-http-core_2.12" % "10.0.11", - "com.typesafe.akka" % "akka-http_2.12" % "10.0.11", - "com.typesafe.akka" % "akka-parsing_2.12" % "10.0.11", - "com.typesafe.akka" % "akka-stream_2.12" % "2.4.20", - "commons-net" % "commons-net" % "3.6", - "de.heikoseeberger" % "akka-http-circe_2.12" % "1.18.0", - "io.circe" % "circe-core_2.12" % "0.8.0", - "io.circe" % "circe-generic_2.12" % "0.8.0", - "io.circe" % "circe-jawn_2.12" % "0.8.0", - "io.circe" % "circe-numbers_2.12" % "0.8.0", - "io.circe" % "circe-parser_2.12" % "0.8.0", - "io.swagger" % "swagger-annotations" % "1.5.15", - "io.swagger" % "swagger-core" % "1.5.15", - "io.swagger" % "swagger-jaxrs" % "1.5.15", - "io.swagger" % "swagger-models" % "1.5.15", - "io.swagger" % "swagger-scala-module_2.12" % "1.0.4", - "javax.validation" % "validation-api" % "1.1.0.Final", - "javax.ws.rs" % "jsr311-api" % "1.1.1", - "org.apache.commons" % "commons-lang3" % "3.2.1", - "org.bitlet" % "weupnp" % "0.1.4", - "org.bouncycastle" % "bcprov-jdk15on" % "1.58", - "org.javassist" % "javassist" % "3.21.0-GA", - "org.reactivestreams" % "reactive-streams" % "1.0.0", - "org.reflections" % "reflections" % "0.9.11", - "org.rudogma" % "supertagged_2.12" % "1.3", - "org.scala-lang.modules" % "scala-java8-compat_2.12" % "0.8.0", - "org.scala-lang.modules" % "scala-parser-combinators_2.12" % "1.0.4", - "org.scala-sbt" % "test-interface" % "1.0", - "org.scalacheck" % "scalacheck_2.12" % "1.13.5", - "org.scorexfoundation" % "scrypto_2.12" % "2.0.3", - "org.slf4j" % "slf4j-api" % "1.7.25", - "org.spire-math" % "jawn-parser_2.12" % "0.10.4", - "org.typelevel" % "cats-core_2.12" % "0.9.0", - "org.typelevel" % "cats-kernel_2.12" % "0.9.0", - "org.typelevel" % "cats-macros_2.12" % "0.9.0", - "org.typelevel" % "machinist_2.12" % "0.6.1", - "org.typelevel" % "macro-compat_2.12" % "1.1.1", - "org.whispersystems" % "curve25519-java" % "0.4.1", - "org.yaml" % "snakeyaml" % "1.17" -) -// LIBRARY_DEPENDENCIES_HASH 6fa9a3b79637cc43934ecf9b12cdd549dd590862 diff --git a/src/main/scala/scorex/core/api/http/CompositeHttpService.scala b/src/main/scala/scorex/core/api/http/CompositeHttpService.scala index e35a6dcbd..ff9ee0949 100644 --- a/src/main/scala/scorex/core/api/http/CompositeHttpService.scala +++ b/src/main/scala/scorex/core/api/http/CompositeHttpService.scala @@ -4,21 +4,21 @@ import akka.actor.ActorSystem import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route -import scorex.core.api.http.swagger.{CorsSupport, SwaggerDocService} +import scorex.core.api.http.swagger.{CorsSupport, SwaggerYamlRoute} import scorex.core.settings.RESTApiSettings -case class CompositeHttpService(system: ActorSystem, apiTypes: Set[Class[_]], routes: Seq[ApiRoute], settings: RESTApiSettings) +case class CompositeHttpService(system: ActorSystem, routes: Seq[ApiRoute], settings: RESTApiSettings, swaggerYaml: String) extends CorsSupport { implicit val actorSystem = system - val swaggerService = new SwaggerDocService(system, apiTypes, settings) + val swaggerService: SwaggerYamlRoute = new SwaggerYamlRoute(swaggerYaml: String, settings: RESTApiSettings) val redirectToSwagger: Route = { redirect("/swagger", StatusCodes.PermanentRedirect) } - val compositeRoute = routes.map(_.route).reduce(_ ~ _) ~ corsHandler(swaggerService.routes) ~ + val compositeRoute = routes.map(_.route).reduce(_ ~ _) ~ corsHandler(swaggerService.route) ~ path("swagger") { getFromResource("swagger-ui/index.html") } ~ getFromResourceDirectory("swagger-ui") ~ redirectToSwagger diff --git a/src/main/scala/scorex/core/api/http/swagger/SwaggerDocService.scala b/src/main/scala/scorex/core/api/http/swagger/SwaggerDocService.scala deleted file mode 100644 index dea88140f..000000000 --- a/src/main/scala/scorex/core/api/http/swagger/SwaggerDocService.scala +++ /dev/null @@ -1,20 +0,0 @@ -package scorex.core.api.http.swagger - -import akka.actor.ActorSystem -import com.github.swagger.akka.SwaggerHttpService -import com.github.swagger.akka.model.Info -import io.swagger.models.Swagger -import scorex.core.settings.RESTApiSettings - -class SwaggerDocService(system: ActorSystem, val apiClasses: Set[Class[_]], settings: RESTApiSettings) - extends SwaggerHttpService { - override val host: String = settings.bindAddress + ":" + settings.port - override val apiDocsPath: String = "swagger" - - override val info: Info = settings.swaggerInfo - - private def prependSlashIfNecessary(path: String): String = if(path.startsWith("/")) path else s"/$path" - - //Let swagger-ui determine the host and port - override def swaggerConfig: Swagger = new Swagger().basePath(prependSlashIfNecessary(basePath)).info(info).scheme(scheme) -} diff --git a/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala b/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala new file mode 100644 index 000000000..5bdb9ec3d --- /dev/null +++ b/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala @@ -0,0 +1,24 @@ +package scorex.core.api.http.swagger + +import akka.actor.ActorRefFactory +import akka.http.scaladsl.model.HttpEntity +import akka.http.scaladsl.server.Route +import com.github.swagger.akka.CustomMediaTypes +import scorex.core.api.http.ApiRoute +import scorex.core.settings.RESTApiSettings + +class SwaggerYamlRoute(swaggerYaml: String, override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) + extends ApiRoute { + // override val route = _ + + override val route: Route = { + val base = "api-docs" + path(base / "swagger.yaml") { + get { + complete(HttpEntity(CustomMediaTypes.`text/vnd.yaml`, swaggerYaml)) + } + } + } + +} + diff --git a/src/main/scala/scorex/core/app/Application.scala b/src/main/scala/scorex/core/app/Application.scala index 47ee78d1c..071c54361 100644 --- a/src/main/scala/scorex/core/app/Application.scala +++ b/src/main/scala/scorex/core/app/Application.scala @@ -29,7 +29,6 @@ trait Application extends ScorexLogging { //api val apiRoutes: Seq[ApiRoute] - val apiTypes: Set[Class[_]] protected implicit lazy val actorSystem = ActorSystem(settings.network.agentName) @@ -55,14 +54,14 @@ trait Application extends ScorexLogging { val nodeViewHolderRef: ActorRef val nodeViewSynchronizer: ActorRef val localInterface: ActorRef - + val swaggerYaml: String val peerManagerRef = actorSystem.actorOf(Props(new PeerManager(settings))) val nProps = Props(new NetworkController(settings.network, messagesHandler, upnp, peerManagerRef)) val networkController = actorSystem.actorOf(nProps, "networkController") - lazy val combinedRoute = CompositeHttpService(actorSystem, apiTypes, apiRoutes, settings.restApi).compositeRoute + lazy val combinedRoute = CompositeHttpService(actorSystem, apiRoutes, settings.restApi, swaggerYaml).compositeRoute def run(): Unit = { require(settings.network.agentName.length <= ApplicationNameLimit) From 505906214a0c6da24aa8c5c51750596e5530353f Mon Sep 17 00:00:00 2001 From: catena Date: Wed, 20 Dec 2017 17:09:18 +0300 Subject: [PATCH 14/26] Correct yaml for HybridApp --- examples/src/main/scala/examples/hybrid/HybridApp.scala | 4 +++- .../scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala | 4 +--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/src/main/scala/examples/hybrid/HybridApp.scala b/examples/src/main/scala/examples/hybrid/HybridApp.scala index 691db8da5..fa5f3ad0c 100644 --- a/examples/src/main/scala/examples/hybrid/HybridApp.scala +++ b/examples/src/main/scala/examples/hybrid/HybridApp.scala @@ -16,6 +16,7 @@ import scorex.core.settings.ScorexSettings import scorex.core.transaction.box.proposition.PublicKey25519Proposition import scala.concurrent.duration._ +import scala.io.Source import scala.language.postfixOps class HybridApp(val settingsFilename: String) extends Application { @@ -43,7 +44,8 @@ class HybridApp(val settingsFilename: String) extends Application { PeersApiRoute(peerManagerRef, networkController, settings.restApi) ) - override val swaggerYaml: String = getClass.getClassLoader.getResourceAsStream("api/testApi.yaml").toString + override val swaggerYaml: String = Source.fromResource("api/testApi.yaml").getLines.mkString("\n") + val miner = actorSystem.actorOf(Props(new PowMiner(nodeViewHolderRef, hybridSettings.mining))) val forger = actorSystem.actorOf(Props(new PosForger(hybridSettings, nodeViewHolderRef))) diff --git a/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala b/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala index 5bdb9ec3d..37f7b60f8 100644 --- a/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala +++ b/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala @@ -9,11 +9,9 @@ import scorex.core.settings.RESTApiSettings class SwaggerYamlRoute(swaggerYaml: String, override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) extends ApiRoute { - // override val route = _ override val route: Route = { - val base = "api-docs" - path(base / "swagger.yaml") { + path("api-docs" / "swagger.yaml") { get { complete(HttpEntity(CustomMediaTypes.`text/vnd.yaml`, swaggerYaml)) } From 1aa80b0c3cea727bdb68b3766ec8dd8c2f2c1ba2 Mon Sep 17 00:00:00 2001 From: catena Date: Wed, 20 Dec 2017 17:34:10 +0300 Subject: [PATCH 15/26] swaggerYaml => swaggerConfig --- examples/src/main/scala/examples/curvepos/SimpleApp.scala | 2 +- examples/src/main/scala/examples/hybrid/HybridApp.scala | 2 +- .../scala/scorex/core/api/http/CompositeHttpService.scala | 6 +++--- .../{SwaggerYamlRoute.scala => SwaggerConfigRoute.scala} | 6 +++--- src/main/scala/scorex/core/app/Application.scala | 7 +++++-- 5 files changed, 13 insertions(+), 10 deletions(-) rename src/main/scala/scorex/core/api/http/swagger/{SwaggerYamlRoute.scala => SwaggerConfigRoute.scala} (71%) diff --git a/examples/src/main/scala/examples/curvepos/SimpleApp.scala b/examples/src/main/scala/examples/curvepos/SimpleApp.scala index ffde5dd77..608a35c8b 100644 --- a/examples/src/main/scala/examples/curvepos/SimpleApp.scala +++ b/examples/src/main/scala/examples/curvepos/SimpleApp.scala @@ -40,7 +40,7 @@ class SimpleApp(val settingsFilename: String) extends Application { actorSystem.actorOf(Props(new NodeViewSynchronizer[P, TX, SimpleSyncInfo, SimpleSyncInfoMessageSpec.type, PMOD, SimpleBlockchain, SimpleMemPool] (networkController, nodeViewHolderRef, localInterface, SimpleSyncInfoMessageSpec, settings.network))) - override val swaggerYaml = "" + override val swaggerConfig = "" override val apiRoutes: Seq[ApiRoute] = Seq(UtilsApiRoute(settings.restApi), NodeViewApiRoute[P, TX](settings.restApi, nodeViewHolderRef)) diff --git a/examples/src/main/scala/examples/hybrid/HybridApp.scala b/examples/src/main/scala/examples/hybrid/HybridApp.scala index fa5f3ad0c..79ed0fb95 100644 --- a/examples/src/main/scala/examples/hybrid/HybridApp.scala +++ b/examples/src/main/scala/examples/hybrid/HybridApp.scala @@ -44,7 +44,7 @@ class HybridApp(val settingsFilename: String) extends Application { PeersApiRoute(peerManagerRef, networkController, settings.restApi) ) - override val swaggerYaml: String = Source.fromResource("api/testApi.yaml").getLines.mkString("\n") + override val swaggerConfig: String = Source.fromResource("api/testApi.yaml").getLines.mkString("\n") val miner = actorSystem.actorOf(Props(new PowMiner(nodeViewHolderRef, hybridSettings.mining))) val forger = actorSystem.actorOf(Props(new PosForger(hybridSettings, nodeViewHolderRef))) diff --git a/src/main/scala/scorex/core/api/http/CompositeHttpService.scala b/src/main/scala/scorex/core/api/http/CompositeHttpService.scala index ff9ee0949..b2a1b1aa3 100644 --- a/src/main/scala/scorex/core/api/http/CompositeHttpService.scala +++ b/src/main/scala/scorex/core/api/http/CompositeHttpService.scala @@ -4,15 +4,15 @@ import akka.actor.ActorSystem import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route -import scorex.core.api.http.swagger.{CorsSupport, SwaggerYamlRoute} +import scorex.core.api.http.swagger.{CorsSupport, SwaggerConfigRoute} import scorex.core.settings.RESTApiSettings -case class CompositeHttpService(system: ActorSystem, routes: Seq[ApiRoute], settings: RESTApiSettings, swaggerYaml: String) +case class CompositeHttpService(system: ActorSystem, routes: Seq[ApiRoute], settings: RESTApiSettings, swaggerConf: String) extends CorsSupport { implicit val actorSystem = system - val swaggerService: SwaggerYamlRoute = new SwaggerYamlRoute(swaggerYaml: String, settings: RESTApiSettings) + val swaggerService: SwaggerConfigRoute = new SwaggerConfigRoute(swaggerConf: String, settings: RESTApiSettings) val redirectToSwagger: Route = { redirect("/swagger", StatusCodes.PermanentRedirect) diff --git a/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala b/src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala similarity index 71% rename from src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala rename to src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala index 37f7b60f8..cd4d439a5 100644 --- a/src/main/scala/scorex/core/api/http/swagger/SwaggerYamlRoute.scala +++ b/src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala @@ -7,13 +7,13 @@ import com.github.swagger.akka.CustomMediaTypes import scorex.core.api.http.ApiRoute import scorex.core.settings.RESTApiSettings -class SwaggerYamlRoute(swaggerYaml: String, override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) +class SwaggerConfigRoute(swaggerConf: String, override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) extends ApiRoute { override val route: Route = { - path("api-docs" / "swagger.yaml") { + path("api-docs" / "swagger.conf") { get { - complete(HttpEntity(CustomMediaTypes.`text/vnd.yaml`, swaggerYaml)) + complete(HttpEntity(CustomMediaTypes.`text/vnd.yaml`, swaggerConf)) } } } diff --git a/src/main/scala/scorex/core/app/Application.scala b/src/main/scala/scorex/core/app/Application.scala index 071c54361..42cf0fda6 100644 --- a/src/main/scala/scorex/core/app/Application.scala +++ b/src/main/scala/scorex/core/app/Application.scala @@ -54,14 +54,17 @@ trait Application extends ScorexLogging { val nodeViewHolderRef: ActorRef val nodeViewSynchronizer: ActorRef val localInterface: ActorRef - val swaggerYaml: String + /** + * API description in openapi format in YAML or JSON + */ + val swaggerConfig: String val peerManagerRef = actorSystem.actorOf(Props(new PeerManager(settings))) val nProps = Props(new NetworkController(settings.network, messagesHandler, upnp, peerManagerRef)) val networkController = actorSystem.actorOf(nProps, "networkController") - lazy val combinedRoute = CompositeHttpService(actorSystem, apiRoutes, settings.restApi, swaggerYaml).compositeRoute + lazy val combinedRoute = CompositeHttpService(actorSystem, apiRoutes, settings.restApi, swaggerConfig).compositeRoute def run(): Unit = { require(settings.network.agentName.length <= ApplicationNameLimit) From 603e4f1432743b42007c419965391bcf8d3282ed Mon Sep 17 00:00:00 2001 From: catena Date: Wed, 20 Dec 2017 18:06:07 +0300 Subject: [PATCH 16/26] Remove annotations --- build.sbt | 2 - .../hybrid/api/http/DebugApiRoute.scala | 36 +++------------- .../hybrid/api/http/StatsApiRoute.scala | 19 +------- .../hybrid/api/http/WalletApiRoute.scala | 29 +------------ lock.sbt | 43 +++++++++++++++++++ project/plugins.sbt | 2 + .../core/api/http/NodeViewApiRoute.scala | 20 --------- .../scorex/core/api/http/PeersApiRoute.scala | 32 +------------- .../scorex/core/api/http/UtilsApiRoute.scala | 26 +---------- .../api/http/swagger/SwaggerConfigRoute.scala | 6 +-- .../scala/scorex/core/settings/Settings.scala | 4 +- 11 files changed, 58 insertions(+), 161 deletions(-) create mode 100644 lock.sbt diff --git a/build.sbt b/build.sbt index a9f4ec35c..bd2c0b3c9 100644 --- a/build.sbt +++ b/build.sbt @@ -49,8 +49,6 @@ val apiDependencies = Seq( "io.circe" %% "circe-core" % circeVersion, "io.circe" %% "circe-generic" % circeVersion, "io.circe" %% "circe-parser" % circeVersion, - "io.swagger" %% "swagger-scala-module" % "1.0.3", - "com.github.swagger-akka-http" %% "swagger-akka-http" % "0.10.0", "com.typesafe.akka" %% "akka-http" % "10.+", "de.heikoseeberger" %% "akka-http-circe" % "1.18.0" ) diff --git a/examples/src/main/scala/examples/hybrid/api/http/DebugApiRoute.scala b/examples/src/main/scala/examples/hybrid/api/http/DebugApiRoute.scala index 25b732c6d..8467b046b 100644 --- a/examples/src/main/scala/examples/hybrid/api/http/DebugApiRoute.scala +++ b/examples/src/main/scala/examples/hybrid/api/http/DebugApiRoute.scala @@ -1,7 +1,5 @@ package examples.hybrid.api.http -import javax.ws.rs.Path - import akka.actor.{ActorRef, ActorRefFactory} import akka.http.scaladsl.server.Route import examples.commons.SimpleBoxTransactionMemPool @@ -10,17 +8,14 @@ import examples.hybrid.history.HybridHistory import examples.hybrid.state.HBoxStoredState import examples.hybrid.wallet.HWallet import io.circe.syntax._ -import io.swagger.annotations._ import scorex.core.ModifierId import scorex.core.api.http.{ApiRouteWithFullView, SuccessApiResponse} -import scorex.core.settings.{RESTApiSettings, ScorexSettings} +import scorex.core.settings.RESTApiSettings import scorex.crypto.encode.Base58 import scala.concurrent.ExecutionContext.Implicits.global -@Path("/debug") -@Api(value = "/debug", description = "Useful functions", position = 3, produces = "application/json") case class DebugApiRoute(override val settings: RESTApiSettings, nodeViewHolderRef: ActorRef) (implicit val context: ActorRefFactory) extends ApiRouteWithFullView[HybridHistory, HBoxStoredState, HWallet, SimpleBoxTransactionMemPool] { @@ -29,13 +24,6 @@ case class DebugApiRoute(override val settings: RESTApiSettings, nodeViewHolderR infoRoute ~ chain ~ delay ~ myblocks ~ generators } - @Path("/delay/{id}/{blockNum}") - @ApiOperation(value = "Average delay", - notes = "Average delay in milliseconds between last $blockNum blocks starting from block with $id", httpMethod = "GET") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "id", value = "Base58-encoded id", required = true, dataType = "string", paramType = "path"), - new ApiImplicitParam(name = "blockNum", value = "Number of blocks to count delay", required = true, dataType = "string", paramType = "path") - )) def delay: Route = { path("delay" / Segment / IntNumber) { case (encodedSignature, count) => getJsonRoute { @@ -49,15 +37,10 @@ case class DebugApiRoute(override val settings: RESTApiSettings, nodeViewHolderR } } - @Path("/info") - @ApiOperation(value = "Info", notes = "Debug info about blockchain", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with debug info or error") - )) def infoRoute: Route = path("info") { getJsonRoute { viewAsync().map { view => - SuccessApiResponse( Map( + SuccessApiResponse(Map( "height" -> view.history.height.toString.asJson, "bestPoS" -> Base58.encode(view.history.bestPosId).asJson, "bestPoW" -> Base58.encode(view.history.bestPowId).asJson, @@ -68,23 +51,21 @@ case class DebugApiRoute(override val settings: RESTApiSettings, nodeViewHolderR } } - @Path("/myblocks") - @ApiOperation(value = "Info", notes = "Blocks generated by this node", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with my blocks or error") - )) def myblocks: Route = path("myblocks") { getJsonRoute { viewAsync().map { view => val pubkeys = view.vault.publicKeys + def isMyPosBlock(b: HybridBlock): Boolean = b match { case pos: PosBlock => pubkeys.exists(_.pubKeyBytes sameElements pos.generatorBox.proposition.pubKeyBytes) case _ => false } + def isMyPowBlock(b: HybridBlock): Boolean = b match { case pow: PowBlock => pubkeys.exists(_.pubKeyBytes sameElements pow.generatorProposition.pubKeyBytes) case _ => false } + val posCount = view.history.count(isMyPosBlock) val powCount = view.history.count(isMyPowBlock) @@ -98,8 +79,6 @@ case class DebugApiRoute(override val settings: RESTApiSettings, nodeViewHolderR } } - @Path("/generators") - @ApiOperation(value = "Info", notes = "Blocks generator distribution", httpMethod = "GET") def generators: Route = path("generators") { getJsonRoute { viewAsync().map { view => @@ -110,11 +89,6 @@ case class DebugApiRoute(override val settings: RESTApiSettings, nodeViewHolderR } } - @Path("/chain") - @ApiOperation(value = "Chain", notes = "Print full chain", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with peer list or error") - )) def chain: Route = path("chain") { getJsonRoute { viewAsync().map { view => diff --git a/examples/src/main/scala/examples/hybrid/api/http/StatsApiRoute.scala b/examples/src/main/scala/examples/hybrid/api/http/StatsApiRoute.scala index f5477ade3..88a8de703 100644 --- a/examples/src/main/scala/examples/hybrid/api/http/StatsApiRoute.scala +++ b/examples/src/main/scala/examples/hybrid/api/http/StatsApiRoute.scala @@ -1,7 +1,5 @@ package examples.hybrid.api.http -import javax.ws.rs.Path - import akka.actor.{ActorRef, ActorRefFactory} import akka.http.scaladsl.server.Route import examples.commons.SimpleBoxTransactionMemPool @@ -10,18 +8,14 @@ import examples.hybrid.state.HBoxStoredState import examples.hybrid.wallet.HWallet import io.circe.Json import io.circe.syntax._ -import io.swagger.annotations._ import scorex.core.ModifierId import scorex.core.api.http.{ApiRouteWithFullView, ApiTry, SuccessApiResponse} -import scorex.core.settings.{RESTApiSettings, ScorexSettings} +import scorex.core.settings.RESTApiSettings import scorex.crypto.encode.Base58 import scala.concurrent.ExecutionContext.Implicits.global import scala.util.Try - -@Path("/stats") -@Api(value = "/stats", produces = "application/json") case class StatsApiRoute(override val settings: RESTApiSettings, nodeViewHolderRef: ActorRef) (implicit val context: ActorRefFactory) extends ApiRouteWithFullView[HybridHistory, HBoxStoredState, HWallet, SimpleBoxTransactionMemPool] { @@ -30,11 +24,6 @@ case class StatsApiRoute(override val settings: RESTApiSettings, nodeViewHolderR tail ~ meanDifficulty } - @Path("/tail/{length}") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "length", value = "Seed length ", required = true, dataType = "long", paramType = "path") - )) - @ApiOperation(value = "Tail", notes = "Return last length block ids", httpMethod = "GET") def tail: Route = path("tail" / IntNumber) { count => getJsonRoute { viewAsync().map { view => @@ -46,12 +35,6 @@ case class StatsApiRoute(override val settings: RESTApiSettings, nodeViewHolderR } } - @Path("/meanDifficulty/{start}/{end}") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "start", value = "from block", required = true, dataType = "int", paramType = "path"), - new ApiImplicitParam(name = "end", value = "until block ", required = true, dataType = "int", paramType = "path") - )) - @ApiOperation(value = "meanDifficulty", notes = "Mean difficulties from start till end", httpMethod = "GET") def meanDifficulty: Route = path("meanDifficulty" / IntNumber / IntNumber) { (start, end) => getJsonRoute { viewAsync().map { view => diff --git a/examples/src/main/scala/examples/hybrid/api/http/WalletApiRoute.scala b/examples/src/main/scala/examples/hybrid/api/http/WalletApiRoute.scala index 7720bb0f9..316e76eb2 100644 --- a/examples/src/main/scala/examples/hybrid/api/http/WalletApiRoute.scala +++ b/examples/src/main/scala/examples/hybrid/api/http/WalletApiRoute.scala @@ -1,7 +1,5 @@ package examples.hybrid.api.http -import javax.ws.rs.Path - import akka.actor.{ActorRef, ActorRefFactory} import akka.http.scaladsl.server.Route import examples.commons.{SimpleBoxTransaction, SimpleBoxTransactionMemPool} @@ -11,12 +9,10 @@ import examples.hybrid.state.HBoxStoredState import examples.hybrid.wallet.HWallet import io.circe.parser._ import io.circe.syntax._ -import io.swagger.annotations._ import scorex.core.LocalInterface.LocallyGeneratedTransaction import scorex.core.api.http.{ApiException, ApiRouteWithFullView, SuccessApiResponse} -import scorex.core.settings.{RESTApiSettings, ScorexSettings} +import scorex.core.settings.RESTApiSettings import scorex.core.transaction.box.proposition.PublicKey25519Proposition -import scorex.core.transaction.state.PrivateKey25519 import scorex.crypto.encode.Base58 import scorex.crypto.signatures.PublicKey @@ -24,8 +20,6 @@ import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Failure, Success, Try} -@Path("/wallet") -@Api(value = "/wallet", produces = "application/json") case class WalletApiRoute(override val settings: RESTApiSettings, nodeViewHolderRef: ActorRef) (implicit val context: ActorRefFactory) extends ApiRouteWithFullView[HybridHistory, HBoxStoredState, HWallet, SimpleBoxTransactionMemPool] { @@ -37,21 +31,6 @@ case class WalletApiRoute(override val settings: RESTApiSettings, nodeViewHolder balances ~ transfer } - @Path("/transfer") - @ApiOperation(value = "Transfer", - notes = "Transfer coins from one output to another", - httpMethod = "POST", - produces = "application/json", - consumes = "application/json") - @ApiImplicitParams(Array( - new ApiImplicitParam( - name = "body", - value = "Json with data", - required = true, - paramType = "body", - defaultValue = "{\"recipient\":\"3FAskwxrbqiX2KGEnFPuD3z89aubJvvdxZTKHCrMFjxQ\",\"amount\":1,\"fee\":100}" - ) - )) def transfer: Route = path("transfer") { entity(as[String]) { body => withAuth { @@ -78,12 +57,6 @@ case class WalletApiRoute(override val settings: RESTApiSettings, nodeViewHolder } } - - @Path("/balances") - @ApiOperation(value = "Balances", notes = "Return info about local wallet", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with peer list or error") - )) def balances: Route = path("balances") { getJsonRoute { viewAsync().map { view => diff --git a/lock.sbt b/lock.sbt new file mode 100644 index 000000000..d4d7715a2 --- /dev/null +++ b/lock.sbt @@ -0,0 +1,43 @@ +// DON'T EDIT THIS FILE. +// This file is auto generated by sbt-lock 0.4.0. +// https://github.com/tkawachi/sbt-lock/ +dependencyOverrides in ThisBuild ++= Seq( + "ch.qos.logback" % "logback-classic" % "1.2.3", + "ch.qos.logback" % "logback-core" % "1.2.3", + "com.chuusai" % "shapeless_2.12" % "2.3.2", + "com.github.mpilquist" % "simulacrum_2.12" % "0.10.0", + "com.google.guava" % "guava" % "19.0", + "com.iheart" % "ficus_2.12" % "1.4.2", + "com.typesafe" % "config" % "1.3.1", + "com.typesafe" % "ssl-config-core_2.12" % "0.2.1", + "com.typesafe.akka" % "akka-actor_2.12" % "2.4.20", + "com.typesafe.akka" % "akka-http-core_2.12" % "10.0.11", + "com.typesafe.akka" % "akka-http_2.12" % "10.0.11", + "com.typesafe.akka" % "akka-parsing_2.12" % "10.0.11", + "com.typesafe.akka" % "akka-stream_2.12" % "2.4.20", + "commons-net" % "commons-net" % "3.6", + "de.heikoseeberger" % "akka-http-circe_2.12" % "1.18.0", + "io.circe" % "circe-core_2.12" % "0.8.0", + "io.circe" % "circe-generic_2.12" % "0.8.0", + "io.circe" % "circe-jawn_2.12" % "0.8.0", + "io.circe" % "circe-numbers_2.12" % "0.8.0", + "io.circe" % "circe-parser_2.12" % "0.8.0", + "org.bitlet" % "weupnp" % "0.1.4", + "org.bouncycastle" % "bcprov-jdk15on" % "1.58", + "org.reactivestreams" % "reactive-streams" % "1.0.0", + "org.rudogma" % "supertagged_2.12" % "1.3", + "org.scala-lang.modules" % "scala-java8-compat_2.12" % "0.8.0", + "org.scala-lang.modules" % "scala-parser-combinators_2.12" % "1.0.4", + "org.scala-sbt" % "test-interface" % "1.0", + "org.scalacheck" % "scalacheck_2.12" % "1.13.5", + "org.scorexfoundation" % "scrypto_2.12" % "2.0.3", + "org.slf4j" % "slf4j-api" % "1.7.25", + "org.spire-math" % "jawn-parser_2.12" % "0.10.4", + "org.typelevel" % "cats-core_2.12" % "0.9.0", + "org.typelevel" % "cats-kernel_2.12" % "0.9.0", + "org.typelevel" % "cats-macros_2.12" % "0.9.0", + "org.typelevel" % "machinist_2.12" % "0.6.1", + "org.typelevel" % "macro-compat_2.12" % "1.1.1", + "org.whispersystems" % "curve25519-java" % "0.4.1" +) +// LIBRARY_DEPENDENCIES_HASH fa340304e0dc7ea5f1fa6cc179f9e491ba80ed22 diff --git a/project/plugins.sbt b/project/plugins.sbt index 95f6218ce..6aaa4cf33 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -19,3 +19,5 @@ addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.5.1") addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.2.2") + +addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.0") diff --git a/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala b/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala index d28543b2d..bef756bd2 100644 --- a/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/NodeViewApiRoute.scala @@ -1,12 +1,9 @@ package scorex.core.api.http -import javax.ws.rs.Path - import akka.actor.{ActorRef, ActorRefFactory} import akka.http.scaladsl.server.Route import akka.pattern.ask import io.circe.syntax._ -import io.swagger.annotations._ import scorex.core.NodeViewHolder.{CurrentView, GetDataFromCurrentView} import scorex.core.consensus.History import scorex.core.network.ConnectedPeer @@ -24,8 +21,6 @@ import scala.concurrent.{Await, Future} import scala.util.{Failure, Success, Try} -@Path("/nodeView") -@Api(value = "/nodeView", produces = "application/json") case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] (override val settings: RESTApiSettings, nodeViewHolderRef: ActorRef) (implicit val context: ActorRefFactory) extends ApiRoute { @@ -59,8 +54,6 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] Await.result(nodeViewHolderRef ? GetDataFromCurrentView(f), 5.seconds).asInstanceOf[MempoolData] } - @Path("/pool") - @ApiOperation(value = "Pool", notes = "Pool of unconfirmed transactions", httpMethod = "GET") def pool: Route = path("pool") { getJsonRoute { getMempool() match { @@ -75,8 +68,6 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] } } - @Path("/openSurface") - @ApiOperation(value = "Ids of open surface", notes = "Ids of open surface in history", httpMethod = "GET") def openSurface: Route = path("openSurface") { getJsonRoute { getOpenSurface() match { @@ -86,12 +77,6 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] } } - - @Path("/persistentModifier/{id}") - @ApiOperation(value = "Persistent modifier by id", notes = "Persistent modifier by id", httpMethod = "GET") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "id", value = "block id ", required = true, dataType = "string", paramType = "path") - )) def persistentModifierById: Route = path("persistentModifier" / Segment) { encodedId => getJsonRoute { Base58.decode(encodedId) match { @@ -107,11 +92,6 @@ case class NodeViewApiRoute[P <: Proposition, TX <: Transaction[P]] } } - @Path("/transaction/{id}") - @ApiOperation(value = "Transaction by id", notes = "Transaction by id", httpMethod = "GET") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "id", value = "block id ", required = true, dataType = "string", paramType = "path") - )) def transactionById: Route = path("transaction" / Segment) { encodedId => getJsonRoute { Base58.decode(encodedId) match { diff --git a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala index 9b2a598d3..dc29e973b 100644 --- a/src/main/scala/scorex/core/api/http/PeersApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/PeersApiRoute.scala @@ -1,15 +1,12 @@ package scorex.core.api.http import java.net.{InetAddress, InetSocketAddress} -import javax.ws.rs.Path import akka.actor.{ActorRef, ActorRefFactory} import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.server.Route import akka.pattern.ask -import io.circe.generic.auto._ import io.circe.syntax._ -import io.swagger.annotations._ import scorex.core.network.Handshake import scorex.core.network.NetworkController.ConnectTo import scorex.core.network.peer.{PeerInfo, PeerManager} @@ -17,8 +14,6 @@ import scorex.core.settings.RESTApiSettings import scala.concurrent.ExecutionContext.Implicits.global -@Path("/peers") -@Api(value = "/peers", description = "Get info about peers", position = 2) case class PeersApiRoute(peerManager: ActorRef, networkController: ActorRef, override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) @@ -29,11 +24,6 @@ case class PeersApiRoute(peerManager: ActorRef, allPeers ~ connectedPeers ~ blacklistedPeers ~ connect } - @Path("/all") - @ApiOperation(value = "Peer list", notes = "Peer list", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with peer list or error") - )) def allPeers: Route = path("all") { getJsonRoute { (peerManager ? PeerManager.GetAllPeers) @@ -50,11 +40,6 @@ case class PeersApiRoute(peerManager: ActorRef, } } - @Path("/connected") - @ApiOperation(value = "Connected peers list", notes = "Connected peers list", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with connected peers or error") - )) def connectedPeers: Route = path("connected") { getJsonRoute { val now = System.currentTimeMillis() @@ -75,17 +60,7 @@ case class PeersApiRoute(peerManager: ActorRef, private val addressAndPortRegexp = "\\w+:\\d{1,5}".r - @Path("/connect") - @ApiOperation(value = "Connect to peer", notes = "Connect to peer", httpMethod = "POST") - @ApiImplicitParams(Array( - new ApiImplicitParam( - name = "body", - value = "Json with data", - required = true, - paramType = "body", - defaultValue = "{\n\t\"host\":\"127.0.0.1\",\n\t\"port\":\"9084\"\n}" - ) - )) def connect: Route = path("connect") { + def connect: Route = path("connect") { post { withAuth { entity(as[String]) { body => @@ -104,11 +79,6 @@ case class PeersApiRoute(peerManager: ActorRef, } } - @Path("/blacklisted") - @ApiOperation(value = "Blacklisted peers list", notes = "Connected peers list", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Json with connected peers or error") - )) def blacklistedPeers: Route = path("blacklisted") { getJsonRoute { (peerManager ? PeerManager.GetBlacklistedPeers) diff --git a/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala b/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala index 67084cf37..167ef948b 100644 --- a/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala +++ b/src/main/scala/scorex/core/api/http/UtilsApiRoute.scala @@ -1,19 +1,14 @@ package scorex.core.api.http import java.security.SecureRandom -import javax.ws.rs.Path import akka.actor.ActorRefFactory import akka.http.scaladsl.server.Route -import io.circe.syntax._ -import io.swagger.annotations._ -import scorex.crypto.encode.Base58 import scorex.core.settings.RESTApiSettings +import scorex.crypto.encode.Base58 import scorex.crypto.hash.Blake2b256 -@Path("/utils") -@Api(value = "/utils", description = "Useful functions", position = 3, produces = "plain/text") case class UtilsApiRoute(override val settings: RESTApiSettings)(implicit val context: ActorRefFactory) extends ApiRoute { val SeedSize = 32 @@ -27,37 +22,18 @@ case class UtilsApiRoute(override val settings: RESTApiSettings)(implicit val co seedRoute ~ length ~ hashBlake2b } - @Path("/seed") - @ApiOperation(value = "Seed", notes = "Generate random seed", httpMethod = "GET") - @ApiResponses(Array( - new ApiResponse(code = 200, message = "Seed string") - )) def seedRoute: Route = path("seed") { get { complete(seed(SeedSize)) } } - @Path("/seed/{length}") - @ApiOperation(value = "Seed of specified length", notes = "Generate random seed of specified length", httpMethod = "GET") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "length", value = "Seed length ", required = true, dataType = "long", paramType = "path") - )) - @ApiResponse(code = 200, message = "Seed string") def length: Route = path("seed" / IntNumber) { case length => get { complete(seed(length)) } } - @Path("/hash/blake2b") - @ApiOperation(value = "Hash", notes = "Return Blake2b hash of specified message", httpMethod = "POST") - @ApiImplicitParams(Array( - new ApiImplicitParam(name = "message", value = "Message to hash", required = true, paramType = "body", dataType = "String") - )) - @ApiResponses(Array( - new ApiResponse(code = 200, message = "hash value") - )) def hashBlake2b: Route = { path("hash" / "blake2b") { post { diff --git a/src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala b/src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala index cd4d439a5..c5aaa4669 100644 --- a/src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala +++ b/src/main/scala/scorex/core/api/http/swagger/SwaggerConfigRoute.scala @@ -1,9 +1,8 @@ package scorex.core.api.http.swagger import akka.actor.ActorRefFactory -import akka.http.scaladsl.model.HttpEntity +import akka.http.scaladsl.model.{ContentTypes, HttpEntity} import akka.http.scaladsl.server.Route -import com.github.swagger.akka.CustomMediaTypes import scorex.core.api.http.ApiRoute import scorex.core.settings.RESTApiSettings @@ -13,7 +12,8 @@ class SwaggerConfigRoute(swaggerConf: String, override val settings: RESTApiSett override val route: Route = { path("api-docs" / "swagger.conf") { get { - complete(HttpEntity(CustomMediaTypes.`text/vnd.yaml`, swaggerConf)) + //TODO correct content type? + complete(HttpEntity(ContentTypes.`application/json`, swaggerConf)) } } } diff --git a/src/main/scala/scorex/core/settings/Settings.scala b/src/main/scala/scorex/core/settings/Settings.scala index d9269da31..4d608be02 100644 --- a/src/main/scala/scorex/core/settings/Settings.scala +++ b/src/main/scala/scorex/core/settings/Settings.scala @@ -3,7 +3,6 @@ package scorex.core.settings import java.io.File import java.net.InetSocketAddress -import com.github.swagger.akka.model.Info import com.typesafe.config.{Config, ConfigFactory} import scorex.core.utils.{ByteStr, ScorexLogging} import net.ceedubs.ficus.Ficus._ @@ -17,8 +16,7 @@ case class RESTApiSettings(bindAddress: String, port: Int, apiKeyHash: Option[String], corsAllowed: Boolean, - timeout: FiniteDuration, - swaggerInfo: Info) + timeout: FiniteDuration) case class NetworkSettings(nodeName: String, nodeNonce: Option[Long] = Some(new Random().nextLong()), From ec9a2e68ed794f8234f107fd5a788ff352f89dcf Mon Sep 17 00:00:00 2001 From: catena Date: Wed, 20 Dec 2017 18:23:52 +0300 Subject: [PATCH 17/26] New swagger --- src/main/resources/swagger-ui/css/print.css | 1187 - src/main/resources/swagger-ui/css/reset.css | 125 - src/main/resources/swagger-ui/css/screen.css | 1300 - src/main/resources/swagger-ui/css/style.css | 250 - .../resources/swagger-ui/css/typography.css | 14 - .../resources/swagger-ui/favicon-16x16.png | Bin 0 -> 445 bytes .../resources/swagger-ui/favicon-32x32.png | Bin 0 -> 1141 bytes .../swagger-ui/fonts/DroidSans-Bold.ttf | 0 .../resources/swagger-ui/fonts/DroidSans.ttf | 0 .../resources/swagger-ui/images/collapse.gif | Bin 69 -> 0 bytes .../resources/swagger-ui/images/expand.gif | Bin 73 -> 0 bytes .../swagger-ui/images/explorer_icons.png | Bin 5763 -> 0 bytes .../swagger-ui/images/favicon-16x16.png | Bin 645 -> 0 bytes .../swagger-ui/images/favicon-32x32.png | Bin 1654 -> 0 bytes .../resources/swagger-ui/images/favicon.ico | Bin 5430 -> 0 bytes .../swagger-ui/images/logo_small.png | Bin 770 -> 0 bytes .../swagger-ui/images/pet_store_api.png | Bin 824 -> 0 bytes .../resources/swagger-ui/images/throbber.gif | Bin 9257 -> 0 bytes .../swagger-ui/images/wordnik_api.png | Bin 980 -> 0 bytes src/main/resources/swagger-ui/index.html | 181 +- src/main/resources/swagger-ui/lang/en.js | 55 - src/main/resources/swagger-ui/lang/es.js | 52 - src/main/resources/swagger-ui/lang/fr.js | 53 - src/main/resources/swagger-ui/lang/it.js | 52 - src/main/resources/swagger-ui/lang/ja.js | 53 - src/main/resources/swagger-ui/lang/pl.js | 53 - src/main/resources/swagger-ui/lang/pt.js | 53 - src/main/resources/swagger-ui/lang/ru.js | 55 - src/main/resources/swagger-ui/lang/tr.js | 53 - .../resources/swagger-ui/lang/translator.js | 39 - src/main/resources/swagger-ui/lang/zh-cn.js | 53 - .../resources/swagger-ui/lib/backbone-min.js | 15 - .../swagger-ui/lib/handlebars-2.0.0.js | 28 - .../swagger-ui/lib/highlight.7.3.pack.js | 1 - .../swagger-ui/lib/jquery-1.8.0.min.js | 2 - .../swagger-ui/lib/jquery.ba-bbq.min.js | 18 - .../swagger-ui/lib/jquery.slideto.min.js | 1 - .../swagger-ui/lib/jquery.wiggle.min.js | 8 - .../swagger-ui/lib/jsoneditor.min.js | 11 - src/main/resources/swagger-ui/lib/marked.js | 1272 - .../resources/swagger-ui/lib/swagger-oauth.js | 338 - .../swagger-ui/lib/underscore-min.js | 6 - .../swagger-ui/lib/underscore-min.map | 1 - src/main/resources/swagger-ui/o2c.html | 20 - .../resources/swagger-ui/oauth2-redirect.html | 60 + .../resources/swagger-ui/swagger-ui-bundle.js | 99 + .../swagger-ui/swagger-ui-bundle.js.map | 1 + .../swagger-ui-standalone-preset.js | 13 + .../swagger-ui-standalone-preset.js.map | 1 + src/main/resources/swagger-ui/swagger-ui.css | 2 + .../resources/swagger-ui/swagger-ui.css.map | 1 + src/main/resources/swagger-ui/swagger-ui.js | 26328 +--------------- .../resources/swagger-ui/swagger-ui.js.map | 1 + .../resources/swagger-ui/swagger-ui.min.js | 11 - 54 files changed, 257 insertions(+), 31609 deletions(-) delete mode 100644 src/main/resources/swagger-ui/css/print.css delete mode 100644 src/main/resources/swagger-ui/css/reset.css delete mode 100644 src/main/resources/swagger-ui/css/screen.css delete mode 100644 src/main/resources/swagger-ui/css/style.css delete mode 100644 src/main/resources/swagger-ui/css/typography.css create mode 100644 src/main/resources/swagger-ui/favicon-16x16.png create mode 100644 src/main/resources/swagger-ui/favicon-32x32.png delete mode 100644 src/main/resources/swagger-ui/fonts/DroidSans-Bold.ttf delete mode 100644 src/main/resources/swagger-ui/fonts/DroidSans.ttf delete mode 100644 src/main/resources/swagger-ui/images/collapse.gif delete mode 100644 src/main/resources/swagger-ui/images/expand.gif delete mode 100644 src/main/resources/swagger-ui/images/explorer_icons.png delete mode 100644 src/main/resources/swagger-ui/images/favicon-16x16.png delete mode 100644 src/main/resources/swagger-ui/images/favicon-32x32.png delete mode 100644 src/main/resources/swagger-ui/images/favicon.ico delete mode 100644 src/main/resources/swagger-ui/images/logo_small.png delete mode 100644 src/main/resources/swagger-ui/images/pet_store_api.png delete mode 100644 src/main/resources/swagger-ui/images/throbber.gif delete mode 100644 src/main/resources/swagger-ui/images/wordnik_api.png delete mode 100644 src/main/resources/swagger-ui/lang/en.js delete mode 100644 src/main/resources/swagger-ui/lang/es.js delete mode 100644 src/main/resources/swagger-ui/lang/fr.js delete mode 100644 src/main/resources/swagger-ui/lang/it.js delete mode 100644 src/main/resources/swagger-ui/lang/ja.js delete mode 100644 src/main/resources/swagger-ui/lang/pl.js delete mode 100644 src/main/resources/swagger-ui/lang/pt.js delete mode 100644 src/main/resources/swagger-ui/lang/ru.js delete mode 100644 src/main/resources/swagger-ui/lang/tr.js delete mode 100644 src/main/resources/swagger-ui/lang/translator.js delete mode 100644 src/main/resources/swagger-ui/lang/zh-cn.js delete mode 100644 src/main/resources/swagger-ui/lib/backbone-min.js delete mode 100644 src/main/resources/swagger-ui/lib/handlebars-2.0.0.js delete mode 100644 src/main/resources/swagger-ui/lib/highlight.7.3.pack.js delete mode 100644 src/main/resources/swagger-ui/lib/jquery-1.8.0.min.js delete mode 100644 src/main/resources/swagger-ui/lib/jquery.ba-bbq.min.js delete mode 100644 src/main/resources/swagger-ui/lib/jquery.slideto.min.js delete mode 100644 src/main/resources/swagger-ui/lib/jquery.wiggle.min.js delete mode 100644 src/main/resources/swagger-ui/lib/jsoneditor.min.js delete mode 100644 src/main/resources/swagger-ui/lib/marked.js delete mode 100644 src/main/resources/swagger-ui/lib/swagger-oauth.js delete mode 100644 src/main/resources/swagger-ui/lib/underscore-min.js delete mode 100644 src/main/resources/swagger-ui/lib/underscore-min.map delete mode 100644 src/main/resources/swagger-ui/o2c.html create mode 100644 src/main/resources/swagger-ui/oauth2-redirect.html create mode 100644 src/main/resources/swagger-ui/swagger-ui-bundle.js create mode 100644 src/main/resources/swagger-ui/swagger-ui-bundle.js.map create mode 100644 src/main/resources/swagger-ui/swagger-ui-standalone-preset.js create mode 100644 src/main/resources/swagger-ui/swagger-ui-standalone-preset.js.map create mode 100644 src/main/resources/swagger-ui/swagger-ui.css create mode 100644 src/main/resources/swagger-ui/swagger-ui.css.map create mode 100644 src/main/resources/swagger-ui/swagger-ui.js.map delete mode 100644 src/main/resources/swagger-ui/swagger-ui.min.js diff --git a/src/main/resources/swagger-ui/css/print.css b/src/main/resources/swagger-ui/css/print.css deleted file mode 100644 index 2e6b31030..000000000 --- a/src/main/resources/swagger-ui/css/print.css +++ /dev/null @@ -1,1187 +0,0 @@ -/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ -.swagger-section pre code { - display: block; - padding: 0.5em; - background: #F0F0F0; -} -.swagger-section pre code, -.swagger-section pre .subst, -.swagger-section pre .tag .title, -.swagger-section pre .lisp .title, -.swagger-section pre .clojure .built_in, -.swagger-section pre .nginx .title { - color: black; -} -.swagger-section pre .string, -.swagger-section pre .title, -.swagger-section pre .constant, -.swagger-section pre .parent, -.swagger-section pre .tag .value, -.swagger-section pre .rules .value, -.swagger-section pre .rules .value .number, -.swagger-section pre .preprocessor, -.swagger-section pre .ruby .symbol, -.swagger-section pre .ruby .symbol .string, -.swagger-section pre .aggregate, -.swagger-section pre .template_tag, -.swagger-section pre .django .variable, -.swagger-section pre .smalltalk .class, -.swagger-section pre .addition, -.swagger-section pre .flow, -.swagger-section pre .stream, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .apache .cbracket, -.swagger-section pre .tex .command, -.swagger-section pre .tex .special, -.swagger-section pre .erlang_repl .function_or_atom, -.swagger-section pre .markdown .header { - color: #800; -} -.swagger-section pre .comment, -.swagger-section pre .annotation, -.swagger-section pre .template_comment, -.swagger-section pre .diff .header, -.swagger-section pre .chunk, -.swagger-section pre .markdown .blockquote { - color: #888; -} -.swagger-section pre .number, -.swagger-section pre .date, -.swagger-section pre .regexp, -.swagger-section pre .literal, -.swagger-section pre .smalltalk .symbol, -.swagger-section pre .smalltalk .char, -.swagger-section pre .go .constant, -.swagger-section pre .change, -.swagger-section pre .markdown .bullet, -.swagger-section pre .markdown .link_url { - color: #080; -} -.swagger-section pre .label, -.swagger-section pre .javadoc, -.swagger-section pre .ruby .string, -.swagger-section pre .decorator, -.swagger-section pre .filter .argument, -.swagger-section pre .localvars, -.swagger-section pre .array, -.swagger-section pre .attr_selector, -.swagger-section pre .important, -.swagger-section pre .pseudo, -.swagger-section pre .pi, -.swagger-section pre .doctype, -.swagger-section pre .deletion, -.swagger-section pre .envvar, -.swagger-section pre .shebang, -.swagger-section pre .apache .sqbracket, -.swagger-section pre .nginx .built_in, -.swagger-section pre .tex .formula, -.swagger-section pre .erlang_repl .reserved, -.swagger-section pre .prompt, -.swagger-section pre .markdown .link_label, -.swagger-section pre .vhdl .attribute, -.swagger-section pre .clojure .attribute, -.swagger-section pre .coffeescript .property { - color: #8888ff; -} -.swagger-section pre .keyword, -.swagger-section pre .id, -.swagger-section pre .phpdoc, -.swagger-section pre .title, -.swagger-section pre .built_in, -.swagger-section pre .aggregate, -.swagger-section pre .css .tag, -.swagger-section pre .javadoctag, -.swagger-section pre .phpdoc, -.swagger-section pre .yardoctag, -.swagger-section pre .smalltalk .class, -.swagger-section pre .winutils, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .go .typename, -.swagger-section pre .tex .command, -.swagger-section pre .markdown .strong, -.swagger-section pre .request, -.swagger-section pre .status { - font-weight: bold; -} -.swagger-section pre .markdown .emphasis { - font-style: italic; -} -.swagger-section pre .nginx .built_in { - font-weight: normal; -} -.swagger-section pre .coffeescript .javascript, -.swagger-section pre .javascript .xml, -.swagger-section pre .tex .formula, -.swagger-section pre .xml .javascript, -.swagger-section pre .xml .vbscript, -.swagger-section pre .xml .css, -.swagger-section pre .xml .cdata { - opacity: 0.5; -} -.swagger-section .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; - /* JSONEditor specific styling */ -} -.swagger-section .swagger-ui-wrap b, -.swagger-section .swagger-ui-wrap strong { - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap q, -.swagger-section .swagger-ui-wrap blockquote { - quotes: none; -} -.swagger-section .swagger-ui-wrap p { - line-height: 1.4em; - padding: 0 0 10px; - color: #333333; -} -.swagger-section .swagger-ui-wrap q:before, -.swagger-section .swagger-ui-wrap q:after, -.swagger-section .swagger-ui-wrap blockquote:before, -.swagger-section .swagger-ui-wrap blockquote:after { - content: none; -} -.swagger-section .swagger-ui-wrap .heading_with_menu h1, -.swagger-section .swagger-ui-wrap .heading_with_menu h2, -.swagger-section .swagger-ui-wrap .heading_with_menu h3, -.swagger-section .swagger-ui-wrap .heading_with_menu h4, -.swagger-section .swagger-ui-wrap .heading_with_menu h5, -.swagger-section .swagger-ui-wrap .heading_with_menu h6 { - display: block; - clear: none; - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - width: 60%; -} -.swagger-section .swagger-ui-wrap table { - border-collapse: collapse; - border-spacing: 0; -} -.swagger-section .swagger-ui-wrap table thead tr th { - padding: 5px; - font-size: 0.9em; - color: #666666; - border-bottom: 1px solid #999999; -} -.swagger-section .swagger-ui-wrap table tbody tr:last-child td { - border-bottom: none; -} -.swagger-section .swagger-ui-wrap table tbody tr.offset { - background-color: #f0f0f0; -} -.swagger-section .swagger-ui-wrap table tbody tr td { - padding: 6px; - font-size: 0.9em; - border-bottom: 1px solid #cccccc; - vertical-align: top; - line-height: 1.3em; -} -.swagger-section .swagger-ui-wrap ol { - margin: 0px 0 10px; - padding: 0 0 0 18px; - list-style-type: decimal; -} -.swagger-section .swagger-ui-wrap ol li { - padding: 5px 0px; - font-size: 0.9em; - color: #333333; -} -.swagger-section .swagger-ui-wrap ol, -.swagger-section .swagger-ui-wrap ul { - list-style: none; -} -.swagger-section .swagger-ui-wrap h1 a, -.swagger-section .swagger-ui-wrap h2 a, -.swagger-section .swagger-ui-wrap h3 a, -.swagger-section .swagger-ui-wrap h4 a, -.swagger-section .swagger-ui-wrap h5 a, -.swagger-section .swagger-ui-wrap h6 a { - text-decoration: none; -} -.swagger-section .swagger-ui-wrap h1 a:hover, -.swagger-section .swagger-ui-wrap h2 a:hover, -.swagger-section .swagger-ui-wrap h3 a:hover, -.swagger-section .swagger-ui-wrap h4 a:hover, -.swagger-section .swagger-ui-wrap h5 a:hover, -.swagger-section .swagger-ui-wrap h6 a:hover { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap h1 span.divider, -.swagger-section .swagger-ui-wrap h2 span.divider, -.swagger-section .swagger-ui-wrap h3 span.divider, -.swagger-section .swagger-ui-wrap h4 span.divider, -.swagger-section .swagger-ui-wrap h5 span.divider, -.swagger-section .swagger-ui-wrap h6 span.divider { - color: #aaaaaa; -} -.swagger-section .swagger-ui-wrap a { - color: #547f00; -} -.swagger-section .swagger-ui-wrap a img { - border: none; -} -.swagger-section .swagger-ui-wrap article, -.swagger-section .swagger-ui-wrap aside, -.swagger-section .swagger-ui-wrap details, -.swagger-section .swagger-ui-wrap figcaption, -.swagger-section .swagger-ui-wrap figure, -.swagger-section .swagger-ui-wrap footer, -.swagger-section .swagger-ui-wrap header, -.swagger-section .swagger-ui-wrap hgroup, -.swagger-section .swagger-ui-wrap menu, -.swagger-section .swagger-ui-wrap nav, -.swagger-section .swagger-ui-wrap section, -.swagger-section .swagger-ui-wrap summary { - display: block; -} -.swagger-section .swagger-ui-wrap pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; -} -.swagger-section .swagger-ui-wrap pre code { - line-height: 1.6em; - background: none; -} -.swagger-section .swagger-ui-wrap .content > .content-type > div > label { - clear: both; - display: block; - color: #0F6AB4; - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} -.swagger-section .swagger-ui-wrap .content pre { - font-size: 12px; - margin-top: 5px; - padding: 5px; -} -.swagger-section .swagger-ui-wrap .icon-btn { - cursor: pointer; -} -.swagger-section .swagger-ui-wrap .info_title { - padding-bottom: 10px; - font-weight: bold; - font-size: 25px; -} -.swagger-section .swagger-ui-wrap .footer { - margin-top: 20px; -} -.swagger-section .swagger-ui-wrap p.big, -.swagger-section .swagger-ui-wrap div.big p { - font-size: 1em; - margin-bottom: 10px; -} -.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { - width: 500px !important; -} -.swagger-section .swagger-ui-wrap .info_license { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_tos { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .message-fail { - color: #cc0000; -} -.swagger-section .swagger-ui-wrap .info_url { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_email { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_name { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_description { - padding-bottom: 10px; - font-size: 15px; -} -.swagger-section .swagger-ui-wrap .markdown ol li, -.swagger-section .swagger-ui-wrap .markdown ul li { - padding: 3px 0px; - line-height: 1.4em; - color: #333333; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { - display: block; - padding: 4px; - width: auto; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { - font-size: 1.3em; -} -.swagger-section .swagger-ui-wrap table.fullwidth { - width: 100%; -} -.swagger-section .swagger-ui-wrap .model-signature { - font-family: "Droid Sans", sans-serif; - font-size: 1em; - line-height: 1.5em; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { - text-decoration: none; - color: #AAA; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { - text-decoration: underline; - color: black; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { - color: black; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap .model-signature .propType { - color: #5555aa; -} -.swagger-section .swagger-ui-wrap .model-signature pre:hover { - background-color: #ffffdd; -} -.swagger-section .swagger-ui-wrap .model-signature pre { - font-size: .85em; - line-height: 1.2em; - overflow: auto; - max-height: 200px; - cursor: pointer; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { - display: block; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { - float: left; - margin: 0 5px 5px 0; - padding: 2px 5px 2px 0; - border-right: 1px solid #ddd; -} -.swagger-section .swagger-ui-wrap .model-signature .propOpt { - color: #555; -} -.swagger-section .swagger-ui-wrap .model-signature .snippet small { - font-size: 0.75em; -} -.swagger-section .swagger-ui-wrap .model-signature .propOptKey { - font-style: italic; -} -.swagger-section .swagger-ui-wrap .model-signature .description .strong { - font-weight: bold; - color: #000; - font-size: .9em; -} -.swagger-section .swagger-ui-wrap .model-signature .description div { - font-size: 0.9em; - line-height: 1.5em; - margin-left: 1em; -} -.swagger-section .swagger-ui-wrap .model-signature .description .stronger { - font-weight: bold; - color: #000; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { - border-spacing: 0; - position: absolute; - background-color: #ffffff; - border: 1px solid #bbbbbb; - display: none; - font-size: 11px; - max-width: 400px; - line-height: 30px; - color: black; - padding: 5px; - margin-left: 10px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { - text-align: center; - background-color: #eeeeee; - border: 1px solid #bbbbbb; - font-size: 11px; - color: #666666; - font-weight: bold; - padding: 5px; - line-height: 15px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { - display: inline; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { - display: block; - content: ''; -} -.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { - margin-right: -3px; -} -.swagger-section .swagger-ui-wrap .model-signature .propName { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-container { - clear: both; -} -.swagger-section .swagger-ui-wrap .body-textarea { - width: 300px; - height: 100px; - border: 1px solid #aaa; -} -.swagger-section .swagger-ui-wrap .markdown p code, -.swagger-section .swagger-ui-wrap .markdown li code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #f0f0f0; - color: black; - padding: 1px 3px; -} -.swagger-section .swagger-ui-wrap .required { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .editor_holder { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap .editor_holder label { - font-weight: normal!important; - /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ -} -.swagger-section .swagger-ui-wrap .editor_holder label.required { - font-weight: bold!important; -} -.swagger-section .swagger-ui-wrap input.parameter { - width: 300px; - border: 1px solid #aaa; -} -.swagger-section .swagger-ui-wrap h1 { - color: black; - font-size: 1.5em; - line-height: 1.3em; - padding: 10px 0 10px 0; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .heading_with_menu { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap .heading_with_menu ul { - display: block; - clear: none; - float: right; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - margin-top: 10px; -} -.swagger-section .swagger-ui-wrap h2 { - color: black; - font-size: 1.3em; - padding: 10px 0 10px 0; -} -.swagger-section .swagger-ui-wrap h2 a { - color: black; -} -.swagger-section .swagger-ui-wrap h2 span.sub { - font-size: 0.7em; - color: #999999; - font-style: italic; -} -.swagger-section .swagger-ui-wrap h2 span.sub a { - color: #777777; -} -.swagger-section .swagger-ui-wrap span.weak { - color: #666666; -} -.swagger-section .swagger-ui-wrap .message-success { - color: #89BF04; -} -.swagger-section .swagger-ui-wrap caption, -.swagger-section .swagger-ui-wrap th, -.swagger-section .swagger-ui-wrap td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} -.swagger-section .swagger-ui-wrap .code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { - font-family: "Droid Sans", sans-serif; - height: 250px; - padding: 4px; - display: block; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { - display: block; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { - display: block; - float: left; - clear: none; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { - display: block; - float: left; - clear: none; - margin: 0 5px 0 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { - color: black; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { - display: block; - clear: both; - width: auto; - padding: 0 0 3px; - color: #666666; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { - padding-left: 3px; - color: #888888; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { - margin-left: 0; - font-style: italic; - font-size: 0.9em; - margin: 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap span.blank, -.swagger-section .swagger-ui-wrap span.empty { - color: #888888; - font-style: italic; -} -.swagger-section .swagger-ui-wrap .markdown h3 { - color: #547f00; -} -.swagger-section .swagger-ui-wrap .markdown h4 { - color: #666666; -} -.swagger-section .swagger-ui-wrap .markdown pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; - margin: 0 0 10px 0; -} -.swagger-section .swagger-ui-wrap .markdown pre code { - line-height: 1.6em; -} -.swagger-section .swagger-ui-wrap div.gist { - margin: 20px 0 25px 0 !important; -} -.swagger-section .swagger-ui-wrap ul#resources { - font-family: "Droid Sans", sans-serif; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource { - border-bottom: 1px solid #dddddd; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { - color: #555555; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { - border-bottom: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { - border: 1px solid transparent; - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 14px 10px 0 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - border-right: 1px solid #dddddd; - color: #666666; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { - color: #aaaaaa; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { - text-decoration: underline; - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #999999; - padding-left: 0; - display: block; - clear: none; - float: left; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #999999; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0 0 10px; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { - display: block; - clear: none; - float: left; - width: auto; - margin: 0; - padding: 0; - line-height: 1.1em; - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { - padding-left: 10px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { - color: black; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { - text-transform: uppercase; - text-decoration: none; - color: white; - display: inline-block; - width: 50px; - font-size: 0.7em; - text-align: center; - padding: 7px 0 4px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - -o-border-radius: 2px; - -ms-border-radius: 2px; - -khtml-border-radius: 2px; - border-radius: 2px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 6px 10px 0 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - border-top: none; - padding: 10px; - -moz-border-radius-bottomleft: 6px; - -webkit-border-bottom-left-radius: 6px; - -o-border-bottom-left-radius: 6px; - -ms-border-bottom-left-radius: 6px; - -khtml-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-right-radius: 6px; - -o-border-bottom-right-radius: 6px; - -ms-border-bottom-right-radius: 6px; - -khtml-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - margin: 0 0 20px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { - padding: 4px 0 0 10px; - display: inline-block; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { - display: block; - clear: none; - float: left; - padding: 6px 8px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { - background-image: url('../images/throbber.gif'); - width: 128px; - height: 16px; - display: block; - clear: none; - float: right; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { - outline: 2px solid black; - outline-color: #cc0000; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form select[name='parameterContentType'] { - max-width: 300px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - padding: 10px; - font-size: 0.9em; - max-height: 400px; - overflow-y: auto; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { - background-color: #f9f2e9; - border: 1px solid #f0e0ca; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { - background-color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0e0ca; - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { - background-color: #faf5ee; - border: 1px solid #f0e0ca; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { - color: #dcb67f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #ffd20f; - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { - color: #6fc992; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { - background-color: #f5e8e8; - border: 1px solid #e8c6c7; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #e8c6c7; - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - background-color: #f7eded; - border: 1px solid #e8c6c7; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { - color: #c8787a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { - background-color: #e7f6ec; - border: 1px solid #c3e8d1; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { - background-color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3e8d1; - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { - background-color: #ebf7f0; - border: 1px solid #c3e8d1; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { - color: #6fc992; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { - background-color: #FCE9E3; - border: 1px solid #F5D5C3; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { - background-color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0cecb; - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { - background-color: #faf0ef; - border: 1px solid #f0cecb; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { - color: #dcb67f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { - background-color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { - color: #6fa5d2; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { - background-color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { - color: #6fa5d2; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - border-top: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap p#colophon { - margin: 0 15px 40px 15px; - padding: 10px 0; - font-size: 0.8em; - border-top: 1px solid #dddddd; - font-family: "Droid Sans", sans-serif; - color: #999999; - font-style: italic; -} -.swagger-section .swagger-ui-wrap p#colophon a { - text-decoration: none; - color: #547f00; -} -.swagger-section .swagger-ui-wrap h3 { - color: black; - font-size: 1.1em; - padding: 10px 0 10px 0; -} -.swagger-section .swagger-ui-wrap .markdown ol, -.swagger-section .swagger-ui-wrap .markdown ul { - font-family: "Droid Sans", sans-serif; - margin: 5px 0 10px; - padding: 0 0 0 18px; - list-style-type: disc; -} -.swagger-section .swagger-ui-wrap form.form_box { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; - padding: 10px; -} -.swagger-section .swagger-ui-wrap form.form_box label { - color: #0f6ab4 !important; -} -.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { - display: block; - padding: 10px; -} -.swagger-section .swagger-ui-wrap form.form_box p.weak { - font-size: 0.8em; -} -.swagger-section .swagger-ui-wrap form.form_box p { - font-size: 0.9em; - padding: 0 0 15px; - color: #7e7b6d; -} -.swagger-section .swagger-ui-wrap form.form_box p a { - color: #646257; -} -.swagger-section .swagger-ui-wrap form.form_box p strong { - color: black; -} -.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { - padding-bottom: 0; -} -.swagger-section .title { - font-style: bold; -} -.swagger-section .secondary_form { - display: none; -} -.swagger-section .main_image { - display: block; - margin-left: auto; - margin-right: auto; -} -.swagger-section .oauth_body { - margin-left: 100px; - margin-right: 100px; -} -.swagger-section .oauth_submit { - text-align: center; -} -.swagger-section .api-popup-dialog { - z-index: 10000; - position: absolute; - width: 500px; - background: #FFF; - padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - color: #777; -} -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} -.swagger-section .api-popup-dialog .error-msg { - padding-left: 5px; - padding-bottom: 5px; -} -.swagger-section .api-popup-dialog .api-popup-authbtn { - height: 30px; -} -.swagger-section .api-popup-dialog .api-popup-cancel { - height: 30px; -} -.swagger-section .api-popup-scopes { - padding: 10px 20px; -} -.swagger-section .api-popup-scopes li { - padding: 5px 0; - line-height: 20px; -} -.swagger-section .api-popup-scopes li input { - position: relative; - top: 2px; -} -.swagger-section .api-popup-scopes .api-scope-desc { - padding-left: 20px; - font-style: italic; -} -.swagger-section .api-popup-actions { - padding-top: 10px; -} -#header { - display: none; -} -.swagger-section .swagger-ui-wrap .model-signature pre { - max-height: none; -} -.swagger-section .swagger-ui-wrap .body-textarea { - width: 100px; -} -.swagger-section .swagger-ui-wrap input.parameter { - width: 100px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - display: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints { - display: block !important; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - display: block !important; -} diff --git a/src/main/resources/swagger-ui/css/reset.css b/src/main/resources/swagger-ui/css/reset.css deleted file mode 100644 index b2b078943..000000000 --- a/src/main/resources/swagger-ui/css/reset.css +++ /dev/null @@ -1,125 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -b, -u, -i, -center, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -canvas, -details, -embed, -figure, -figcaption, -footer, -header, -hgroup, -menu, -nav, -output, -ruby, -section, -summary, -time, -mark, -audio, -video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} -body { - line-height: 1; -} -ol, -ul { - list-style: none; -} -blockquote, -q { - quotes: none; -} -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/src/main/resources/swagger-ui/css/screen.css b/src/main/resources/swagger-ui/css/screen.css deleted file mode 100644 index ef4673db9..000000000 --- a/src/main/resources/swagger-ui/css/screen.css +++ /dev/null @@ -1,1300 +0,0 @@ -/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ -.swagger-section pre code { - display: block; - padding: 0.5em; - background: #F0F0F0; -} -.swagger-section pre code, -.swagger-section pre .subst, -.swagger-section pre .tag .title, -.swagger-section pre .lisp .title, -.swagger-section pre .clojure .built_in, -.swagger-section pre .nginx .title { - color: black; -} -.swagger-section pre .string, -.swagger-section pre .title, -.swagger-section pre .constant, -.swagger-section pre .parent, -.swagger-section pre .tag .value, -.swagger-section pre .rules .value, -.swagger-section pre .rules .value .number, -.swagger-section pre .preprocessor, -.swagger-section pre .ruby .symbol, -.swagger-section pre .ruby .symbol .string, -.swagger-section pre .aggregate, -.swagger-section pre .template_tag, -.swagger-section pre .django .variable, -.swagger-section pre .smalltalk .class, -.swagger-section pre .addition, -.swagger-section pre .flow, -.swagger-section pre .stream, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .apache .cbracket, -.swagger-section pre .tex .command, -.swagger-section pre .tex .special, -.swagger-section pre .erlang_repl .function_or_atom, -.swagger-section pre .markdown .header { - color: #800; -} -.swagger-section pre .comment, -.swagger-section pre .annotation, -.swagger-section pre .template_comment, -.swagger-section pre .diff .header, -.swagger-section pre .chunk, -.swagger-section pre .markdown .blockquote { - color: #888; -} -.swagger-section pre .number, -.swagger-section pre .date, -.swagger-section pre .regexp, -.swagger-section pre .literal, -.swagger-section pre .smalltalk .symbol, -.swagger-section pre .smalltalk .char, -.swagger-section pre .go .constant, -.swagger-section pre .change, -.swagger-section pre .markdown .bullet, -.swagger-section pre .markdown .link_url { - color: #080; -} -.swagger-section pre .label, -.swagger-section pre .javadoc, -.swagger-section pre .ruby .string, -.swagger-section pre .decorator, -.swagger-section pre .filter .argument, -.swagger-section pre .localvars, -.swagger-section pre .array, -.swagger-section pre .attr_selector, -.swagger-section pre .important, -.swagger-section pre .pseudo, -.swagger-section pre .pi, -.swagger-section pre .doctype, -.swagger-section pre .deletion, -.swagger-section pre .envvar, -.swagger-section pre .shebang, -.swagger-section pre .apache .sqbracket, -.swagger-section pre .nginx .built_in, -.swagger-section pre .tex .formula, -.swagger-section pre .erlang_repl .reserved, -.swagger-section pre .prompt, -.swagger-section pre .markdown .link_label, -.swagger-section pre .vhdl .attribute, -.swagger-section pre .clojure .attribute, -.swagger-section pre .coffeescript .property { - color: #8888ff; -} -.swagger-section pre .keyword, -.swagger-section pre .id, -.swagger-section pre .phpdoc, -.swagger-section pre .title, -.swagger-section pre .built_in, -.swagger-section pre .aggregate, -.swagger-section pre .css .tag, -.swagger-section pre .javadoctag, -.swagger-section pre .phpdoc, -.swagger-section pre .yardoctag, -.swagger-section pre .smalltalk .class, -.swagger-section pre .winutils, -.swagger-section pre .bash .variable, -.swagger-section pre .apache .tag, -.swagger-section pre .go .typename, -.swagger-section pre .tex .command, -.swagger-section pre .markdown .strong, -.swagger-section pre .request, -.swagger-section pre .status { - font-weight: bold; -} -.swagger-section pre .markdown .emphasis { - font-style: italic; -} -.swagger-section pre .nginx .built_in { - font-weight: normal; -} -.swagger-section pre .coffeescript .javascript, -.swagger-section pre .javascript .xml, -.swagger-section pre .tex .formula, -.swagger-section pre .xml .javascript, -.swagger-section pre .xml .vbscript, -.swagger-section pre .xml .css, -.swagger-section pre .xml .cdata { - opacity: 0.5; -} -.swagger-section .swagger-ui-wrap { - line-height: 1; - font-family: "Droid Sans", sans-serif; - max-width: 960px; - margin-left: auto; - margin-right: auto; - /* JSONEditor specific styling */ -} -.swagger-section .swagger-ui-wrap b, -.swagger-section .swagger-ui-wrap strong { - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap q, -.swagger-section .swagger-ui-wrap blockquote { - quotes: none; -} -.swagger-section .swagger-ui-wrap p { - line-height: 1.4em; - padding: 0 0 10px; - color: #333333; -} -.swagger-section .swagger-ui-wrap q:before, -.swagger-section .swagger-ui-wrap q:after, -.swagger-section .swagger-ui-wrap blockquote:before, -.swagger-section .swagger-ui-wrap blockquote:after { - content: none; -} -.swagger-section .swagger-ui-wrap .heading_with_menu h1, -.swagger-section .swagger-ui-wrap .heading_with_menu h2, -.swagger-section .swagger-ui-wrap .heading_with_menu h3, -.swagger-section .swagger-ui-wrap .heading_with_menu h4, -.swagger-section .swagger-ui-wrap .heading_with_menu h5, -.swagger-section .swagger-ui-wrap .heading_with_menu h6 { - display: block; - clear: none; - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - width: 60%; -} -.swagger-section .swagger-ui-wrap table { - border-collapse: collapse; - border-spacing: 0; -} -.swagger-section .swagger-ui-wrap table thead tr th { - padding: 5px; - font-size: 0.9em; - color: #666666; - border-bottom: 1px solid #999999; -} -.swagger-section .swagger-ui-wrap table tbody tr:last-child td { - border-bottom: none; -} -.swagger-section .swagger-ui-wrap table tbody tr.offset { - background-color: #f0f0f0; -} -.swagger-section .swagger-ui-wrap table tbody tr td { - padding: 6px; - font-size: 0.9em; - border-bottom: 1px solid #cccccc; - vertical-align: top; - line-height: 1.3em; -} -.swagger-section .swagger-ui-wrap ol { - margin: 0px 0 10px; - padding: 0 0 0 18px; - list-style-type: decimal; -} -.swagger-section .swagger-ui-wrap ol li { - padding: 5px 0px; - font-size: 0.9em; - color: #333333; -} -.swagger-section .swagger-ui-wrap ol, -.swagger-section .swagger-ui-wrap ul { - list-style: none; -} -.swagger-section .swagger-ui-wrap h1 a, -.swagger-section .swagger-ui-wrap h2 a, -.swagger-section .swagger-ui-wrap h3 a, -.swagger-section .swagger-ui-wrap h4 a, -.swagger-section .swagger-ui-wrap h5 a, -.swagger-section .swagger-ui-wrap h6 a { - text-decoration: none; -} -.swagger-section .swagger-ui-wrap h1 a:hover, -.swagger-section .swagger-ui-wrap h2 a:hover, -.swagger-section .swagger-ui-wrap h3 a:hover, -.swagger-section .swagger-ui-wrap h4 a:hover, -.swagger-section .swagger-ui-wrap h5 a:hover, -.swagger-section .swagger-ui-wrap h6 a:hover { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap h1 span.divider, -.swagger-section .swagger-ui-wrap h2 span.divider, -.swagger-section .swagger-ui-wrap h3 span.divider, -.swagger-section .swagger-ui-wrap h4 span.divider, -.swagger-section .swagger-ui-wrap h5 span.divider, -.swagger-section .swagger-ui-wrap h6 span.divider { - color: #aaaaaa; -} -.swagger-section .swagger-ui-wrap a { - color: #547f00; -} -.swagger-section .swagger-ui-wrap a img { - border: none; -} -.swagger-section .swagger-ui-wrap article, -.swagger-section .swagger-ui-wrap aside, -.swagger-section .swagger-ui-wrap details, -.swagger-section .swagger-ui-wrap figcaption, -.swagger-section .swagger-ui-wrap figure, -.swagger-section .swagger-ui-wrap footer, -.swagger-section .swagger-ui-wrap header, -.swagger-section .swagger-ui-wrap hgroup, -.swagger-section .swagger-ui-wrap menu, -.swagger-section .swagger-ui-wrap nav, -.swagger-section .swagger-ui-wrap section, -.swagger-section .swagger-ui-wrap summary { - display: block; -} -.swagger-section .swagger-ui-wrap pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; -} -.swagger-section .swagger-ui-wrap pre code { - line-height: 1.6em; - background: none; -} -.swagger-section .swagger-ui-wrap .content > .content-type > div > label { - clear: both; - display: block; - color: #0F6AB4; - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} -.swagger-section .swagger-ui-wrap .content pre { - font-size: 12px; - margin-top: 5px; - padding: 5px; -} -.swagger-section .swagger-ui-wrap .icon-btn { - cursor: pointer; -} -.swagger-section .swagger-ui-wrap .info_title { - padding-bottom: 10px; - font-weight: bold; - font-size: 25px; -} -.swagger-section .swagger-ui-wrap .footer { - margin-top: 20px; -} -.swagger-section .swagger-ui-wrap p.big, -.swagger-section .swagger-ui-wrap div.big p { - font-size: 1em; - margin-bottom: 10px; -} -.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, -.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { - width: 500px !important; -} -.swagger-section .swagger-ui-wrap .info_license { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_tos { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .message-fail { - color: #cc0000; -} -.swagger-section .swagger-ui-wrap .info_url { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_email { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_name { - padding-bottom: 5px; -} -.swagger-section .swagger-ui-wrap .info_description { - padding-bottom: 10px; - font-size: 15px; -} -.swagger-section .swagger-ui-wrap .markdown ol li, -.swagger-section .swagger-ui-wrap .markdown ul li { - padding: 3px 0px; - line-height: 1.4em; - color: #333333; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { - display: block; - padding: 4px; - width: auto; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { - font-size: 1.3em; -} -.swagger-section .swagger-ui-wrap table.fullwidth { - width: 100%; -} -.swagger-section .swagger-ui-wrap .model-signature { - font-family: "Droid Sans", sans-serif; - font-size: 1em; - line-height: 1.5em; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { - text-decoration: none; - color: #AAA; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { - text-decoration: underline; - color: black; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { - color: black; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap .model-signature .propType { - color: #5555aa; -} -.swagger-section .swagger-ui-wrap .model-signature pre:hover { - background-color: #ffffdd; -} -.swagger-section .swagger-ui-wrap .model-signature pre { - font-size: .85em; - line-height: 1.2em; - overflow: auto; - max-height: 200px; - cursor: pointer; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { - display: block; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { - float: left; - margin: 0 5px 5px 0; - padding: 2px 5px 2px 0; - border-right: 1px solid #ddd; -} -.swagger-section .swagger-ui-wrap .model-signature .propOpt { - color: #555; -} -.swagger-section .swagger-ui-wrap .model-signature .snippet small { - font-size: 0.75em; -} -.swagger-section .swagger-ui-wrap .model-signature .propOptKey { - font-style: italic; -} -.swagger-section .swagger-ui-wrap .model-signature .description .strong { - font-weight: bold; - color: #000; - font-size: .9em; -} -.swagger-section .swagger-ui-wrap .model-signature .description div { - font-size: 0.9em; - line-height: 1.5em; - margin-left: 1em; -} -.swagger-section .swagger-ui-wrap .model-signature .description .stronger { - font-weight: bold; - color: #000; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { - border-spacing: 0; - position: absolute; - background-color: #ffffff; - border: 1px solid #bbbbbb; - display: none; - font-size: 11px; - max-width: 400px; - line-height: 30px; - color: black; - padding: 5px; - margin-left: 10px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { - text-align: center; - background-color: #eeeeee; - border: 1px solid #bbbbbb; - font-size: 11px; - color: #666666; - font-weight: bold; - padding: 5px; - line-height: 15px; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { - display: inline; -} -.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { - display: block; - content: ''; -} -.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { - margin-right: -3px; -} -.swagger-section .swagger-ui-wrap .model-signature .propName { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .model-signature .signature-container { - clear: both; -} -.swagger-section .swagger-ui-wrap .body-textarea { - width: 300px; - height: 100px; - border: 1px solid #aaa; -} -.swagger-section .swagger-ui-wrap .markdown p code, -.swagger-section .swagger-ui-wrap .markdown li code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #f0f0f0; - color: black; - padding: 1px 3px; -} -.swagger-section .swagger-ui-wrap .required { - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .editor_holder { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap .editor_holder label { - font-weight: normal!important; - /* JSONEditor uses bold by default for all labels, we revert that back to normal to not give the impression that by default fields are required */ -} -.swagger-section .swagger-ui-wrap .editor_holder label.required { - font-weight: bold!important; -} -.swagger-section .swagger-ui-wrap input.parameter { - width: 300px; - border: 1px solid #aaa; -} -.swagger-section .swagger-ui-wrap h1 { - color: black; - font-size: 1.5em; - line-height: 1.3em; - padding: 10px 0 10px 0; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap .heading_with_menu { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap .heading_with_menu ul { - display: block; - clear: none; - float: right; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - margin-top: 10px; -} -.swagger-section .swagger-ui-wrap h2 { - color: black; - font-size: 1.3em; - padding: 10px 0 10px 0; -} -.swagger-section .swagger-ui-wrap h2 a { - color: black; -} -.swagger-section .swagger-ui-wrap h2 span.sub { - font-size: 0.7em; - color: #999999; - font-style: italic; -} -.swagger-section .swagger-ui-wrap h2 span.sub a { - color: #777777; -} -.swagger-section .swagger-ui-wrap span.weak { - color: #666666; -} -.swagger-section .swagger-ui-wrap .message-success { - color: #89BF04; -} -.swagger-section .swagger-ui-wrap caption, -.swagger-section .swagger-ui-wrap th, -.swagger-section .swagger-ui-wrap td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} -.swagger-section .swagger-ui-wrap .code { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { - font-family: "Droid Sans", sans-serif; - height: 250px; - padding: 4px; - display: block; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { - display: block; - clear: both; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { - display: block; - float: left; - clear: none; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { - display: block; - float: left; - clear: none; - margin: 0 5px 0 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { - color: black; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { - display: block; - clear: both; - width: auto; - padding: 0 0 3px; - color: #666666; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { - padding-left: 3px; - color: #888888; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { - margin-left: 0; - font-style: italic; - font-size: 0.9em; - margin: 0; -} -.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap span.blank, -.swagger-section .swagger-ui-wrap span.empty { - color: #888888; - font-style: italic; -} -.swagger-section .swagger-ui-wrap .markdown h3 { - color: #547f00; -} -.swagger-section .swagger-ui-wrap .markdown h4 { - color: #666666; -} -.swagger-section .swagger-ui-wrap .markdown pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - padding: 10px; - margin: 0 0 10px 0; -} -.swagger-section .swagger-ui-wrap .markdown pre code { - line-height: 1.6em; -} -.swagger-section .swagger-ui-wrap div.gist { - margin: 20px 0 25px 0 !important; -} -.swagger-section .swagger-ui-wrap ul#resources { - font-family: "Droid Sans", sans-serif; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource { - border-bottom: 1px solid #dddddd; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, -.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { - color: #555555; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { - border-bottom: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { - border: 1px solid transparent; - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 14px 10px 0 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - border-right: 1px solid #dddddd; - color: #666666; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { - color: #aaaaaa; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { - text-decoration: underline; - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #999999; - padding-left: 0; - display: block; - clear: none; - float: left; - font-family: "Droid Sans", sans-serif; - font-weight: bold; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #999999; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0 0 10px; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { - float: none; - clear: both; - overflow: hidden; - display: block; - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { - display: block; - clear: none; - float: left; - width: auto; - margin: 0; - padding: 0; - line-height: 1.1em; - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { - padding-left: 10px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { - color: black; - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { - text-transform: uppercase; - text-decoration: none; - color: white; - display: inline-block; - width: 50px; - font-size: 0.7em; - text-align: center; - padding: 7px 0 4px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - -o-border-radius: 2px; - -ms-border-radius: 2px; - -khtml-border-radius: 2px; - border-radius: 2px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { - margin: 0; - padding: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { - overflow: hidden; - padding: 0; - display: block; - clear: none; - float: right; - margin: 6px 10px 0 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { - float: left; - clear: none; - margin: 0; - padding: 2px 10px; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { - text-decoration: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { - border-top: none; - padding: 10px; - -moz-border-radius-bottomleft: 6px; - -webkit-border-bottom-left-radius: 6px; - -o-border-bottom-left-radius: 6px; - -ms-border-bottom-left-radius: 6px; - -khtml-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -moz-border-radius-bottomright: 6px; - -webkit-border-bottom-right-radius: 6px; - -o-border-bottom-right-radius: 6px; - -ms-border-bottom-right-radius: 6px; - -khtml-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - margin: 0 0 20px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { - float: none; - clear: both; - overflow: hidden; - display: block; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { - padding: 4px 0 0 10px; - display: inline-block; - font-size: 0.9em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { - display: block; - clear: none; - float: left; - padding: 6px 8px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { - background-image: url('../images/throbber.gif'); - width: 128px; - height: 16px; - display: block; - clear: none; - float: right; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { - outline: 2px solid black; - outline-color: #cc0000; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form select[name='parameterContentType'] { - max-width: 300px; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - padding: 10px; - font-size: 0.9em; - max-height: 400px; - overflow-y: auto; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { - background-color: #f9f2e9; - border: 1px solid #f0e0ca; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { - background-color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0e0ca; - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { - background-color: #faf5ee; - border: 1px solid #f0e0ca; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { - color: #c5862b; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { - color: #dcb67f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #ffd20f; - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { - background-color: #fcffcd; - border: 1px solid black; - border-color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { - color: #ffd20f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { - color: #6fc992; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { - background-color: #f5e8e8; - border: 1px solid #e8c6c7; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { - text-transform: uppercase; - background-color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #e8c6c7; - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - background-color: #f7eded; - border: 1px solid #e8c6c7; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { - color: #a41e22; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { - color: #c8787a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { - background-color: #e7f6ec; - border: 1px solid #c3e8d1; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { - background-color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3e8d1; - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { - background-color: #ebf7f0; - border: 1px solid #c3e8d1; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { - color: #10a54a; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { - color: #6fc992; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { - background-color: #FCE9E3; - border: 1px solid #F5D5C3; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { - background-color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #f0cecb; - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { - background-color: #faf0ef; - border: 1px solid #f0cecb; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { - color: #D38042; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { - color: #dcb67f; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { - background-color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { - color: #6fa5d2; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { - background-color: #e7f0f7; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { - background-color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { - border-right: 1px solid #dddddd; - border-right-color: #c3d9ec; - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { - color: #0f6ab4; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { - color: #6fa5d2; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { - border-top: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { - padding-right: 0; - border-right: none; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { - text-decoration: underline; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, -.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { - padding-left: 0; -} -.swagger-section .swagger-ui-wrap p#colophon { - margin: 0 15px 40px 15px; - padding: 10px 0; - font-size: 0.8em; - border-top: 1px solid #dddddd; - font-family: "Droid Sans", sans-serif; - color: #999999; - font-style: italic; -} -.swagger-section .swagger-ui-wrap p#colophon a { - text-decoration: none; - color: #547f00; -} -.swagger-section .swagger-ui-wrap h3 { - color: black; - font-size: 1.1em; - padding: 10px 0 10px 0; -} -.swagger-section .swagger-ui-wrap .markdown ol, -.swagger-section .swagger-ui-wrap .markdown ul { - font-family: "Droid Sans", sans-serif; - margin: 5px 0 10px; - padding: 0 0 0 18px; - list-style-type: disc; -} -.swagger-section .swagger-ui-wrap form.form_box { - background-color: #ebf3f9; - border: 1px solid #c3d9ec; - padding: 10px; -} -.swagger-section .swagger-ui-wrap form.form_box label { - color: #0f6ab4 !important; -} -.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { - display: block; - padding: 10px; -} -.swagger-section .swagger-ui-wrap form.form_box p.weak { - font-size: 0.8em; -} -.swagger-section .swagger-ui-wrap form.form_box p { - font-size: 0.9em; - padding: 0 0 15px; - color: #7e7b6d; -} -.swagger-section .swagger-ui-wrap form.form_box p a { - color: #646257; -} -.swagger-section .swagger-ui-wrap form.form_box p strong { - color: black; -} -.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { - padding-bottom: 0; -} -.swagger-section .title { - font-style: bold; -} -.swagger-section .secondary_form { - display: none; -} -.swagger-section .main_image { - display: block; - margin-left: auto; - margin-right: auto; -} -.swagger-section .oauth_body { - margin-left: 100px; - margin-right: 100px; -} -.swagger-section .oauth_submit { - text-align: center; -} -.swagger-section .api-popup-dialog { - z-index: 10000; - position: absolute; - width: 500px; - background: #FFF; - padding: 20px; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - color: #777; -} -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} -.swagger-section .api-popup-dialog .api-popup-title { - font-size: 24px; - padding: 10px 0; -} -.swagger-section .api-popup-dialog .error-msg { - padding-left: 5px; - padding-bottom: 5px; -} -.swagger-section .api-popup-dialog .api-popup-authbtn { - height: 30px; -} -.swagger-section .api-popup-dialog .api-popup-cancel { - height: 30px; -} -.swagger-section .api-popup-scopes { - padding: 10px 20px; -} -.swagger-section .api-popup-scopes li { - padding: 5px 0; - line-height: 20px; -} -.swagger-section .api-popup-scopes li input { - position: relative; - top: 2px; -} -.swagger-section .api-popup-scopes .api-scope-desc { - padding-left: 20px; - font-style: italic; -} -.swagger-section .api-popup-actions { - padding-top: 10px; -} -.swagger-section .access { - float: right; -} -.swagger-section .auth { - float: right; -} -.swagger-section .api-ic { - height: 18px; - vertical-align: middle; - display: inline-block; - background: url(../images/explorer_icons.png) no-repeat; -} -.swagger-section .api-ic .api_information_panel { - position: relative; - margin-top: 20px; - margin-left: -5px; - background: #FFF; - border: 1px solid #ccc; - border-radius: 5px; - display: none; - font-size: 13px; - max-width: 300px; - line-height: 30px; - color: black; - padding: 5px; -} -.swagger-section .api-ic .api_information_panel p .api-msg-enabled { - color: green; -} -.swagger-section .api-ic .api_information_panel p .api-msg-disabled { - color: red; -} -.swagger-section .api-ic:hover .api_information_panel { - position: absolute; - display: block; -} -.swagger-section .ic-info { - background-position: 0 0; - width: 18px; - margin-top: -6px; - margin-left: 4px; -} -.swagger-section .ic-warning { - background-position: -60px 0; - width: 18px; - margin-top: -6px; - margin-left: 4px; -} -.swagger-section .ic-error { - background-position: -30px 0; - width: 18px; - margin-top: -6px; - margin-left: 4px; -} -.swagger-section .ic-off { - background-position: -90px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} -.swagger-section .ic-on { - background-position: -160px 0; - width: 58px; - margin-top: -4px; - cursor: pointer; -} -.swagger-section #header { - background-color: #89bf04; - padding: 14px; -} -.swagger-section #input_baseUrl { - width: 400px; -} -.swagger-section #api_selector { - display: block; - clear: none; - float: right; -} -.swagger-section #api_selector .input { - display: block; - clear: none; - float: left; - margin: 0 10px 0 0; -} -.swagger-section #api_selector input { - font-size: 0.9em; - padding: 3px; - margin: 0; -} -.swagger-section #input_apiKey { - width: 200px; -} -.swagger-section #explore { - display: block; - text-decoration: none; - font-weight: bold; - padding: 6px 8px; - font-size: 0.9em; - color: white; - background-color: #547f00; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -o-border-radius: 4px; - -ms-border-radius: 4px; - -khtml-border-radius: 4px; - border-radius: 4px; -} -.swagger-section #explore:hover { - background-color: #547f00; -} -.swagger-section #header #logo { - font-size: 1.5em; - font-weight: bold; - text-decoration: none; - background: transparent url(../images/logo_small.png) no-repeat left center; - padding: 20px 0 20px 40px; - color: white; -} -.swagger-section #content_message { - margin: 10px 15px; - font-style: italic; - color: #999999; -} -.swagger-section #message-bar { - min-height: 30px; - text-align: center; - padding-top: 10px; -} -.swagger-section .swagger-collapse:before { - content: "-"; -} -.swagger-section .swagger-expand:before { - content: "+"; -} diff --git a/src/main/resources/swagger-ui/css/style.css b/src/main/resources/swagger-ui/css/style.css deleted file mode 100644 index fc21a31db..000000000 --- a/src/main/resources/swagger-ui/css/style.css +++ /dev/null @@ -1,250 +0,0 @@ -.swagger-section #header a#logo { - font-size: 1.5em; - font-weight: bold; - text-decoration: none; - background: transparent url(../images/logo.png) no-repeat left center; - padding: 20px 0 20px 40px; -} -#text-head { - font-size: 80px; - font-family: 'Roboto', sans-serif; - color: #ffffff; - float: right; - margin-right: 20%; -} -.navbar-fixed-top .navbar-nav { - height: auto; -} -.navbar-fixed-top .navbar-brand { - height: auto; -} -.navbar-header { - height: auto; -} -.navbar-inverse { - background-color: #000; - border-color: #000; -} -#navbar-brand { - margin-left: 20%; -} -.navtext { - font-size: 10px; -} -.h1, -h1 { - font-size: 60px; -} -.navbar-default .navbar-header .navbar-brand { - color: #a2dfee; -} -/* tag titles */ -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { - color: #393939; - font-family: 'Arvo', serif; - font-size: 1.5em; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { - color: black; -} -.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { - color: #525252; - padding-left: 0px; - display: block; - clear: none; - float: left; - font-family: 'Arvo', serif; - font-weight: bold; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #0A0A0A; -} -.container1 { - width: 1500px; - margin: auto; - margin-top: 0; - background-image: url('../images/shield.png'); - background-repeat: no-repeat; - background-position: -40px -20px; - margin-bottom: 210px; -} -.container-inner { - width: 1200px; - margin: auto; - background-color: rgba(223, 227, 228, 0.75); - padding-bottom: 40px; - padding-top: 40px; - border-radius: 15px; -} -.header-content { - padding: 0; - width: 1000px; -} -.title1 { - font-size: 80px; - font-family: 'Vollkorn', serif; - color: #404040; - text-align: center; - padding-top: 40px; - padding-bottom: 100px; -} -#icon { - margin-top: -18px; -} -.subtext { - font-size: 25px; - font-style: italic; - color: #08b; - text-align: right; - padding-right: 250px; -} -.bg-primary { - background-color: #00468b; -} -.navbar-default .nav > li > a, -.navbar-default .nav > li > a:focus { - color: #08b; -} -.navbar-default .nav > li > a, -.navbar-default .nav > li > a:hover { - color: #08b; -} -.navbar-default .nav > li > a, -.navbar-default .nav > li > a:focus:hover { - color: #08b; -} -.text-faded { - font-size: 25px; - font-family: 'Vollkorn', serif; -} -.section-heading { - font-family: 'Vollkorn', serif; - font-size: 45px; - padding-bottom: 10px; -} -hr { - border-color: #00468b; - padding-bottom: 10px; -} -.description { - margin-top: 20px; - padding-bottom: 200px; -} -.description li { - font-family: 'Vollkorn', serif; - font-size: 25px; - color: #525252; - margin-left: 28%; - padding-top: 5px; -} -.gap { - margin-top: 200px; -} -.troubleshootingtext { - color: rgba(255, 255, 255, 0.7); - padding-left: 30%; -} -.troubleshootingtext li { - list-style-type: circle; - font-size: 25px; - padding-bottom: 5px; -} -.overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1000; -} -.block.response_body.json:hover { - cursor: pointer; -} -.backdrop { - color: blue; -} -#myModal { - height: 100%; -} -.modal-backdrop { - bottom: 0; - position: fixed; -} -.curl { - padding: 10px; - font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; - font-size: 0.9em; - max-height: 400px; - margin-top: 5px; - overflow-y: auto; - background-color: #fcf6db; - border: 1px solid #e5e0c6; - border-radius: 4px; -} -.curl_title { - font-size: 1.1em; - margin: 0; - padding: 15px 0 5px; - font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif; - font-weight: 500; - line-height: 1.1; -} -.footer { - display: none; -} -.swagger-section .swagger-ui-wrap h2 { - padding: 0; -} -h2 { - margin: 0; - margin-bottom: 5px; -} -.markdown p { - font-size: 15px; - font-family: 'Arvo', serif; -} -.swagger-section .swagger-ui-wrap .code { - font-size: 15px; - font-family: 'Arvo', serif; -} -.swagger-section .swagger-ui-wrap b { - font-family: 'Arvo', serif; -} -#signin:hover { - cursor: pointer; -} -.dropdown-menu { - padding: 15px; -} -.navbar-right .dropdown-menu { - left: 0; - right: auto; -} -#signinbutton { - width: 100%; - height: 32px; - font-size: 13px; - font-weight: bold; - color: #08b; -} -.navbar-default .nav > li .details { - color: #000000; - text-transform: none; - font-size: 15px; - font-weight: normal; - font-family: 'Open Sans', sans-serif; - font-style: italic; - line-height: 20px; - top: -2px; -} -.navbar-default .nav > li .details:hover { - color: black; -} -#signout { - width: 100%; - height: 32px; - font-size: 13px; - font-weight: bold; - color: #08b; -} diff --git a/src/main/resources/swagger-ui/css/typography.css b/src/main/resources/swagger-ui/css/typography.css deleted file mode 100644 index 3235edd95..000000000 --- a/src/main/resources/swagger-ui/css/typography.css +++ /dev/null @@ -1,14 +0,0 @@ -/* Google Font's Droid Sans */ -@font-face { - font-family: 'Droid Sans'; - font-style: normal; - font-weight: 400; - src: local('Droid Sans'), local('DroidSans'), url('../fonts/DroidSans.ttf') format('truetype'); -} -/* Google Font's Droid Sans Bold */ -@font-face { - font-family: 'Droid Sans'; - font-style: normal; - font-weight: 700; - src: local('Droid Sans Bold'), local('DroidSans-Bold'), url('../fonts/DroidSans-Bold.ttf') format('truetype'); -} diff --git a/src/main/resources/swagger-ui/favicon-16x16.png b/src/main/resources/swagger-ui/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7e13b0d9903d27a9129950b1dad362361504e4 GIT binary patch literal 445 zcmV;u0Yd(XP)rNm2=6wQ7&2F}_`h_PI>(9Fx!5<0%l6W{u0OQ#*rglqx3__&vD?|#%fhn*Mn&YY1i+JQHqPvZ34FR@_E%P@x zzTL;Bw#nJXWY}D7^bC>-bx{t|^|R6Oci&MKvov8Op~S=}R=h^p-=vZ0uqG@LE6tP7 n92{cY$^db6>&z__iT?Z#Z8BG|DVcT0DjiaEd>Z!7_`J}8! zKk_$1lGm$vJOY&DjT-(&VGn0;R`iN9=1aOuG`H}BlY>&R3KbGER zB2$7euhH;y1C_LTQex%L6khZpkjFn!ajOUK)f3JLz+I;CE@(N)T)CM4AWjfl-(04= zrsMQ)#NG6nr^Y7!6LA;iHXh?UOFE%hhy>7dl=;I$J>g0BH_r|_4ctEsXx z2sDIQnwa*rcK=*3XUC$D{I@}DTNs@GCb7dB2%%nV%jR){xktt;Ah09op7x@l5D6B2 z0uBdt0YmcN!o?lMpu9Io(1&B1s{TUu*a>2&>Iycx__fbDRM8PYtLt+#G*xSt(cn}K zt!~W2{`9r)xkh^xodLS&FbYw`x$t&Vhl?)#f&k-lZIs<`$gTj{^#^HewuJz(WnUZZ z{Ty_aE;^93bhc-^^k6ZM!^e~$q5!Zz`XPta{a@651gPzaFx$&%IHL6hx$mSeAa#n6 zLkyc-M zs$qhBZhCNE^aIEV)H_~^IeqSRnvo!21Qc`Z;S9!IqXl4K(RUImejotzuG65LVuGS# zcqp@OA8~ln^4c^VihUew)IOX^E9KMtvSvnZ| zC@rl{f(B*PA26aFR`|X!!I(7x_|kq{rlqwhCia+CfNbOg_yYt0bDCc4g#h#`3jpCd zNAhr%4#Ye{i>ni$fzY%r0IS%l3HHZ4tTjOi=JW-t_iG~)oC!2C!52Cc|TAPaH zJ}l%m9yPmA-4#lJea@uf$a`(1;={rL2f*8;7%icbF}e^_`X#ndU=SI0nIn8hXPXHS zSN4rbF}jl0HWx(_`q`-SRa9jP8Ab!}sThNkQ634k=qXBVM4`o{M>qrLJD ze*%D)S;wpxG$d%FcDf-6%zMqWA+gw!C1~T5+|ys$G3Ksm&x59Lyd?0l+LWSk6hc4~ z+yC>|4f;X3#cq3!)>#Mvb-^co7LMrzqWeKB$21I>tJgaGFwu6eB%&j?@d*8GAx~In zI1p-lXVKtcvY7;$TX~wjYw|QhB%q!npQES%F~%Aqz~pJB%rNu!xAj;>xZt75!VHju zfFy%B-`3;Qf<{h94~I62zcHv}D5pS-QCN`M8K1>jN9mpbrFk=5no8j!00000NkvXX Hu0mjfOavUK literal 0 HcmV?d00001 diff --git a/src/main/resources/swagger-ui/fonts/DroidSans-Bold.ttf b/src/main/resources/swagger-ui/fonts/DroidSans-Bold.ttf deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/resources/swagger-ui/fonts/DroidSans.ttf b/src/main/resources/swagger-ui/fonts/DroidSans.ttf deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/resources/swagger-ui/images/collapse.gif b/src/main/resources/swagger-ui/images/collapse.gif deleted file mode 100644 index 8843e8ce5a46781defd33d5304a0cb4191e72546..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69 zcmZ?wbhEHbwd`J-OQ1PRqNMh0sDWgikt diff --git a/src/main/resources/swagger-ui/images/expand.gif b/src/main/resources/swagger-ui/images/expand.gif deleted file mode 100644 index 477bf13718dc56928f313ef6eeb1c2b1a47db69a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73 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 diff --git a/src/main/resources/swagger-ui/images/favicon-32x32.png b/src/main/resources/swagger-ui/images/favicon-32x32.png deleted file mode 100644 index 32f319f89bd07e691de2ccaf21632bb9793a9cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 zcmV-+28sEJP)Z zYjBlU6^5U+_c^%{LI@BBNTw~6nu{hdI!rrEwGFgm#aci_3sGk}<7m?sf9eb^ z&gef46cL=-R%Vz2t>aV&tTwa+k{T7cTawZs4M`*flAN4x@8yqkX_Av0()aswzFB*( z_g(v2XYI9wX~KJNyap8@D?yj3`UN7k2td_e5i#!rt)NGYgj$R-e!9LVh4Vp9;GzxA zMK7v)oerFfUJTsuv(5*(Q~8(4BX%1_Ls=xV0tMmqzMUI4PvXOov* zN@+ngMR`jQiMjRax>fZ#BX;*hCo--8?_I7}_iH1eH6lVJdXsn0?&9dFMn390GigKx zvpz#@c|A3YzfF2L8&$=tJ7mOs!x(#QN&()xLa+W!YeGv@mDYd1!hz-=a(&=GlM;_b zPG%vitA9$x!Y2?Bybn%_m{rEu%M%KSMehG%O=wBrhS}Hj9gdybeM`h+QN3s*YnL|? zvgvUVc7-t}c@jwh@o&E0n$ViS4YT|3W1Q?bbX(*J+;!)d`PKvb6Cw_Y*hdmMVUhyW zZ8T!ns4DxK>OV1ZfPY>3J+HpK1yx1F)_HZC5;g(w-sLEI-iR$|x$s+l^XGNR&0(9# z+U1ShGrx|W{)=pX?Y>FLo_?g2xjCQaWXJ2g+O&meFp#vZ`{G`z$~NHDbpvJAgsz!b z^uFGREr>*Ka-jL?Q4VX$H&eA}1J?(yaQ5=yDWg5td6>SNom7^sV|jV~DBHp21|rcL z7_oCzwI0BD?~T9~fOpTln3C=D^Q!>ZbNFi<93yT#96a8@?!#XNptPWRl&yd8BaWWl z34kD5y!Xa<4JwQYEl^dOPB*4F%u0_Hvw`81zwm@e6sU}FPKxd5=|)r)V{EC{pvuH* zJ6!Jl2VH$<$8i_SQ&l%@0nSHJRgly=clG*tI(ymx5M-qRT?Ww6)jY1Vth8L5k8)$E zd)fkqhWl`Sm>KDF#NbSZjd4f1W4iLB@ygIB2Q(Evj zKI~~rAs@*lV&6Bw-ypSUBrp)UhBaZbGx8@q#<9o<&%&CtWIY&*`2|&ppREQs0#KB< zgo0U%##!zYYNsv0+Hfp4R8wsEISVP7vn=s?#2B$H-n(`Yp>|B|1{jR=0g#zCWqX%I zR@!U;hN9O~Y_;X}i3a5ZBlfs4#&|`42~e~6Npdm^M{Vf1dK`d_D_^Fr>iH?jAFkZS zH}BsU+uL<~lx=2a0X5~D0Z?>@F~%DJ5oz@5yVJwjtghZZYSYovJ2-LvC30t!u()K^ zlmg02Rxx|VJX$Zjl5)4yRc$9DJQJ_JTg3bVMs!5ZMK_7qUje-Q*G)8^+cPEEt)Q}O zJ?p-(7XYvB$&d~2f)O2&h~4AW9TE}NE^p+nc@KSJTfS+;@4SL}@UgYJ}w)Q)V=$7{=rRQ;RAgzi>VS}wfAf#wGK z2d~@`@yyISSY5T9%ChzGtaqnG%mc=liQDoKB63yzUJ+Xt8%%ES&Y7Jwo!-IKzH^fj z=jW7BTfT+b^39}&XT}GU;0+^o{j>&?k41Rn)ol`yZ6ims&fdS%-gS)L{`TapmX$u6 zyqTqx=2ufZ=iU*cneSC~&lw5r`oD)&=Y!n94L=*WXvefB)7Ws@5xC*4w>6xOb0Q(H zL4_bI75%KLUtq)*#v*lBL~MLK=dE~!3#Q}ufBOd*=m{K;N&o-=07*qoM6N<$g6kDD A00000 diff --git a/src/main/resources/swagger-ui/images/favicon.ico b/src/main/resources/swagger-ui/images/favicon.ico deleted file mode 100644 index 8b60bcf06a7685b9ea53983c125e7058906fbcbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmcgwYiv|S6douFYJ&9 zoHH|LSE(UtsLIS#7_-&1VM>ivN@Zu;-zA{00&N^|8r`@w~u}3a1X>=27;pf_a{DPJMTR$JSvjrVZRL?J~Ga>i0GO0Y%B;(7M$}2m+kcrz@>Hae2Pk^@b^f8%H zL>`N;qJuC@Oe+t~7I z<(F|AfU$#EfN{kFKA+53u@A<+4YnEIf**{2=CuCE#{h4Wo9v-X#BN#D=ro%g~u zG`=OQBiQEDZgc6n2RYf*+oRWbKVZW9eJJuGNa8A-F{8(f+y@)q2tylad}QmVTBh{m zkpvl@O*Y<9#KzvA;3if`|g4qjlr75YyFqbGlV2Q--{B?*ERj@$;+A#v6A5% zKJZ-k(ti_bGM?eOj#f{ZHOKc6lK8&sk-j?4Kdjr4z{}bU>r#UnlQAQ!`bOZB;Ct>?+|WpbgrOY2zPu-B!V?-m447=gVK(*?-RQObKSO{281uhZ-RJZ_ax0d9HE}&gAII8uJO7-x&ULT3$-hG# zr#*GDR$v46R``GL&)??M=Z|+Z8{*GeE`I+!{6E}3tWV7S1MCU*9ccYQdsa7AC-|$l z32U8*#-^_c?O%nK{oI ze@n2sr7p*=%uQX9Dk-qo-r2V)7}P0ZWaab6B%)NcuSZfL*ZERjG4kd;J~ udLgV-)@7w`Z&hkIdqAlS_J#Nx!E}|RnRSkVm|Sa24|P&EF^Huxf&C8$As%)B diff --git a/src/main/resources/swagger-ui/images/logo_small.png b/src/main/resources/swagger-ui/images/logo_small.png deleted file mode 100644 index 5496a65579ae903d4008f9d268fac422ef9d3679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)K11rQipnJ)eVnTSzHNF zN8ab&RhE5cC$$4FI-PZXx$pga@8yN)KS}L2Us~^y$(x-xioWbnFcV+~b9ig=!ft8Q z0RD+rpA8910Smyc0GviVUOPGiY6YM@-r6Nn8S&~cxHl27$l)-R$1(!Xx045RDy;_& zeXkG{;_#i9rz0B6149#Ddj=KM6MV^rTD%ylzGdCBX<^=^@I0X3SCR7OMbn}sUKdeF zKO-flaJa%@kJ27@Rod?J9=+Qx5|=PtG8n> zy~9rIu}+48M}FW5Bbqw3t#po?c?kmG!FX32W(dOjzTb+U@64MzHItoeB!M0Jcd}|E z>ekW`<~FjR_ZVVJkF|_htH&v!({Oad?xax?0K0sLwBY%nr46DpCmIIaa?@|Y&?n0q z@kJlMy`pE2HtEgASNd~xNzt$Kn7w#^Fy5oi`e$bUE*+f>Vk5z7=-2pj68afrqli$_ zvqe##5V?a)QU_-s9+s?mJYT5m`MQDRH4cYs^L1lCW;Dua5Ln9lG0BC@9DJQHA(}y&Z}$apb{kU zbezR}b^|O%6i+$BFsT3zqAe8wg9`vfiRp#{)z2bsJw`vBQL7Bt!IexM3$Hsf0tHK3 z+R=x{lR$K`s;7__?ASPW=3?*xgCpGaiadSEpoi0pw-_V#OXM8Ap{4qlG08x0ig9IY z3Ijqh(t1_=g#jocuqyJO=729e9OSiNDSrhR0Gc5G)(QGH?*IS*07*qoM6N<$f<~fU A82|tP diff --git a/src/main/resources/swagger-ui/images/pet_store_api.png b/src/main/resources/swagger-ui/images/pet_store_api.png deleted file mode 100644 index f9f9cd4aeb35a108c4b2f1dddb59977d56c595d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 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 z 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 - + Swagger UI - - - - - - - - - - - - - - - - - - - + + + + + + - - + + - - +
-
 
-
+ + + + diff --git a/src/main/resources/swagger-ui/lang/en.js b/src/main/resources/swagger-ui/lang/en.js deleted file mode 100644 index 9ccd65ad1..000000000 --- a/src/main/resources/swagger-ui/lang/en.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Warning: Deprecated", - "Implementation Notes":"Implementation Notes", - "Response Class":"Response Class", - "Status":"Status", - "Parameters":"Parameters", - "Parameter":"Parameter", - "Value":"Value", - "Description":"Description", - "Parameter Type":"Parameter Type", - "Data Type":"Data Type", - "Response Messages":"Response Messages", - "HTTP Status Code":"HTTP Status Code", - "Reason":"Reason", - "Response Model":"Response Model", - "Request URL":"Request URL", - "Response Body":"Response Body", - "Response Code":"Response Code", - "Response Headers":"Response Headers", - "Hide Response":"Hide Response", - "Headers":"Headers", - "Try it out!":"Try it out!", - "Show/Hide":"Show/Hide", - "List Operations":"List Operations", - "Expand Operations":"Expand Operations", - "Raw":"Raw", - "can't parse JSON. Raw result":"can't parse JSON. Raw result", - "Model Schema":"Model Schema", - "Model":"Model", - "Click to set as parameter value":"Click to set as parameter value", - "apply":"apply", - "Username":"Username", - "Password":"Password", - "Terms of service":"Terms of service", - "Created by":"Created by", - "See more at":"See more at", - "Contact the developer":"Contact the developer", - "api version":"api version", - "Response Content Type":"Response Content Type", - "Parameter content type:":"Parameter content type:", - "fetching resource":"fetching resource", - "fetching resource list":"fetching resource list", - "Explore":"Explore", - "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Can't read from server. It may not have the appropriate access-control-origin settings.", - "Please specify the protocol for":"Please specify the protocol for", - "Can't read swagger JSON from":"Can't read swagger JSON from", - "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI", - "Unable to read api":"Unable to read api", - "from path":"from path", - "server returned":"server returned" -}); diff --git a/src/main/resources/swagger-ui/lang/es.js b/src/main/resources/swagger-ui/lang/es.js deleted file mode 100644 index a8dff60b6..000000000 --- a/src/main/resources/swagger-ui/lang/es.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Advertencia: Obsoleto", - "Implementation Notes":"Notas de implementación", - "Response Class":"Clase de la Respuesta", - "Status":"Status", - "Parameters":"Parámetros", - "Parameter":"Parámetro", - "Value":"Valor", - "Description":"Descripción", - "Parameter Type":"Tipo del Parámetro", - "Data Type":"Tipo del Dato", - "Response Messages":"Mensajes de la Respuesta", - "HTTP Status Code":"Código de Status HTTP", - "Reason":"Razón", - "Response Model":"Modelo de la Respuesta", - "Request URL":"URL de la Solicitud", - "Response Body":"Cuerpo de la Respuesta", - "Response Code":"Código de la Respuesta", - "Response Headers":"Encabezados de la Respuesta", - "Hide Response":"Ocultar Respuesta", - "Try it out!":"Pruébalo!", - "Show/Hide":"Mostrar/Ocultar", - "List Operations":"Listar Operaciones", - "Expand Operations":"Expandir Operaciones", - "Raw":"Crudo", - "can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo", - "Model Schema":"Esquema del Modelo", - "Model":"Modelo", - "apply":"aplicar", - "Username":"Nombre de usuario", - "Password":"Contraseña", - "Terms of service":"Términos de Servicio", - "Created by":"Creado por", - "See more at":"Ver más en", - "Contact the developer":"Contactar al desarrollador", - "api version":"versión de la api", - "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta", - "fetching resource":"buscando recurso", - "fetching resource list":"buscando lista del recurso", - "Explore":"Explorar", - "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", - "Please specify the protocol for":"Por favor, especificar el protocola para", - "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde", - "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI", - "Unable to read api":"No se puede leer la api", - "from path":"desde ruta", - "server returned":"el servidor retornó" -}); diff --git a/src/main/resources/swagger-ui/lang/fr.js b/src/main/resources/swagger-ui/lang/fr.js deleted file mode 100644 index 2e095ad09..000000000 --- a/src/main/resources/swagger-ui/lang/fr.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Avertissement : Obsolète", - "Implementation Notes":"Notes d'implementation", - "Response Class":"Classe de la réponse", - "Status":"Statut", - "Parameters":"Paramètres", - "Parameter":"Paramètre", - "Value":"Valeur", - "Description":"Description", - "Parameter Type":"Type du paramètre", - "Data Type":"Type de données", - "Response Messages":"Messages de la réponse", - "HTTP Status Code":"Code de statut HTTP", - "Reason":"Raison", - "Response Model":"Modèle de réponse", - "Request URL":"URL appelée", - "Response Body":"Corps de la réponse", - "Response Code":"Code de la réponse", - "Response Headers":"En-têtes de la réponse", - "Hide Response":"Cacher la réponse", - "Headers":"En-têtes", - "Try it out!":"Testez !", - "Show/Hide":"Afficher/Masquer", - "List Operations":"Liste des opérations", - "Expand Operations":"Développer les opérations", - "Raw":"Brut", - "can't parse JSON. Raw result":"impossible de décoder le JSON. Résultat brut", - "Model Schema":"Définition du modèle", - "Model":"Modèle", - "apply":"appliquer", - "Username":"Nom d'utilisateur", - "Password":"Mot de passe", - "Terms of service":"Conditions de service", - "Created by":"Créé par", - "See more at":"Voir plus sur", - "Contact the developer":"Contacter le développeur", - "api version":"version de l'api", - "Response Content Type":"Content Type de la réponse", - "fetching resource":"récupération de la ressource", - "fetching resource list":"récupération de la liste de ressources", - "Explore":"Explorer", - "Show Swagger Petstore Example Apis":"Montrer les Apis de l'exemple Petstore de Swagger", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.", - "Please specify the protocol for":"Veuillez spécifier un protocole pour", - "Can't read swagger JSON from":"Impossible de lire le JSON swagger à partir de", - "Finished Loading Resource Information. Rendering Swagger UI":"Chargement des informations terminé. Affichage de Swagger UI", - "Unable to read api":"Impossible de lire l'api", - "from path":"à partir du chemin", - "server returned":"réponse du serveur" -}); diff --git a/src/main/resources/swagger-ui/lang/it.js b/src/main/resources/swagger-ui/lang/it.js deleted file mode 100644 index 8529c2a90..000000000 --- a/src/main/resources/swagger-ui/lang/it.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Attenzione: Deprecato", - "Implementation Notes":"Note di implementazione", - "Response Class":"Classe della risposta", - "Status":"Stato", - "Parameters":"Parametri", - "Parameter":"Parametro", - "Value":"Valore", - "Description":"Descrizione", - "Parameter Type":"Tipo di parametro", - "Data Type":"Tipo di dato", - "Response Messages":"Messaggi della risposta", - "HTTP Status Code":"Codice stato HTTP", - "Reason":"Motivo", - "Response Model":"Modello di risposta", - "Request URL":"URL della richiesta", - "Response Body":"Corpo della risposta", - "Response Code":"Oggetto della risposta", - "Response Headers":"Intestazioni della risposta", - "Hide Response":"Nascondi risposta", - "Try it out!":"Provalo!", - "Show/Hide":"Mostra/Nascondi", - "List Operations":"Mostra operazioni", - "Expand Operations":"Espandi operazioni", - "Raw":"Grezzo (raw)", - "can't parse JSON. Raw result":"non è possibile parsare il JSON. Risultato grezzo (raw).", - "Model Schema":"Schema del modello", - "Model":"Modello", - "apply":"applica", - "Username":"Nome utente", - "Password":"Password", - "Terms of service":"Condizioni del servizio", - "Created by":"Creato da", - "See more at":"Informazioni aggiuntive:", - "Contact the developer":"Contatta lo sviluppatore", - "api version":"versione api", - "Response Content Type":"Tipo di contenuto (content type) della risposta", - "fetching resource":"recuperando la risorsa", - "fetching resource list":"recuperando lista risorse", - "Explore":"Esplora", - "Show Swagger Petstore Example Apis":"Mostra le api di esempio di Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.", - "Please specify the protocol for":"Si prega di specificare il protocollo per", - "Can't read swagger JSON from":"Impossibile leggere JSON swagger da:", - "Finished Loading Resource Information. Rendering Swagger UI":"Lettura informazioni risorse termianta. Swagger UI viene mostrata", - "Unable to read api":"Impossibile leggere la api", - "from path":"da cartella", - "server returned":"il server ha restituito" -}); diff --git a/src/main/resources/swagger-ui/lang/ja.js b/src/main/resources/swagger-ui/lang/ja.js deleted file mode 100644 index 3207bfc0b..000000000 --- a/src/main/resources/swagger-ui/lang/ja.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"警告: 廃止予定", - "Implementation Notes":"実装メモ", - "Response Class":"レスポンスクラス", - "Status":"ステータス", - "Parameters":"パラメータ群", - "Parameter":"パラメータ", - "Value":"値", - "Description":"説明", - "Parameter Type":"パラメータタイプ", - "Data Type":"データタイプ", - "Response Messages":"レスポンスメッセージ", - "HTTP Status Code":"HTTPステータスコード", - "Reason":"理由", - "Response Model":"レスポンスモデル", - "Request URL":"リクエストURL", - "Response Body":"レスポンスボディ", - "Response Code":"レスポンスコード", - "Response Headers":"レスポンスヘッダ", - "Hide Response":"レスポンスを隠す", - "Headers":"ヘッダ", - "Try it out!":"実際に実行!", - "Show/Hide":"表示/非表示", - "List Operations":"操作一覧", - "Expand Operations":"操作の展開", - "Raw":"Raw", - "can't parse JSON. Raw result":"JSONへ解釈できません. 未加工の結果", - "Model Schema":"モデルスキーマ", - "Model":"モデル", - "apply":"実行", - "Username":"ユーザ名", - "Password":"パスワード", - "Terms of service":"サービス利用規約", - "Created by":"Created by", - "See more at":"See more at", - "Contact the developer":"開発者に連絡", - "api version":"APIバージョン", - "Response Content Type":"レスポンス コンテンツタイプ", - "fetching resource":"リソースの取得", - "fetching resource list":"リソース一覧の取得", - "Explore":"Explore", - "Show Swagger Petstore Example Apis":"SwaggerペットストアAPIの表示", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"サーバから読み込めません. 適切なaccess-control-origin設定を持っていない可能性があります.", - "Please specify the protocol for":"プロトコルを指定してください", - "Can't read swagger JSON from":"次からswagger JSONを読み込めません", - "Finished Loading Resource Information. Rendering Swagger UI":"リソース情報の読み込みが完了しました. Swagger UIを描画しています", - "Unable to read api":"APIを読み込めません", - "from path":"次のパスから", - "server returned":"サーバからの返答" -}); diff --git a/src/main/resources/swagger-ui/lang/pl.js b/src/main/resources/swagger-ui/lang/pl.js deleted file mode 100644 index ce41e9179..000000000 --- a/src/main/resources/swagger-ui/lang/pl.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Uwaga: Wycofane", - "Implementation Notes":"Uwagi Implementacji", - "Response Class":"Klasa Odpowiedzi", - "Status":"Status", - "Parameters":"Parametry", - "Parameter":"Parametr", - "Value":"Wartość", - "Description":"Opis", - "Parameter Type":"Typ Parametru", - "Data Type":"Typ Danych", - "Response Messages":"Wiadomości Odpowiedzi", - "HTTP Status Code":"Kod Statusu HTTP", - "Reason":"Przyczyna", - "Response Model":"Model Odpowiedzi", - "Request URL":"URL Wywołania", - "Response Body":"Treść Odpowiedzi", - "Response Code":"Kod Odpowiedzi", - "Response Headers":"Nagłówki Odpowiedzi", - "Hide Response":"Ukryj Odpowiedź", - "Headers":"Nagłówki", - "Try it out!":"Wypróbuj!", - "Show/Hide":"Pokaż/Ukryj", - "List Operations":"Lista Operacji", - "Expand Operations":"Rozwiń Operacje", - "Raw":"Nieprzetworzone", - "can't parse JSON. Raw result":"nie można przetworzyć pliku JSON. Nieprzetworzone dane", - "Model Schema":"Schemat Modelu", - "Model":"Model", - "apply":"użyj", - "Username":"Nazwa użytkownika", - "Password":"Hasło", - "Terms of service":"Warunki używania", - "Created by":"Utworzone przez", - "See more at":"Zobacz więcej na", - "Contact the developer":"Kontakt z deweloperem", - "api version":"wersja api", - "Response Content Type":"Typ Zasobu Odpowiedzi", - "fetching resource":"ładowanie zasobu", - "fetching resource list":"ładowanie listy zasobów", - "Explore":"Eksploruj", - "Show Swagger Petstore Example Apis":"Pokaż Przykładowe Api Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.", - "Please specify the protocol for":"Proszę podać protokół dla", - "Can't read swagger JSON from":"Nie można odczytać swagger JSON z", - "Finished Loading Resource Information. Rendering Swagger UI":"Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI", - "Unable to read api":"Nie można odczytać api", - "from path":"ze ścieżki", - "server returned":"serwer zwrócił" -}); diff --git a/src/main/resources/swagger-ui/lang/pt.js b/src/main/resources/swagger-ui/lang/pt.js deleted file mode 100644 index f2e7c13d4..000000000 --- a/src/main/resources/swagger-ui/lang/pt.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Aviso: Depreciado", - "Implementation Notes":"Notas de Implementação", - "Response Class":"Classe de resposta", - "Status":"Status", - "Parameters":"Parâmetros", - "Parameter":"Parâmetro", - "Value":"Valor", - "Description":"Descrição", - "Parameter Type":"Tipo de parâmetro", - "Data Type":"Tipo de dados", - "Response Messages":"Mensagens de resposta", - "HTTP Status Code":"Código de status HTTP", - "Reason":"Razão", - "Response Model":"Modelo resposta", - "Request URL":"URL requisição", - "Response Body":"Corpo da resposta", - "Response Code":"Código da resposta", - "Response Headers":"Cabeçalho da resposta", - "Headers":"Cabeçalhos", - "Hide Response":"Esconder resposta", - "Try it out!":"Tente agora!", - "Show/Hide":"Mostrar/Esconder", - "List Operations":"Listar operações", - "Expand Operations":"Expandir operações", - "Raw":"Cru", - "can't parse JSON. Raw result":"Falha ao analisar JSON. Resulto cru", - "Model Schema":"Modelo esquema", - "Model":"Modelo", - "apply":"Aplicar", - "Username":"Usuário", - "Password":"Senha", - "Terms of service":"Termos do serviço", - "Created by":"Criado por", - "See more at":"Veja mais em", - "Contact the developer":"Contate o desenvolvedor", - "api version":"Versão api", - "Response Content Type":"Tipo de conteúdo da resposta", - "fetching resource":"busca recurso", - "fetching resource list":"buscando lista de recursos", - "Explore":"Explorar", - "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin", - "Please specify the protocol for":"Por favor especifique o protocolo", - "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de", - "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI", - "Unable to read api":"Não foi possível ler api", - "from path":"do caminho", - "server returned":"servidor retornou" -}); diff --git a/src/main/resources/swagger-ui/lang/ru.js b/src/main/resources/swagger-ui/lang/ru.js deleted file mode 100644 index 381f1b3fd..000000000 --- a/src/main/resources/swagger-ui/lang/ru.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Предупреждение: Устарело", - "Implementation Notes":"Заметки", - "Response Class":"Пример ответа", - "Status":"Статус", - "Parameters":"Параметры", - "Parameter":"Параметр", - "Value":"Значение", - "Description":"Описание", - "Parameter Type":"Тип параметра", - "Data Type":"Тип данных", - "HTTP Status Code":"HTTP код", - "Reason":"Причина", - "Response Model":"Структура ответа", - "Request URL":"URL запроса", - "Response Body":"Тело ответа", - "Response Code":"HTTP код ответа", - "Response Headers":"Заголовки ответа", - "Hide Response":"Спрятать ответ", - "Headers":"Заголовки", - "Response Messages":"Что может прийти в ответ", - "Try it out!":"Попробовать!", - "Show/Hide":"Показать/Скрыть", - "List Operations":"Операции кратко", - "Expand Operations":"Операции подробно", - "Raw":"В сыром виде", - "can't parse JSON. Raw result":"Не удается распарсить ответ:", - "Model Schema":"Структура", - "Model":"Описание", - "Click to set as parameter value":"Нажмите, чтобы испльзовать в качестве значения параметра", - "apply":"применить", - "Username":"Имя пользователя", - "Password":"Пароль", - "Terms of service":"Условия использования", - "Created by":"Разработано", - "See more at":"Еще тут", - "Contact the developer":"Связаться с разработчиком", - "api version":"Версия API", - "Response Content Type":"Content Type ответа", - "Parameter content type:":"Content Type параметра:", - "fetching resource":"Получение ресурса", - "fetching resource list":"Получение ресурсов", - "Explore":"Показать", - "Show Swagger Petstore Example Apis":"Показать примеры АПИ", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, проблема с настройками доступа", - "Please specify the protocol for":"Пожалуйста, укажите протокол для", - "Can't read swagger JSON from":"Не получается прочитать swagger json из", - "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим", - "Unable to read api":"Не удалось прочитать api", - "from path":"по адресу", - "server returned":"сервер сказал" -}); diff --git a/src/main/resources/swagger-ui/lang/tr.js b/src/main/resources/swagger-ui/lang/tr.js deleted file mode 100644 index 16426a9c3..000000000 --- a/src/main/resources/swagger-ui/lang/tr.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Uyarı: Deprecated", - "Implementation Notes":"Gerçekleştirim Notları", - "Response Class":"Dönen Sınıf", - "Status":"Statü", - "Parameters":"Parametreler", - "Parameter":"Parametre", - "Value":"Değer", - "Description":"Açıklama", - "Parameter Type":"Parametre Tipi", - "Data Type":"Veri Tipi", - "Response Messages":"Dönüş Mesajı", - "HTTP Status Code":"HTTP Statü Kodu", - "Reason":"Gerekçe", - "Response Model":"Dönüş Modeli", - "Request URL":"İstek URL", - "Response Body":"Dönüş İçeriği", - "Response Code":"Dönüş Kodu", - "Response Headers":"Dönüş Üst Bilgileri", - "Hide Response":"Dönüşü Gizle", - "Headers":"Üst Bilgiler", - "Try it out!":"Dene!", - "Show/Hide":"Göster/Gizle", - "List Operations":"Operasyonları Listele", - "Expand Operations":"Operasyonları Aç", - "Raw":"Ham", - "can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç", - "Model Schema":"Model Şema", - "Model":"Model", - "apply":"uygula", - "Username":"Kullanıcı Adı", - "Password":"Parola", - "Terms of service":"Servis şartları", - "Created by":"Oluşturan", - "See more at":"Daha fazlası için", - "Contact the developer":"Geliştirici ile İletişime Geçin", - "api version":"api versiyon", - "Response Content Type":"Dönüş İçerik Tipi", - "fetching resource":"kaynak getiriliyor", - "fetching resource list":"kaynak listesi getiriliyor", - "Explore":"Keşfet", - "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", - "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz", - "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor", - "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", - "Unable to read api":"api okunamadı", - "from path":"yoldan", - "server returned":"sunucuya dönüldü" -}); diff --git a/src/main/resources/swagger-ui/lang/translator.js b/src/main/resources/swagger-ui/lang/translator.js deleted file mode 100644 index 591f6d409..000000000 --- a/src/main/resources/swagger-ui/lang/translator.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -/** - * Translator for documentation pages. - * - * To enable translation you should include one of language-files in your index.html - * after . - * For example - - * - * If you wish to translate some new texsts you should do two things: - * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. - * 2. Mark that text it templates this way New Phrase or . - * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. - * - */ -window.SwaggerTranslator = { - - _words:[], - - translate: function(sel) { - var $this = this; - sel = sel || '[data-sw-translate]'; - - $(sel).each(function() { - $(this).html($this._tryTranslate($(this).html())); - - $(this).val($this._tryTranslate($(this).val())); - $(this).attr('title', $this._tryTranslate($(this).attr('title'))); - }); - }, - - _tryTranslate: function(word) { - return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; - }, - - learn: function(wordsMap) { - this._words = wordsMap; - } -}; diff --git a/src/main/resources/swagger-ui/lang/zh-cn.js b/src/main/resources/swagger-ui/lang/zh-cn.js deleted file mode 100644 index 570319ba1..000000000 --- a/src/main/resources/swagger-ui/lang/zh-cn.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"警告:已过时", - "Implementation Notes":"实现备注", - "Response Class":"响应类", - "Status":"状态", - "Parameters":"参数", - "Parameter":"参数", - "Value":"值", - "Description":"描述", - "Parameter Type":"参数类型", - "Data Type":"数据类型", - "Response Messages":"响应消息", - "HTTP Status Code":"HTTP状态码", - "Reason":"原因", - "Response Model":"响应模型", - "Request URL":"请求URL", - "Response Body":"响应体", - "Response Code":"响应码", - "Response Headers":"响应头", - "Hide Response":"隐藏响应", - "Headers":"头", - "Try it out!":"试一下!", - "Show/Hide":"显示/隐藏", - "List Operations":"显示操作", - "Expand Operations":"展开操作", - "Raw":"原始", - "can't parse JSON. Raw result":"无法解析JSON. 原始结果", - "Model Schema":"模型架构", - "Model":"模型", - "apply":"应用", - "Username":"用户名", - "Password":"密码", - "Terms of service":"服务条款", - "Created by":"创建者", - "See more at":"查看更多:", - "Contact the developer":"联系开发者", - "api version":"api版本", - "Response Content Type":"响应Content Type", - "fetching resource":"正在获取资源", - "fetching resource list":"正在获取资源列表", - "Explore":"浏览", - "Show Swagger Petstore Example Apis":"显示 Swagger Petstore 示例 Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"无法从服务器读取。可能没有正确设置access-control-origin。", - "Please specify the protocol for":"请指定协议:", - "Can't read swagger JSON from":"无法读取swagger JSON于", - "Finished Loading Resource Information. Rendering Swagger UI":"已加载资源信息。正在渲染Swagger UI", - "Unable to read api":"无法读取api", - "from path":"从路径", - "server returned":"服务器返回" -}); diff --git a/src/main/resources/swagger-ui/lib/backbone-min.js b/src/main/resources/swagger-ui/lib/backbone-min.js deleted file mode 100644 index a3f544be6..000000000 --- a/src/main/resources/swagger-ui/lib/backbone-min.js +++ /dev/null @@ -1,15 +0,0 @@ -// Backbone.js 1.1.2 - -(function(t,e){if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,s){t.Backbone=e(t,s,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore");e(t,exports,i)}else{t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}})(this,function(t,e,i,r){var s=t.Backbone;var n=[];var a=n.push;var o=n.slice;var h=n.splice;e.VERSION="1.1.2";e.$=r;e.noConflict=function(){t.Backbone=s;return this};e.emulateHTTP=false;e.emulateJSON=false;var u=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,r){if(!c(this,"once",t,[e,r])||!e)return this;var s=this;var n=i.once(function(){s.off(t,n);e.apply(this,arguments)});n._callback=e;return this.on(t,n,r)},off:function(t,e,r){var s,n,a,o,h,u,l,f;if(!this._events||!c(this,"off",t,[e,r]))return this;if(!t&&!e&&!r){this._events=void 0;return this}o=t?[t]:i.keys(this._events);for(h=0,u=o.length;h").attr(t);this.setElement(r,false)}else{this.setElement(i.result(this,"el"),false)}}});e.sync=function(t,r,s){var n=T[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:n,dataType:"json"};if(!s.url){a.url=i.result(r,"url")||M()}if(s.data==null&&r&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(s.attrs||r.toJSON(s))}if(s.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(s.emulateHTTP&&(n==="PUT"||n==="DELETE"||n==="PATCH")){a.type="POST";if(s.emulateJSON)a.data._method=n;var o=s.beforeSend;s.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",n);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!s.emulateJSON){a.processData=false}if(a.type==="PATCH"&&k){a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var h=s.xhr=e.ajax(i.extend(a,s));r.trigger("request",r,h,s);return h};var k=typeof window!=="undefined"&&!!window.ActiveXObject&&!(window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent);var T={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var $=e.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var S=/\((.*?)\)/g;var H=/(\(\?)?:\w+/g;var A=/\*\w+/g;var I=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend($.prototype,u,{initialize:function(){},route:function(t,r,s){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(r)){s=r;r=""}if(!s)s=this[r];var n=this;e.history.route(t,function(i){var a=n._extractParameters(t,i);n.execute(s,a);n.trigger.apply(n,["route:"+r].concat(a));n.trigger("route",r,a);e.history.trigger("route",n,r,a)});return this},execute:function(t,e){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(I,"\\$&").replace(S,"(?:$1)?").replace(H,function(t,e){return e?t:"([^/?]+)"}).replace(A,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return i.map(r,function(t,e){if(e===r.length-1)return t||null;return t?decodeURIComponent(t):null})}});var N=e.History=function(){this.handlers=[];i.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var R=/^[#\/]|\s+$/g;var O=/^\/+|\/+$/g;var P=/msie [\w.]+/;var C=/\/$/;var j=/#.*$/;N.started=false;i.extend(N.prototype,u,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.slice(i.length)}else{t=this.getHash()}}return t.replace(R,"")},start:function(t){if(N.started)throw new Error("Backbone.history has already been started");N.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var r=this.getFragment();var s=document.documentMode;var n=P.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);this.root=("/"+this.root+"/").replace(O,"/");if(n&&this._wantsHashChange){var a=e.$('