diff --git a/build.sbt b/build.sbt index 49971a19594..bcc9df96b82 100644 --- a/build.sbt +++ b/build.sbt @@ -21,6 +21,7 @@ libraryDependencies ++= Seq( "org.json4s" %% "json4s-jackson" % "3.2.10", "io.backchat.inflector" %% "scala-inflector" % "1.3.5", "commons-io" % "commons-io" % "2.3", + "net.iharder" % "base64" % "2.3.8", "ch.qos.logback" % "logback-classic" % "1.0.13" % "provided", "org.rogach" %% "scallop" % "0.9.5", "junit" % "junit" % "4.11" % "test", diff --git a/project/build.properties b/project/build.properties index 8cbb5226c45..507528966aa 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.0 \ No newline at end of file +sbt.version=0.13.5 \ No newline at end of file diff --git a/src/main/scala/com/wordnik/swagger/codegen/BasicGenerator.scala b/src/main/scala/com/wordnik/swagger/codegen/BasicGenerator.scala index 38a84d862b3..254fda3fb48 100644 --- a/src/main/scala/com/wordnik/swagger/codegen/BasicGenerator.scala +++ b/src/main/scala/com/wordnik/swagger/codegen/BasicGenerator.scala @@ -28,6 +28,7 @@ import com.wordnik.swagger.util.ValidationException import java.io.{ File, FileWriter } +import net.iharder.Base64 import org.json4s.jackson.JsonMethods._ import org.json4s.jackson.Serialization.write @@ -187,18 +188,20 @@ abstract class BasicGenerator extends CodegenConfig with PathUtil { } def authenticate(apiKey: Option[String]): Option[ApiKeyValue] = { - Option(System.getProperty("header")) match { - case Some(e) => { - // this is ugly and will be replaced with proper arg parsing like in ScalaAsyncClientGenerator soon - val authInfo = e.split(":") - Some(ApiKeyValue(authInfo(0), "header", authInfo(1))) - } - case _ => { - apiKey.map{ key => - Some(ApiKeyValue("api_key", "query", key)) - }.getOrElse(None) - } + val headerAuth = sys.props.get("header") map { e => + // this is ugly and will be replaced with proper arg parsing like in ScalaAsyncClientGenerator soon + val authInfo = e.split(":") + ApiKeyValue(authInfo(0), "header", authInfo(1)) } + val basicAuth = sys.props.get("auth.basic") map { e => + val creds = if (e.contains(":")) Base64.encodeBytes(e.getBytes) else e + ApiKeyValue("Authorization", "header", s"Basic $creds") + } + val apiKeyAuth = apiKey map { key => + ApiKeyValue("api_key", "query", key) + } + + headerAuth orElse basicAuth orElse apiKeyAuth } def extractApiOperations(apiListings: List[ApiListing], allModels: HashMap[String, Model] )(implicit basePath:String) = { diff --git a/src/main/scala/com/wordnik/swagger/codegen/model/AuthorizationModels.scala b/src/main/scala/com/wordnik/swagger/codegen/model/AuthorizationModels.scala index 2249557bcd7..9cc369d8239 100644 --- a/src/main/scala/com/wordnik/swagger/codegen/model/AuthorizationModels.scala +++ b/src/main/scala/com/wordnik/swagger/codegen/model/AuthorizationModels.scala @@ -44,3 +44,4 @@ case class AuthorizationCodeGrant( trait AuthorizationValue case class ApiKeyValue(keyName: String, passAs: String, value: String) extends AuthorizationValue +