in backend/plugins/jira/api/connection_api.go [41:116]
func testConnection(ctx context.Context, connection models.JiraConn) (*JiraTestConnResponse, errors.Error) {
// validate
if vld != nil {
e := vld.StructExcept(connection, "BasicAuth", "AccessToken")
if e != nil {
return nil, errors.Convert(e)
}
}
// test connection
apiClient, err := api.NewApiClientFromConnection(ctx, basicRes, &connection)
if err != nil {
return nil, err
}
// serverInfo checking
res, err := apiClient.Get("api/2/serverInfo", nil, nil)
if err != nil {
return nil, err
}
serverInfoFail := "Failed testing the serverInfo: [ " + res.Request.URL.String() + " ]"
// check if `/rest/` was missing
if res.StatusCode == http.StatusNotFound && !strings.HasSuffix(connection.Endpoint, "/rest/") {
endpointUrl, err := url.Parse(connection.Endpoint)
if err != nil {
return nil, errors.Convert(err)
}
refUrl, err := url.Parse("/rest/")
if err != nil {
return nil, errors.Convert(err)
}
restUrl := endpointUrl.ResolveReference(refUrl)
return nil, errors.NotFound.New(fmt.Sprintf("Seems like an invalid Endpoint URL, please try %s", restUrl.String()))
}
if res.StatusCode == http.StatusUnauthorized || res.StatusCode == http.StatusForbidden {
return nil, errors.HttpStatus(res.StatusCode).New("Please check your credential")
}
if res.StatusCode != http.StatusOK {
return nil, errors.HttpStatus(res.StatusCode).New(fmt.Sprintf("%s unexpected status code: %d", serverInfoFail, res.StatusCode))
}
resBody := &models.JiraServerInfo{}
err = api.UnmarshalResponse(res, resBody)
if err != nil {
return nil, errors.Convert(err)
}
// check version
if resBody.DeploymentType == models.DeploymentServer {
// only support 8.x.x or higher
if versions := resBody.VersionNumbers; len(versions) == 3 && versions[0] < 7 {
return nil, errors.Default.New(fmt.Sprintf("%s Support JIRA Server 7+ only", serverInfoFail))
}
}
// verify credential
getStatusFail := "an error occurred while making request to `/rest/agile/1.0/board`"
res, err = apiClient.Get("agile/1.0/board", nil, nil)
if err != nil {
return nil, errors.Default.Wrap(err, getStatusFail)
}
getStatusFail += ": [ " + res.Request.URL.String() + " ]"
errMsg := ""
if res.StatusCode == http.StatusUnauthorized {
return nil, errors.HttpStatus(res.StatusCode).New("Please check your credential")
}
if res.StatusCode != http.StatusOK {
return nil, errors.HttpStatus(res.StatusCode).New(fmt.Sprintf("%s Unexpected [%s] status code: %d %s", getStatusFail, res.Request.URL, res.StatusCode, errMsg))
}
connection = connection.Sanitize()
body := JiraTestConnResponse{}
body.Success = true
body.Message = "success"
body.Connection = &connection
return &body, nil
}