From e52e4c67c0b97a89b5abb83d32e5c52d0f3bc6fb Mon Sep 17 00:00:00 2001 From: frantuma Date: Mon, 8 Apr 2019 11:41:39 +0200 Subject: [PATCH] ref #108, ref #182 - security definitions support and versions updates --- .travis.yml | 4 +-- .../app/play/modules/swagger/PlayReader.java | 27 +++++++++++++++++++ play-2.6/swagger-play2/build.sbt | 21 ++++++++------- .../swagger-play2/project/build.properties | 2 +- play-2.6/swagger-play2/project/plugins.sbt | 4 +-- .../test/PlayApiListingCacheSpec.scala | 4 +++ .../test/testdata/CatController.scala | 21 +++++++++++++-- 7 files changed, 66 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9dae0d6..1cffb2a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ cache: language: scala scala: - - 2.11.8 + - 2.11.12 script: - cd play-2.4/swagger-play2 && sbt ++$TRAVIS_SCALA_VERSION compile test @@ -24,4 +24,4 @@ script: - find $HOME/.sbt -name "*.lock" | xargs rm jdk: - - oraclejdk8 + - openjdk8 diff --git a/play-2.6/swagger-play2/app/play/modules/swagger/PlayReader.java b/play-2.6/swagger-play2/app/play/modules/swagger/PlayReader.java index dc02edd..3989468 100644 --- a/play-2.6/swagger-play2/app/play/modules/swagger/PlayReader.java +++ b/play-2.6/swagger-play2/app/play/modules/swagger/PlayReader.java @@ -8,6 +8,7 @@ import io.swagger.models.Contact; import io.swagger.models.ExternalDocs; import io.swagger.models.Tag; +import io.swagger.models.auth.In; import io.swagger.models.parameters.*; import io.swagger.models.parameters.Parameter; import io.swagger.models.properties.*; @@ -298,6 +299,32 @@ protected void readSwaggerConfig(Class cls, SwaggerDefinition config) { } } + for (OAuth2Definition oAuth2DefinitionConfig:config.securityDefinition().oAuth2Definitions()) { + + io.swagger.models.auth.OAuth2Definition oAuth2Definition = new io.swagger.models.auth.OAuth2Definition(); + oAuth2Definition.setTokenUrl(oAuth2DefinitionConfig.tokenUrl()); + oAuth2Definition.setAuthorizationUrl(oAuth2DefinitionConfig.authorizationUrl()); + oAuth2Definition.setFlow(oAuth2DefinitionConfig.flow().name().toLowerCase()); + + for (Scope scope: oAuth2DefinitionConfig.scopes()) { + oAuth2Definition.addScope(scope.name(), scope.description()); + } + + swagger.addSecurityDefinition(oAuth2DefinitionConfig.key(), oAuth2Definition); + } + + for (ApiKeyAuthDefinition apiKeyAuthConfig:config.securityDefinition().apiKeyAuthDefinitions()) { + + io.swagger.models.auth.ApiKeyAuthDefinition apiKeyAuthDefinition = new io.swagger.models.auth.ApiKeyAuthDefinition(); + apiKeyAuthDefinition.setName(apiKeyAuthConfig.name()); + apiKeyAuthDefinition.setIn(In.forValue(apiKeyAuthConfig.in().toValue())); + apiKeyAuthDefinition.setDescription(apiKeyAuthConfig.description()); + + swagger.addSecurityDefinition(apiKeyAuthConfig.key(), apiKeyAuthDefinition); + } + + + for (SwaggerDefinition.Scheme scheme : config.schemes()) { if (scheme != SwaggerDefinition.Scheme.DEFAULT) { swagger.addScheme(Scheme.forValue(scheme.name())); diff --git a/play-2.6/swagger-play2/build.sbt b/play-2.6/swagger-play2/build.sbt index a7ff1d0..7e8ebc5 100644 --- a/play-2.6/swagger-play2/build.sbt +++ b/play-2.6/swagger-play2/build.sbt @@ -3,15 +3,15 @@ version := "1.6.1-SNAPSHOT" checksums in update := Nil -scalaVersion := "2.11.8" +scalaVersion := "2.11.12" -crossScalaVersions := Seq(scalaVersion.value, "2.12.2") +crossScalaVersions := Seq(scalaVersion.value, "2.12.6") libraryDependencies ++= Seq( - "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.8.9", + "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.9.8", "org.slf4j" % "slf4j-api" % "1.7.21", - "io.swagger" % "swagger-core" % "1.5.16", - "io.swagger" %% "swagger-scala-module" % "1.0.5-SNAPSHOT", + "io.swagger" % "swagger-core" % "1.5.22", + "io.swagger" %% "swagger-scala-module" % "1.0.5", "com.typesafe.play" %% "routes-compiler" % "2.6.0", "com.typesafe.play" %% "play-ebean" % "4.0.2" % "test", "org.specs2" %% "specs2-core" % "3.8.7" % "test", @@ -21,13 +21,14 @@ libraryDependencies ++= Seq( mappings in (Compile, packageBin) ~= { _.filter(!_._1.getName.equals("logback.xml")) } -publishTo <<= version { (v: String) => - val nexus = "https://oss.sonatype.org/" - if (v.trim.endsWith("SNAPSHOT")) - Some("snapshots" at nexus + "content/repositories/snapshots") +publishTo := { + if (version.value.trim.endsWith("SNAPSHOT")) + Some("Sonatype Nexus Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots") else - Some("releases" at nexus + "service/local/staging/deploy/maven2") + Some("Sonatype Nexus Releases" at "https://oss.sonatype.org/service/local/staging/deploy/maven2") } + + publishArtifact in Test := false publishMavenStyle := true pomIncludeRepository := { x => false } diff --git a/play-2.6/swagger-play2/project/build.properties b/play-2.6/swagger-play2/project/build.properties index 27e88aa..0531343 100644 --- a/play-2.6/swagger-play2/project/build.properties +++ b/play-2.6/swagger-play2/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.13 +sbt.version=1.1.2 diff --git a/play-2.6/swagger-play2/project/plugins.sbt b/play-2.6/swagger-play2/project/plugins.sbt index 609623f..b088c0a 100644 --- a/play-2.6/swagger-play2/project/plugins.sbt +++ b/play-2.6/swagger-play2/project/plugins.sbt @@ -1,3 +1,3 @@ -addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.0") +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.6") -addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0") +addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.1") diff --git a/play-2.6/swagger-play2/test/PlayApiListingCacheSpec.scala b/play-2.6/swagger-play2/test/PlayApiListingCacheSpec.scala index 3a1eaf2..34bbd2f 100644 --- a/play-2.6/swagger-play2/test/PlayApiListingCacheSpec.scala +++ b/play-2.6/swagger-play2/test/PlayApiListingCacheSpec.scala @@ -87,6 +87,7 @@ PUT /api/dog/api/:id testdata.DogController.add0(id:String) swagger.get.getInfo.getTitle must beEqualTo(swaggerConfig.getTitle) swagger.get.getInfo.getTermsOfService must beEqualTo(swaggerConfig.getTermsOfServiceUrl) swagger.get.getInfo.getLicense.getName must beEqualTo(swaggerConfig.getLicense) + swagger.get.getSecurityDefinitions.size() must beEqualTo(2) val pathDoc = swagger.get.getPaths.get("/document/{settlementId}/files/{fileId}/accept") pathDoc.getOperations.size must beEqualTo(1) @@ -126,6 +127,8 @@ PUT /api/dog/api/:id testdata.DogController.add0(id:String) opCatGet.getConsumes must beNull opCatGet.getResponses.get("200").getSchema.asInstanceOf[ArrayProperty].getItems.asInstanceOf[RefProperty].getSimpleRef must beEqualTo("Cat") opCatGet.getProduces must beNull + opCatGet.getSecurity.get(0).get("oauth2").get(0) must beEqualTo("write_pets") + val opCatPut = pathCat.getOperationMap.get(HttpMethod.PUT) opCatPut.getOperationId must beEqualTo("add1") @@ -135,6 +138,7 @@ PUT /api/dog/api/:id testdata.DogController.add0(id:String) opCatPut.getConsumes must beNull opCatPut.getResponses.get("200").getSchema.asInstanceOf[RefProperty].getSimpleRef must beEqualTo("ActionAnyContent") opCatPut.getProduces must beNull + opCatPut.getSecurity.get(0).get("api_key") must not beNull val pathCat43 = swagger.get.getPaths.get("/api/cat43") pathCat43.getOperations.size must beEqualTo(1) diff --git a/play-2.6/swagger-play2/test/testdata/CatController.scala b/play-2.6/swagger-play2/test/testdata/CatController.scala index 0f7b218..93190e8 100644 --- a/play-2.6/swagger-play2/test/testdata/CatController.scala +++ b/play-2.6/swagger-play2/test/testdata/CatController.scala @@ -4,12 +4,28 @@ import io.swagger.annotations._ import play.api.mvc.{Action, Controller} +@SwaggerDefinition( + securityDefinition = new SecurityDefinition( + apiKeyAuthDefinitions = Array( + new ApiKeyAuthDefinition(name= "api_key", key="api_key", in=ApiKeyAuthDefinition.ApiKeyLocation.HEADER) + ), + oAuth2Definitions = Array( + new OAuth2Definition( + key = "oauth2", + flow = OAuth2Definition.Flow.APPLICATION, + tokenUrl= "/oauth/token", + authorizationUrl = "/authorize", + scopes = Array(new Scope(name = "write_pets", description = "modify pets")) + ) + ) + ) +) @Api(value = "/apitest/cats", description = "play with cats") class CatController extends Controller { @ApiOperation(value = "addCat1", httpMethod = "PUT", - authorizations = Array(), + authorizations = Array(new Authorization(value="api_key")), consumes = "", protocols = "") @ApiImplicitParams(Array( @@ -46,7 +62,8 @@ class CatController extends Controller { notes = "Returns all cats", response = classOf[Cat], responseContainer = "List", - httpMethod = "GET") + httpMethod = "GET", + authorizations = Array(new Authorization(value="oauth2", scopes = Array(new AuthorizationScope(scope = "write_pets", description = "Modify pets"))))) @Deprecated def list = Action { request => Ok("test case")