You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by kl...@apache.org on 2022/10/09 07:38:57 UTC

[incubator-devlake] branch main updated: fix: forward original status code and body (#3342)

This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 7a3a15b0 fix: forward original status code and body (#3342)
7a3a15b0 is described below

commit 7a3a15b095df7e8110de9934de29598aaebc9b0f
Author: mindlesscloud <li...@merico.dev>
AuthorDate: Sun Oct 9 15:38:53 2022 +0800

    fix: forward original status code and body (#3342)
---
 api/router.go              |  6 +++++-
 plugins/core/plugin_api.go |  7 ++++---
 plugins/jira/api/proxy.go  | 15 ++-------------
 3 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/api/router.go b/api/router.go
index 4ad4e98d..66277842 100644
--- a/api/router.go
+++ b/api/router.go
@@ -112,7 +112,11 @@ func handlePluginCall(pluginName string, handler core.ApiResourceHandler) func(c
 				c.Data(status, output.File.ContentType, output.File.Data)
 				return
 			}
-			shared.ApiOutputSuccess(c, output.Body, status)
+			if blob, ok := output.Body.([]byte); ok && output.ContentType != "" {
+				c.Data(status, output.ContentType, blob)
+			} else {
+				shared.ApiOutputSuccess(c, output.Body, status)
+			}
 		} else {
 			shared.ApiOutputSuccess(c, nil, http.StatusOK)
 		}
diff --git a/plugins/core/plugin_api.go b/plugins/core/plugin_api.go
index 76dfa416..b882a7c8 100644
--- a/plugins/core/plugin_api.go
+++ b/plugins/core/plugin_api.go
@@ -39,9 +39,10 @@ type OutputFile struct {
 
 // Describe response data of a api
 type ApiResourceOutput struct {
-	Body   interface{} // response body
-	Status int
-	File   *OutputFile
+	Body        interface{} // response body
+	Status      int
+	File        *OutputFile
+	ContentType string
 }
 
 type ApiResourceHandler func(input *ApiResourceInput) (*ApiResourceOutput, errors.Error)
diff --git a/plugins/jira/api/proxy.go b/plugins/jira/api/proxy.go
index 47934e98..4d767f6b 100644
--- a/plugins/jira/api/proxy.go
+++ b/plugins/jira/api/proxy.go
@@ -19,21 +19,16 @@ package api
 
 import (
 	"context"
-	"encoding/json"
 	"fmt"
-	"github.com/apache/incubator-devlake/errors"
 	"io"
 	"time"
 
+	"github.com/apache/incubator-devlake/errors"
 	"github.com/apache/incubator-devlake/plugins/core"
 	"github.com/apache/incubator-devlake/plugins/helper"
 	"github.com/apache/incubator-devlake/plugins/jira/models"
 )
 
-const (
-	TimeOut = 10 * time.Second
-)
-
 func Proxy(input *core.ApiResourceInput) (*core.ApiResourceOutput, errors.Error) {
 	connection := &models.JiraConnection{}
 	err := connectionHelper.First(connection, input.Params)
@@ -63,11 +58,5 @@ func Proxy(input *core.ApiResourceInput) (*core.ApiResourceOutput, errors.Error)
 	if err != nil {
 		return nil, err
 	}
-	// verify response body is json
-	var tmp interface{}
-	err = errors.Convert(json.Unmarshal(body, &tmp))
-	if err != nil {
-		return nil, err
-	}
-	return &core.ApiResourceOutput{Status: resp.StatusCode, Body: json.RawMessage(body)}, nil
+	return &core.ApiResourceOutput{Status: resp.StatusCode, ContentType: resp.Header.Get("Content-Type"), Body: body}, nil
 }