diff --git a/pkg/models/devops/project_credential_handler.go b/pkg/models/devops/project_credential_handler.go index b844bec88756e3f87d0b0cda49d10ee8db55b5f0..cc7d08f1109c24b376437b680bc7f34377a61b40 100644 --- a/pkg/models/devops/project_credential_handler.go +++ b/pkg/models/devops/project_credential_handler.go @@ -32,6 +32,12 @@ import ( func CreateProjectCredential(projectId, username string, credentialRequest *JenkinsCredential) (string, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } + err := checkJenkinsCredentialExists(projectId, credentialRequest.Domain, credentialRequest.Id) if err != nil { glog.Errorf("%+v", err) @@ -139,6 +145,11 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk func UpdateProjectCredential(projectId, credentialId string, credentialRequest *JenkinsCredential) (string, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } jenkinsCredential, err := jenkinsClient.GetCredentialInFolder(credentialRequest.Domain, credentialId, projectId) @@ -228,6 +239,11 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * func DeleteProjectCredential(projectId, credentialId string, credentialRequest *JenkinsCredential) (string, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } dbClient := devops_mysql.OpenDatabase() _, err := jenkinsClient.GetCredentialInFolder(credentialRequest.Domain, credentialId, @@ -262,6 +278,11 @@ func DeleteProjectCredential(projectId, credentialId string, credentialRequest * func GetProjectCredential(projectId, credentialId, domain, getContent string) (*JenkinsCredential, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } dbClient := devops_mysql.OpenDatabase() jenkinsResponse, err := jenkinsClient.GetCredentialInFolder(domain, credentialId, @@ -318,7 +339,7 @@ func GetProjectCredential(projectId, credentialId, domain, getContent string) (* value, _ := selection.Attr("value") content.Username = value }) - + doc.Find("textarea[name*=privateKey]").Each(func(i int, selection *goquery.Selection) { value := selection.Text() content.PrivateKey = value @@ -332,6 +353,11 @@ func GetProjectCredential(projectId, credentialId, domain, getContent string) (* func GetProjectCredentials(projectId, domain string) ([]*JenkinsCredential, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } dbClient := devops_mysql.OpenDatabase() jenkinsCredentialResponses, err := jenkinsClient.GetCredentialsInFolder(domain, projectId) if err != nil { @@ -367,6 +393,11 @@ func insertCredentialToDb(projectId, credentialId, domain, username string) erro func checkJenkinsCredentialExists(projectId, domain, credentialId string) error { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return restful.NewError(http.StatusServiceUnavailable, err.Error()) + } credential, err := jenkinsClient.GetCredentialInFolder(domain, credentialId, projectId) if credential != nil { err := fmt.Errorf("credential id [%s] has been used", credential.Id) diff --git a/pkg/models/devops/project_member_handler.go b/pkg/models/devops/project_member_handler.go index 4546444d4b8f7684849fa3506c5be4182b2edd4e..1974dc5837c4aa14250cfb3277f106f7ce1e2442 100644 --- a/pkg/models/devops/project_member_handler.go +++ b/pkg/models/devops/project_member_handler.go @@ -98,7 +98,12 @@ func GetProjectMember(projectId, username string) (*DevOpsProjectMembership, err func AddProjectMember(projectId, operator string, member *DevOpsProjectMembership) (*DevOpsProjectMembership, error) { dbconn := devops_mysql.OpenDatabase() - jenkinsClinet := admin_jenkins.Client() + jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } membership := &DevOpsProjectMembership{} err := dbconn.Select(DevOpsProjectMembershipColumns...). @@ -118,13 +123,13 @@ func AddProjectMember(projectId, operator string, member *DevOpsProjectMembershi return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } - globalRole, err := jenkinsClinet.GetGlobalRole(JenkinsAllUserRoleName) + globalRole, err := jenkinsClient.GetGlobalRole(JenkinsAllUserRoleName) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } if globalRole == nil { - _, err := jenkinsClinet.AddGlobalRole(JenkinsAllUserRoleName, gojenkins.GlobalPermissionIds{ + _, err := jenkinsClient.AddGlobalRole(JenkinsAllUserRoleName, gojenkins.GlobalPermissionIds{ GlobalRead: true, }, true) if err != nil { @@ -137,7 +142,7 @@ func AddProjectMember(projectId, operator string, member *DevOpsProjectMembershi glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } - projectRole, err := jenkinsClinet.GetProjectRole(GetProjectRoleName(projectId, member.Role)) + projectRole, err := jenkinsClient.GetProjectRole(GetProjectRoleName(projectId, member.Role)) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) @@ -147,7 +152,7 @@ func AddProjectMember(projectId, operator string, member *DevOpsProjectMembershi glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } - pipelineRole, err := jenkinsClinet.GetProjectRole(GetPipelineRoleName(projectId, member.Role)) + pipelineRole, err := jenkinsClient.GetProjectRole(GetPipelineRoleName(projectId, member.Role)) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) @@ -181,7 +186,12 @@ func AddProjectMember(projectId, operator string, member *DevOpsProjectMembershi func UpdateProjectMember(projectId, operator string, member *DevOpsProjectMembership) (*DevOpsProjectMembership, error) { dbconn := devops_mysql.OpenDatabase() - jenkinsClinet := admin_jenkins.Client() + jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } oldMembership := &DevOpsProjectMembership{} err := dbconn.Select(DevOpsProjectMembershipColumns...). From(DevOpsProjectMembershipTableName). @@ -194,7 +204,7 @@ func UpdateProjectMember(projectId, operator string, member *DevOpsProjectMember return nil, restful.NewError(http.StatusBadRequest, err.Error()) } - oldProjectRole, err := jenkinsClinet.GetProjectRole(GetProjectRoleName(projectId, oldMembership.Role)) + oldProjectRole, err := jenkinsClient.GetProjectRole(GetProjectRoleName(projectId, oldMembership.Role)) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) @@ -204,7 +214,7 @@ func UpdateProjectMember(projectId, operator string, member *DevOpsProjectMember glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } - oldPipelineRole, err := jenkinsClinet.GetProjectRole(GetPipelineRoleName(projectId, oldMembership.Role)) + oldPipelineRole, err := jenkinsClient.GetProjectRole(GetPipelineRoleName(projectId, oldMembership.Role)) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) @@ -215,7 +225,7 @@ func UpdateProjectMember(projectId, operator string, member *DevOpsProjectMember return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } - projectRole, err := jenkinsClinet.GetProjectRole(GetProjectRoleName(projectId, member.Role)) + projectRole, err := jenkinsClient.GetProjectRole(GetProjectRoleName(projectId, member.Role)) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) @@ -225,7 +235,7 @@ func UpdateProjectMember(projectId, operator string, member *DevOpsProjectMember glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } - pipelineRole, err := jenkinsClinet.GetProjectRole(GetPipelineRoleName(projectId, member.Role)) + pipelineRole, err := jenkinsClient.GetProjectRole(GetPipelineRoleName(projectId, member.Role)) if err != nil { glog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) @@ -262,6 +272,11 @@ func UpdateProjectMember(projectId, operator string, member *DevOpsProjectMember func DeleteProjectMember(projectId, username string) (string, error) { dbconn := devops_mysql.OpenDatabase() jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } oldMembership := &DevOpsProjectMembership{} err := dbconn.Select(DevOpsProjectMembershipColumns...). From(DevOpsProjectMembershipTableName). diff --git a/pkg/models/devops/project_pipeline_handler.go b/pkg/models/devops/project_pipeline_handler.go index d5f013f43a39a8d7502f5bf50b81fefa884ba2de..9bfa3db133a97f66c7a43bb02de7d285f5b91821 100644 --- a/pkg/models/devops/project_pipeline_handler.go +++ b/pkg/models/devops/project_pipeline_handler.go @@ -24,6 +24,11 @@ import ( func CreateProjectPipeline(projectId string, pipeline *ProjectPipeline) (string, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } switch pipeline.Type { case NoScmPipelineType: @@ -89,6 +94,11 @@ func CreateProjectPipeline(projectId string, pipeline *ProjectPipeline) (string, func DeleteProjectPipeline(projectId string, pipelineId string) (string, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } _, err := jenkinsClient.DeleteJob(pipelineId, projectId) if err != nil { glog.Errorf("%+v", err) @@ -99,6 +109,11 @@ func DeleteProjectPipeline(projectId string, pipelineId string) (string, error) func UpdateProjectPipeline(projectId, pipelineId string, pipeline *ProjectPipeline) (string, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return "", restful.NewError(http.StatusServiceUnavailable, err.Error()) + } switch pipeline.Type { case NoScmPipelineType: @@ -155,7 +170,11 @@ func UpdateProjectPipeline(projectId, pipelineId string, pipeline *ProjectPipeli func GetProjectPipeline(projectId, pipelineId string) (*ProjectPipeline, error) { jenkinsClient := admin_jenkins.Client() - + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } job, err := jenkinsClient.GetJob(pipelineId, projectId) if err != nil { glog.Errorf("%+v", err) @@ -205,6 +224,11 @@ func GetProjectPipeline(projectId, pipelineId string) (*ProjectPipeline, error) func GetPipelineSonar(projectId, pipelineId string) ([]*SonarStatus, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } job, err := jenkinsClient.GetJob(pipelineId, projectId) if err != nil { glog.Errorf("%+v", err) @@ -238,6 +262,11 @@ func GetPipelineSonar(projectId, pipelineId string) ([]*SonarStatus, error) { func GetMultiBranchPipelineSonar(projectId, pipelineId, branchId string) ([]*SonarStatus, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } job, err := jenkinsClient.GetJob(branchId, projectId, pipelineId) if err != nil { glog.Errorf("%+v", err) diff --git a/pkg/models/iam/im.go b/pkg/models/iam/im.go index c34e979ae186b838784595a6e467b96123e91bf2..ea8757214032dcdd4f334185abb6a7a865a584e2 100644 --- a/pkg/models/iam/im.go +++ b/pkg/models/iam/im.go @@ -21,6 +21,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/emicklei/go-restful" "io/ioutil" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/db" @@ -35,6 +36,7 @@ import ( "kubesphere.io/kubesphere/pkg/simple/client/redis" "kubesphere.io/kubesphere/pkg/utils/k8sutil" "kubesphere.io/kubesphere/pkg/utils/sliceutil" + "net/http" "regexp" "sort" "strconv" @@ -552,7 +554,11 @@ func DeleteUser(username string) error { devopsDb := devops_mysql.OpenDatabase() jenkinsClient := admin_jenkins.Client() - + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return restful.NewError(http.StatusServiceUnavailable, err.Error()) + } _, err = devopsDb.DeleteFrom(devops.DevOpsProjectMembershipTableName). Where(db.And( db.Eq(devops.DevOpsProjectMembershipUsernameColumn, username), diff --git a/pkg/models/tenant/devops.go b/pkg/models/tenant/devops.go index a135f91f6ce9577a700ba38b2c36bed091085a9f..bd292740537291172f3fe3a2a8c5bf6d91345869 100644 --- a/pkg/models/tenant/devops.go +++ b/pkg/models/tenant/devops.go @@ -112,6 +112,11 @@ func DeleteDevOpsProject(projectId, username string) error { return restful.NewError(http.StatusForbidden, err.Error()) } gojenkins := admin_jenkins.Client() + if gojenkins == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return restful.NewError(http.StatusServiceUnavailable, err.Error()) + } devopsdb := devops_mysql.OpenDatabase() _, err = gojenkins.DeleteJob(projectId) @@ -158,6 +163,11 @@ func DeleteDevOpsProject(projectId, username string) error { func CreateDevopsProject(username string, workspace string, req *devops.DevOpsProject) (*devops.DevOpsProject, error) { jenkinsClient := admin_jenkins.Client() + if jenkinsClient == nil { + err := fmt.Errorf("could not connect to jenkins") + glog.Error(err) + return nil, restful.NewError(http.StatusServiceUnavailable, err.Error()) + } devopsdb := devops_mysql.OpenDatabase() project := devops.NewDevOpsProject(req.Name, req.Description, username, req.Extra, workspace) _, err := jenkinsClient.CreateFolder(project.ProjectId, project.Description)