Files
kubesphere/pkg/simple/client/devops/jenkins/pure_request.go
shaowenchen e723038abc fix jenkins basic
Signed-off-by: shaowenchen <mail@chenshaowen.com>
2020-06-08 18:34:42 +08:00

81 lines
2.1 KiB
Go

package jenkins
import (
"encoding/base64"
"fmt"
"github.com/dgrijalva/jwt-go"
"k8s.io/klog"
authtoken "kubesphere.io/kubesphere/pkg/apiserver/authentication/token"
"kubesphere.io/kubesphere/pkg/simple/client/devops"
"net/http"
"net/url"
"strings"
"time"
)
// TODO: deprecated, use SendJenkinsRequestWithHeaderResp() instead
func (j *Jenkins) SendPureRequest(path string, httpParameters *devops.HttpParameters) ([]byte, error) {
resBody, _, err := j.SendPureRequestWithHeaderResp(path, httpParameters)
return resBody, err
}
// provider request header to call jenkins api.
// transfer bearer token to basic token for inner Oauth and Jeknins
func (j *Jenkins) SendPureRequestWithHeaderResp(path string, httpParameters *devops.HttpParameters) ([]byte, http.Header, error) {
Url, err := url.Parse(j.Server + path)
if err != nil {
klog.Error(err)
return nil, nil, err
}
client := &http.Client{Timeout: 30 * time.Second}
header := httpParameters.Header
bearTokenArray := strings.Split(header.Get("Authorization"), " ")
bearFlag := bearTokenArray[0]
if strings.ToLower(bearFlag) == "bearer" {
bearToken := bearTokenArray[1]
if err != nil {
klog.Error(err)
return nil, nil, err
}
claim := authtoken.Claims{}
parser := jwt.Parser{}
_, _, err = parser.ParseUnverified(bearToken, &claim)
if err != nil {
return nil, nil, err
}
creds := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", claim.Username, bearToken)))
header.Set("Authorization", fmt.Sprintf("Basic %s", creds))
}
newRequest := &http.Request{
Method: httpParameters.Method,
URL: Url,
Header: header,
Body: httpParameters.Body,
Form: httpParameters.Form,
PostForm: httpParameters.PostForm,
}
resp, err := client.Do(newRequest)
if err != nil {
klog.Error(err)
return nil, nil, err
}
resBody, _ := getRespBody(resp)
defer resp.Body.Close()
if resp.StatusCode >= http.StatusBadRequest {
klog.Errorf("%+v", string(resBody))
jkerr := new(JkError)
jkerr.Code = resp.StatusCode
jkerr.Message = string(resBody)
return nil, nil, jkerr
}
return resBody, resp.Header, nil
}