@@ -28,9 +28,11 @@ import (
2828 "github.com/go-git/go-git/v5/storage/memory"
2929 goscm "github.com/jenkins-x/go-scm/scm"
3030 "github.com/kubesphere/ks-devops/pkg/client/git"
31+ "github.com/kubesphere/ks-devops/pkg/constants"
3132 "github.com/kubesphere/ks-devops/pkg/kapis"
3233 "github.com/kubesphere/ks-devops/pkg/kapis/common"
3334 v1 "k8s.io/api/core/v1"
35+ "k8s.io/apimachinery/pkg/api/errors"
3436 "sigs.k8s.io/controller-runtime/pkg/client"
3537)
3638
@@ -50,6 +52,9 @@ func newHandler(k8sClient client.Client) *handler {
5052func (h * handler ) verify (request * restful.Request , response * restful.Response ) {
5153 scm := request .PathParameter ("scm" )
5254 secretName := request .QueryParameter ("secret" )
55+ insecureSkipTLS := request .QueryParameter ("insecureSkipTLS" ) == "true"
56+ caName := request .QueryParameter ("caName" )
57+ caNamespace := request .QueryParameter ("caNamespace" )
5358 secretNamespace := request .QueryParameter ("secretNamespace" )
5459 server := common .GetQueryParameter (request , queryParameterServer )
5560
@@ -62,7 +67,8 @@ func (h *handler) verify(request *restful.Request, response *restful.Response) {
6267 response .WriteHeaderAndEntity (http .StatusBadRequest , err )
6368 return
6469 }
65- code , err = h .checkRepoAccess (server , secretName , secretNamespace )
70+
71+ code , err = h .checkRepoAccess (server , secretName , secretNamespace , insecureSkipTLS , caName , caNamespace )
6672
6773 default :
6874 _ , code , err = h .getOrganizations (scm , server , secretName , secretNamespace , 1 , 1 , false )
@@ -74,14 +80,34 @@ func (h *handler) verify(request *restful.Request, response *restful.Response) {
7480 _ = response .WriteAsJson (verifyResult )
7581}
7682
77- func (h * handler ) checkRepoAccess (repourl , secretName , secretNamespace string ) (int , error ) {
83+ func (h * handler ) checkRepoAccess (repourl , secretName , secretNamespace string , insecureSkipTLS bool , caName , caNamespace string ) (int , error ) {
7884 storage := memory .NewStorage ()
7985 remote := gogit .NewRemote (storage , & config.RemoteConfig {
8086 Name : "origin" ,
8187 URLs : []string {repourl },
8288 })
8389
84- listOption := & gogit.ListOptions {}
90+ listOption := & gogit.ListOptions {InsecureSkipTLS : insecureSkipTLS }
91+ if caName != "" {
92+ if caNamespace == "" {
93+ caNamespace = constants .DevOpsWorkerNamespace
94+ }
95+
96+ cacm := & v1.ConfigMap {}
97+ if err := h .Get (context .Background (), client.ObjectKey {Namespace : caNamespace , Name : caName }, cacm ); err != nil {
98+ if errors .IsNotFound (err ) {
99+ return http .StatusNotFound , err
100+ }
101+ return http .StatusInternalServerError , err
102+ }
103+
104+ certData , exists := cacm .Data [constants .TLSCertKey ]
105+ if ! exists {
106+ return http .StatusNotFound , fmt .Errorf ("ca.crt not found in configmap %s" , caName )
107+ }
108+ listOption .CABundle = []byte (certData )
109+ }
110+
85111 if secretName != "" && secretNamespace != "" {
86112 factory := git .NewClientFactory ("git" , & v1.SecretReference {
87113 Namespace : secretNamespace , Name : secretName ,
0 commit comments