You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by md...@apache.org on 2018/08/16 20:01:15 UTC
[incubator-openwhisk] branch master updated: restore base64 json
responses for webactions (#3973)
This is an automated email from the ASF dual-hosted git repository.
mdeuser pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk.git
The following commit(s) were added to refs/heads/master by this push:
new 5ecf5c5 restore base64 json responses for webactions (#3973)
5ecf5c5 is described below
commit 5ecf5c5d997dae5b82bafb34c8c16369e9905806
Author: Carlos Santana <cs...@apache.org>
AuthorDate: Thu Aug 16 16:01:11 2018 -0400
restore base64 json responses for webactions (#3973)
---
.../scala/whisk/core/controller/WebActions.scala | 5 +++++
.../core/controller/test/WebActionsApiTests.scala | 22 ++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/core/controller/src/main/scala/whisk/core/controller/WebActions.scala b/core/controller/src/main/scala/whisk/core/controller/WebActions.scala
index 6015525..26e2923 100644
--- a/core/controller/src/main/scala/whisk/core/controller/WebActions.scala
+++ b/core/controller/src/main/scala/whisk/core/controller/WebActions.scala
@@ -58,6 +58,7 @@ import whisk.http.Messages
import whisk.http.LenientSprayJsonSupport._
import whisk.spi.SpiLoader
import whisk.utils.JsHelpers._
+import whisk.core.entity.Exec
protected[controller] sealed class WebApiDirectives(prefix: String = "__ow_") {
// enforce the presence of an extension (e.g., .http) in the URI path
@@ -324,6 +325,10 @@ protected[core] object WhiskWebActionsApi extends Directives {
findContentTypeInHeader(headers, transid, `text/html`).flatMap { mediaType =>
val ct = ContentType(mediaType, () => HttpCharsets.`UTF-8`)
ct match {
+ // TODO: remove this extract check for base64 on json response
+ // this is here for legacy reasons to not brake old webactions returning base64 json that have not migrated yet
+ case nonbinary: ContentType.NonBinary if (isJsonFamily(mediaType) && Exec.isBinaryCode(str)) =>
+ Try(Base64.getDecoder().decode(str)).map(HttpEntity(ct, _))
case nonbinary: ContentType.NonBinary => Success(HttpEntity(nonbinary, str))
// because of the default charset provided to the content type constructor
diff --git a/tests/src/test/scala/whisk/core/controller/test/WebActionsApiTests.scala b/tests/src/test/scala/whisk/core/controller/test/WebActionsApiTests.scala
index d1ddb8b..c3b3e1c 100644
--- a/tests/src/test/scala/whisk/core/controller/test/WebActionsApiTests.scala
+++ b/tests/src/test/scala/whisk/core/controller/test/WebActionsApiTests.scala
@@ -1015,6 +1015,28 @@ trait WebActionsApiBaseTests extends ControllerTestCommon with BeforeAndAfterEac
}
}
}
+ it should s"handle http web action with base64 encoded known '+json' response (auth? ${creds.isDefined})" in {
+ implicit val tid = transid()
+
+ Seq(s"$systemId/proxy/export_c.http").foreach { path =>
+ allowedMethods.foreach { m =>
+ invocationsAllowed += 1
+ actionResult = Some(
+ JsObject(
+ "headers" -> JsObject("content-type" -> "application/json-patch+json".toJson),
+ webApiDirectives.statusCode -> OK.intValue.toJson,
+ "body" -> Base64.getEncoder.encodeToString {
+ JsObject("field" -> "value".toJson).compactPrint.getBytes
+ }.toJson))
+
+ m(s"$testRoutePath/$path") ~> Route.seal(routes(creds)) ~> check {
+ status should be(OK)
+ mediaType.value shouldBe "application/json-patch+json"
+ responseAs[String].parseJson shouldBe JsObject("field" -> "value".toJson)
+ }
+ }
+ }
+ }
it should s"handle http web action for known '+json' response (auth? ${creds.isDefined})" in {
implicit val tid = transid()