@ -14,12 +14,12 @@ import (
 
			
		
	
		
			
				
						"sync" 
 
			
		
	
		
			
				
						"time" 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						"github.com/google/go-querystring/query" 
 
			
		
	
		
			
				
						"repository.basistech.ru/BASIS/decort-golang-sdk/config" 
 
			
		
	
		
			
				
						"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi" 
 
			
		
	
		
			
				
						k8s_ca  "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s" 
 
			
		
	
		
			
				
						"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker" 
 
			
		
	
		
			
				
						k8s_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/k8s" 
 
			
		
	
		
			
				
						"github.com/google/go-querystring/query" 
 
			
		
	
		
			
				
						"repository.basistech.ru/BASIS/decort-golang-sdk/config" 
 
			
		
	
		
			
				
						k8s_cb  "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/k8s" 
 
			
		
	
		
			
				
					)  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// HTTP-client for platform
  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -73,398 +73,338 @@ func (dc *DecortClient) CloudBroker() *cloudbroker.CloudBroker {
 
			
		
	
		
			
				
					func  ( dc  * DecortClient )  DecortApiCall ( ctx  context . Context ,  method ,  url  string ,  params  interface { } )  ( [ ] byte ,  error )  {  
			
		
	
		
			
				
						k8sCaCreateReq ,  okCa  :=  params . ( k8s_ca . CreateRequest ) 
 
			
		
	
		
			
				
						k8sCbCreateReq ,  okCb  :=  params . ( k8s_cb . CreateRequest ) 
 
			
		
	
		
			
				
						var  body  * bytes . Buffer 
 
			
		
	
		
			
				
						var  ctype  string 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  okCa  { 
 
			
		
	
		
			
				
							body ,  ctype  =  createK8sCloudApi ( k8sCaCreateReq ) 
 
			
		
	
		
			
				
						}  else  if  okCb  { 
 
			
		
	
		
			
				
							body ,  ctype  =  createK8sCloudBroker ( k8sCbCreateReq ) 
 
			
		
	
		
			
				
						}  else  { 
 
			
		
	
		
			
				
							values ,  err  :=  query . Values ( params ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							body  =  bytes . NewBufferString ( values . Encode ( ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						req ,  err  :=  http . NewRequestWithContext ( ctx ,  method ,  dc . decortURL + "/restmachine" + url ,  body ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  err  =  dc . getToken ( ctx ) ;  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						resp ,  err  :=  dc . do ( req ,  ctype ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						defer  resp . Body . Close ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						respBytes ,  err  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  resp . StatusCode  !=  200  { 
 
			
		
	
		
			
				
							return  nil ,  errors . New ( string ( respBytes ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  respBytes ,  nil 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					func  ( dc  * DecortClient )  getToken ( ctx  context . Context )  error  {  
			
		
	
		
			
				
						dc . mutex . Lock ( ) 
 
			
		
	
		
			
				
						defer  dc . mutex . Unlock ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  dc . cfg . Token  ==  ""  ||  time . Now ( ) . After ( dc . expiryTime )  { 
 
			
		
	
		
			
				
							body  :=  fmt . Sprintf ( "grant_type=client_credentials&client_id=%s&client_secret=%s&response_type=id_token" ,  dc . cfg . AppID ,  dc . cfg . AppSecret ) 
 
			
		
	
		
			
				
							bodyReader  :=  strings . NewReader ( body ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							dc . cfg . SSOURL  =  strings . TrimSuffix ( dc . cfg . SSOURL ,  "/" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							req ,  _  :=  http . NewRequestWithContext ( ctx ,  "POST" ,  dc . cfg . SSOURL + "/v1/oauth/access_token" ,  bodyReader ) 
 
			
		
	
		
			
				
							req . Header . Add ( "Content-Type" ,  "application/x-www-form-urlencoded" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							resp ,  err  :=  dc . client . Do ( req ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  fmt . Errorf ( "cannot get token: %w" ,  err ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							tokenBytes ,  _  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
							resp . Body . Close ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  resp . StatusCode  !=  200  { 
 
			
		
	
		
			
				
								return  fmt . Errorf ( "cannot get token: %s" ,  tokenBytes ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							token  :=  string ( tokenBytes ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							dc . cfg . Token  =  token 
 
			
		
	
		
			
				
							dc . expiryTime  =  time . Now ( ) . AddDate ( 0 ,  0 ,  1 ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  nil 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					func  ( dc  * DecortClient )  do ( req  * http . Request ,  ctype  string )  ( * http . Response ,  error )  {  
			
		
	
		
			
				
						if  ctype  !=  ""  { 
 
			
		
	
		
			
				
							req . Header . Add ( "Content-Type" ,  ctype ) 
 
			
		
	
		
			
				
						}  else  { 
 
			
		
	
		
			
				
							req . Header . Add ( "Content-Type" ,  "application/x-www-form-urlencoded" ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						req . Header . Add ( "Authorization" ,  "bearer " + dc . cfg . Token ) 
 
			
		
	
		
			
				
						req . Header . Set ( "Accept" ,  "application/json" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// var resp *http.Response
 
 
			
		
	
		
			
				
						// var err error
 
 
			
		
	
		
			
				
						buf ,  _  :=  io . ReadAll ( req . Body ) 
 
			
		
	
		
			
				
						// req = req.Clone(req.Context())
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// for i := uint64(0); i < dc.cfg.Retries; i++ {
 
 
			
		
	
		
			
				
						req . Body  =  io . NopCloser ( bytes . NewBuffer ( buf ) ) 
 
			
		
	
		
			
				
						resp ,  err  :=  dc . client . Do ( req ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// if err == nil {
 
 
			
		
	
		
			
				
						if  resp . StatusCode  ==  200  { 
 
			
		
	
		
			
				
							return  resp ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						respBytes ,  _  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
						err  =  fmt . Errorf ( "%s" ,  respBytes ) 
 
			
		
	
		
			
				
						resp . Body . Close ( ) 
 
			
		
	
		
			
				
						// }
 
 
			
		
	
		
			
				
						// }
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  nil ,  fmt . Errorf ( "could not execute request: %w" ,  err ) 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					func  createK8sCloudApi ( req  k8s_ca . CreateRequest )  ( * bytes . Buffer ,  string )  {  
			
		
	
		
			
				
						reqBody  :=  & bytes . Buffer { } 
 
			
		
	
		
			
				
						writer  :=  multipart . NewWriter ( reqBody ) 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . OidcCertificate  !=  ""  { 
 
			
		
	
		
			
				
						if  . OidcCertificate  !=  ""  { 
 
			
		
	
		
			
				
							part ,  _  :=  writer . CreateFormFile ( "oidcCertificate" ,  "ca.crt" ) 
 
			
		
	
		
			
				
								_ ,  _  =  io . Copy ( part ,  strings . NewReader ( k8sCaCreateReq . OidcCertificate ) ) 
 
			
		
	
		
			
				
							_ ,  _  =  io . Copy ( part ,  strings . NewReader ( . OidcCertificate ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "name" ,  k8sCaCreateReq . Name ) 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "rgId" ,  strconv . FormatUint ( k8sCaCreateReq . RGID ,  10 ) ) 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "k8ciId" ,  strconv . FormatUint ( k8sCaCreateReq . K8SCIID ,  10 ) ) 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerGroupName" ,  k8sCaCreateReq . WorkerGroupName ) 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "networkPlugin" ,  k8sCaCreateReq . NetworkPlugin ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "name" ,  . Name ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "rgId" ,  strconv . FormatUint ( . RGID ,  10 ) ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "k8ciId" ,  strconv . FormatUint ( . K8SCIID ,  10 ) ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "workerGroupName" ,  . WorkerGroupName ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "networkPlugin" ,  . NetworkPlugin ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  k8sCaCreateReq . MasterSEPID  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "masterSepId" ,  strconv . FormatUint ( k8sCaCreateReq . MasterSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterSEPID  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterSepId" ,  strconv . FormatUint ( . MasterSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . MasterSEPPool  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "masterSepPool" ,  k8sCaCreateReq . MasterSEPPool ) 
 
			
		
	
		
			
				
						if  . MasterSEPPool  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterSepPool" ,  . MasterSEPPool ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . WorkerSEPID  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "workerSepId" ,  strconv . FormatUint ( k8sCaCreateReq . WorkerSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerSEPID  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerSepId" ,  strconv . FormatUint ( . WorkerSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . WorkerSEPPool  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "workerSepPool" ,  k8sCaCreateReq . WorkerSEPPool ) 
 
			
		
	
		
			
				
						if  . WorkerSEPPool  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerSepPool" ,  . WorkerSEPPool ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  k8sCaCreateReq . Labels  !=  nil  { 
 
			
		
	
		
			
				
								for  _ ,  v  :=  range  k8sCaCreateReq . Labels  { 
 
			
		
	
		
			
				
						if  . Labels  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . Labels  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "labels" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . Taints  !=  nil  { 
 
			
		
	
		
			
				
								for  _ ,  v  :=  range  k8sCaCreateReq . Taints  { 
 
			
		
	
		
			
				
						if  . Taints  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . Taints  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "taints" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . Annotations  !=  nil  { 
 
			
		
	
		
			
				
								for  _ ,  v  :=  range  k8sCaCreateReq . Annotations  { 
 
			
		
	
		
			
				
						if  . Annotations  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . Annotations  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "annotations" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  k8sCaCreateReq . MasterCPU  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "masterCpu" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterCPU ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterCPU  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterCpu" ,  strconv . FormatUint ( uint64 ( . MasterCPU ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . MasterNum  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "masterNum" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterNum ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterNum  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterNum" ,  strconv . FormatUint ( uint64 ( . MasterNum ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . MasterRAM  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "masterRam" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterRAM ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterRAM  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterRam" ,  strconv . FormatUint ( uint64 ( . MasterRAM ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . MasterDisk  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "masterDisk" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . MasterDisk ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterDisk  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterDisk" ,  strconv . FormatUint ( uint64 ( . MasterDisk ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . WorkerCPU  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "workerCpu" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerCPU ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerCPU  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerCpu" ,  strconv . FormatUint ( uint64 ( . WorkerCPU ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . WorkerNum  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "workerNum" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerNum ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerNum  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerNum" ,  strconv . FormatUint ( uint64 ( . WorkerNum ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . WorkerRAM  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "workerRam" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerRAM ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerRAM  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerRam" ,  strconv . FormatUint ( uint64 ( . WorkerRAM ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . WorkerDisk  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "workerDisk" ,  strconv . FormatUint ( uint64 ( k8sCaCreateReq . WorkerDisk ) ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerDisk  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerDisk" ,  strconv . FormatUint ( uint64 ( . WorkerDisk ) ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . ExtNetID  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "extnetId" ,  strconv . FormatUint ( k8sCaCreateReq . ExtNetID ,  10 ) ) 
 
			
		
	
		
			
				
						if  . ExtNetID  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "extnetId" ,  strconv . FormatUint ( . ExtNetID ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . VinsId  !=  0  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "vinsId" ,  strconv . FormatUint ( k8sCaCreateReq . VinsId ,  10 ) ) 
 
			
		
	
		
			
				
						if  . VinsId  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "vinsId" ,  strconv . FormatUint ( . VinsId ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  ! k8sCaCreateReq . WithLB  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "withLB" ,  strconv . FormatBool ( k8sCaCreateReq . WithLB ) ) 
 
			
		
	
		
			
				
						if  ! . WithLB  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "withLB" ,  strconv . FormatBool ( . WithLB ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "highlyAvailableLB" ,  strconv . FormatBool ( k8sCaCreateReq . HighlyAvailable ) ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "highlyAvailableLB" ,  strconv . FormatBool ( . HighlyAvailable ) ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  k8sCaCreateReq . AdditionalSANs  !=  nil  { 
 
			
		
	
		
			
				
								for  _ ,  v  :=  range  k8sCaCreateReq . AdditionalSANs  { 
 
			
		
	
		
			
				
						if  . AdditionalSANs  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . AdditionalSANs  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "additionalSANs" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . InitConfiguration  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "initConfiguration" ,  k8sCaCreateReq . InitConfiguration ) 
 
			
		
	
		
			
				
						if  . InitConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "initConfiguration" ,  . InitConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . ClusterConfiguration  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "clusterConfiguration" ,  k8sCaCreateReq . ClusterConfiguration ) 
 
			
		
	
		
			
				
						if  . ClusterConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "clusterConfiguration" ,  . ClusterConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . KubeletConfiguration  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "kubeletConfiguration" ,  k8sCaCreateReq . KubeletConfiguration ) 
 
			
		
	
		
			
				
						if  . KubeletConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "kubeletConfiguration" ,  . KubeletConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . KubeProxyConfiguration  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "kubeProxyConfiguration" ,  k8sCaCreateReq . KubeProxyConfiguration ) 
 
			
		
	
		
			
				
						if  . KubeProxyConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "kubeProxyConfiguration" ,  . KubeProxyConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . JoinConfiguration  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "joinConfiguration" ,  k8sCaCreateReq . JoinConfiguration ) 
 
			
		
	
		
			
				
						if  . JoinConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "joinConfiguration" ,  . JoinConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . Description  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "desc" ,  k8sCaCreateReq . Description ) 
 
			
		
	
		
			
				
						if  . Description  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "desc" ,  . Description ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
							if  k8sCaCreateReq . UserData  !=  ""  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "userData" ,  k8sCaCreateReq . UserData ) 
 
			
		
	
		
			
				
						if  . UserData  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "userData" ,  . UserData ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "extnetOnly" ,  strconv . FormatBool ( k8sCaCreateReq . ExtNetOnly ) ) 
 
			
		
	
		
			
				
							_  =  writer . FormDataContentType ( ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "extnetOnly" ,  strconv . FormatBool ( req . ExtNetOnly ) ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						ct  :=  writer . FormDataContentType ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						writer . Close ( ) 
 
			
		
	
		
			
				
							req ,  err  :=  http . NewRequestWithContext ( ctx ,  method ,  dc . decortURL + "/restmachine" + url ,  reqBody ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							if  err  =  dc . getToken ( ctx ) ;  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							resp ,  err  :=  dc . domp ( req ,  ct ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							defer  resp . Body . Close ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							respBytes ,  err  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  resp . StatusCode  !=  200  { 
 
			
		
	
		
			
				
								return  nil ,  errors . New ( string ( respBytes ) ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						return  reqBody ,  ct 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							return  respBytes ,  nil 
 
			
		
	
		
			
				
						}  else  if  okCb  { 
 
			
		
	
		
			
				
					func  createK8sCloudBroker ( req  k8s_cb . CreateRequest )  ( * bytes . Buffer ,  string )  {  
			
		
	
		
			
				
						reqBody  :=  & bytes . Buffer { } 
 
			
		
	
		
			
				
						writer  :=  multipart . NewWriter ( reqBody ) 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. OidcCertificate  !=  ""  {  
			
		
	
		
			
				
						if  req . OidcCertificate  !=  ""  { 
 
			
		
	
		
			
				
							part ,  _  :=  writer . CreateFormFile ( "oidcCertificate" ,  "ca.crt" ) 
 
			
		
	
		
			
				
								 _ ,  _  =  io . Copy ( part ,  strings . NewReader ( k8sCbC reateR eq. OidcCertificate ) ) 
 
			
		
	
		
			
				
							_ ,  _  =  io . Copy ( part ,  strings . NewReader ( req . OidcCertificate ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						 	_  =  writer . WriteField ( "name" ,  k8sCbC reateR eq. Name )  
			
		
	
		
			
				
						 	_  =  writer . WriteField ( "rgId" ,  strconv . FormatUint ( k8sCbC reateR eq. RGID ,  10 ) )  
			
		
	
		
			
				
						 	_  =  writer . WriteField ( "k8ciId" ,  strconv . FormatUint ( k8sCbC reateR eq. K8CIID ,  10 ) )  
			
		
	
		
			
				
						 	_  =  writer . WriteField ( "workerGroupName" ,  k8sCbC reateR eq. WorkerGroupName )  
			
		
	
		
			
				
						 	_  =  writer . WriteField ( "networkPlugin" ,  k8sCbC reateR eq. NetworkPlugin )  
			
		
	
		
			
				
						_  =  writer . WriteField ( "name" ,  req . Name ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "rgId" ,  strconv . FormatUint ( req . RGID ,  10 ) ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "k8ciId" ,  strconv . FormatUint ( req . K8CIID ,  10 ) ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "workerGroupName" ,  req . WorkerGroupName ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "networkPlugin" ,  req . NetworkPlugin ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. MasterSEPID  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "masterSepId" ,  strconv . FormatUint ( k8sCbC reateR eq. MasterSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterSEPID  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterSepId" ,  strconv . FormatUint ( . MasterSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. MasterSEPPool  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "masterSepPool" ,  k8sCbC reateR eq. MasterSEPPool ) 
 
			
		
	
		
			
				
						if  . MasterSEPPool  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterSepPool" ,  . MasterSEPPool ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. WorkerSEPID  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "workerSepId" ,  strconv . FormatUint ( k8sCbC reateR eq. WorkerSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerSEPID  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerSepId" ,  strconv . FormatUint ( . WorkerSEPID ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. WorkerSEPPool  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "workerSepPool" ,  k8sCbC reateR eq. WorkerSEPPool ) 
 
			
		
	
		
			
				
						if  . WorkerSEPPool  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerSepPool" ,  . WorkerSEPPool ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. Labels  !=  nil  {  
			
		
	
		
			
				
								 for  _ ,  v  :=  range  k8sCbC reateR eq. Labels  { 
 
			
		
	
		
			
				
						if  . Labels  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . Labels  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "labels" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. Taints  !=  nil  {  
			
		
	
		
			
				
								 for  _ ,  v  :=  range  k8sCbC reateR eq. Taints  { 
 
			
		
	
		
			
				
						if  . Taints  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . Taints  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "taints" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. Annotations  !=  nil  {  
			
		
	
		
			
				
								 for  _ ,  v  :=  range  k8sCbC reateR eq. Annotations  { 
 
			
		
	
		
			
				
						if  . Annotations  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . Annotations  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "annotations" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. MasterCPU  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "masterCpu" ,  strconv . FormatUint ( k8sCbC reateR eq. MasterCPU ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterCPU  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterCpu" ,  strconv . FormatUint ( . MasterCPU ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. MasterNum  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "masterNum" ,  strconv . FormatUint ( k8sCbC reateR eq. MasterNum ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterNum  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterNum" ,  strconv . FormatUint ( . MasterNum ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. MasterRAM  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "masterRam" ,  strconv . FormatUint ( k8sCbC reateR eq. MasterRAM ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterRAM  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterRam" ,  strconv . FormatUint ( . MasterRAM ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. MasterDisk  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "masterDisk" ,  strconv . FormatUint ( k8sCbC reateR eq. MasterDisk ,  10 ) ) 
 
			
		
	
		
			
				
						if  . MasterDisk  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "masterDisk" ,  strconv . FormatUint ( . MasterDisk ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. WorkerCPU  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "workerCpu" ,  strconv . FormatUint ( k8sCbC reateR eq. WorkerCPU ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerCPU  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerCpu" ,  strconv . FormatUint ( . WorkerCPU ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. WorkerNum  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "workerNum" ,  strconv . FormatUint ( k8sCbC reateR eq. WorkerNum ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerNum  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerNum" ,  strconv . FormatUint ( . WorkerNum ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. WorkerRAM  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "workerRam" ,  strconv . FormatUint ( k8sCbC reateR eq. WorkerRAM ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerRAM  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerRam" ,  strconv . FormatUint ( . WorkerRAM ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. WorkerDisk  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "workerDisk" ,  strconv . FormatUint ( k8sCbC reateR eq. WorkerDisk ,  10 ) ) 
 
			
		
	
		
			
				
						if  . WorkerDisk  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "workerDisk" ,  strconv . FormatUint ( . WorkerDisk ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. ExtNetID  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "extnetId" ,  strconv . FormatUint ( k8sCbC reateR eq. ExtNetID ,  10 ) ) 
 
			
		
	
		
			
				
						if  . ExtNetID  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "extnetId" ,  strconv . FormatUint ( . ExtNetID ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. VinsId  !=  0  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "vinsId" ,  strconv . FormatUint ( k8sCbC reateR eq. VinsId ,  10 ) ) 
 
			
		
	
		
			
				
						if  . VinsId  !=  0  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "vinsId" ,  strconv . FormatUint ( . VinsId ,  10 ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  ! k8sCbC reateR eq. WithLB  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "withLB" ,  strconv . FormatBool ( k8sCbC reateR eq. WithLB ) ) 
 
			
		
	
		
			
				
						if  ! . WithLB  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "withLB" ,  strconv . FormatBool ( . WithLB ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						 	_  =  writer . WriteField ( "highlyAvailableLB" ,  strconv . FormatBool ( k8sCbC reateR eq. HighlyAvailable ) )  
			
		
	
		
			
				
						_  =  writer . WriteField ( "highlyAvailableLB" ,  strconv . FormatBool ( . HighlyAvailable ) ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. AdditionalSANs  !=  nil  {  
			
		
	
		
			
				
								 for  _ ,  v  :=  range  k8sCbC reateR eq. AdditionalSANs  { 
 
			
		
	
		
			
				
						if  . AdditionalSANs  !=  nil  { 
 
			
		
	
		
			
				
							for  _ ,  v  :=  range  . AdditionalSANs  { 
 
			
		
	
		
			
				
								_  =  writer . WriteField ( "additionalSANs" ,  v ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. InitConfiguration  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "initConfiguration" ,  k8sCbC reateR eq. InitConfiguration ) 
 
			
		
	
		
			
				
						if  . InitConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "initConfiguration" ,  . InitConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. ClusterConfiguration  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "clusterConfiguration" ,  k8sCbC reateR eq. ClusterConfiguration ) 
 
			
		
	
		
			
				
						if  . ClusterConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "clusterConfiguration" ,  . ClusterConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. KubeletConfiguration  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "kubeletConfiguration" ,  k8sCbC reateR eq. KubeletConfiguration ) 
 
			
		
	
		
			
				
						if  . KubeletConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "kubeletConfiguration" ,  . KubeletConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. KubeProxyConfiguration  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "kubeProxyConfiguration" ,  k8sCbC reateR eq. KubeProxyConfiguration ) 
 
			
		
	
		
			
				
						if  . KubeProxyConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "kubeProxyConfiguration" ,  . KubeProxyConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. JoinConfiguration  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "joinConfiguration" ,  k8sCbC reateR eq. JoinConfiguration ) 
 
			
		
	
		
			
				
						if  . JoinConfiguration  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "joinConfiguration" ,  . JoinConfiguration ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. Description  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "desc" ,  k8sCbC reateR eq. Description ) 
 
			
		
	
		
			
				
						if  . Description  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "desc" ,  . Description ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						 	if  k8sCbC reateR eq. UserData  !=  ""  {  
			
		
	
		
			
				
								 _  =  writer . WriteField ( "userData" ,  k8sCbC reateR eq. UserData ) 
 
			
		
	
		
			
				
						if  . UserData  !=  ""  { 
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "userData" ,  . UserData ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							_  =  writer . WriteField ( "extnetOnly" ,  strconv . FormatBool ( k8sCbCreateReq . ExtNetOnly ) ) 
 
			
		
	
		
			
				
							_  =  writer . FormDataContentType ( ) 
 
			
		
	
		
			
				
						_  =  writer . WriteField ( "extnetOnly" ,  strconv . FormatBool ( req . ExtNetOnly ) ) 
 
			
		
	
		
			
				
						
 
			
		
	
		
			
				
						ct  :=  writer . FormDataContentType ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						writer . Close ( ) 
 
			
		
	
		
			
				
							req ,  err  :=  http . NewRequestWithContext ( ctx ,  method ,  dc . decortURL + "/restmachine" + url ,  reqBody ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							if  err  =  dc . getToken ( ctx ) ;  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							resp ,  err  :=  dc . domp ( req ,  ct ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
							defer  resp . Body . Close ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							respBytes ,  err  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  nil ,  err 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  resp . StatusCode  !=  200  { 
 
			
		
	
		
			
				
								return  nil ,  errors . New ( string ( respBytes ) ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							return  respBytes ,  nil 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						values ,  err  :=  query . Values ( params ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						body  :=  strings . NewReader ( values . Encode ( ) ) 
 
			
		
	
		
			
				
						req ,  err  :=  http . NewRequestWithContext ( ctx ,  method ,  dc . decortURL + "/restmachine" + url ,  body ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  err  =  dc . getToken ( ctx ) ;  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						resp ,  err  :=  dc . do ( req ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						defer  resp . Body . Close ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						respBytes ,  err  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
						if  err  !=  nil  { 
 
			
		
	
		
			
				
							return  nil ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  resp . StatusCode  !=  200  { 
 
			
		
	
		
			
				
							return  nil ,  errors . New ( string ( respBytes ) ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  respBytes ,  nil 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					func  ( dc  * DecortClient )  getToken ( ctx  context . Context )  error  {  
			
		
	
		
			
				
						dc . mutex . Lock ( ) 
 
			
		
	
		
			
				
						defer  dc . mutex . Unlock ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  dc . cfg . Token  ==  ""  ||  time . Now ( ) . After ( dc . expiryTime )  { 
 
			
		
	
		
			
				
							body  :=  fmt . Sprintf ( "grant_type=client_credentials&client_id=%s&client_secret=%s&response_type=id_token" ,  dc . cfg . AppID ,  dc . cfg . AppSecret ) 
 
			
		
	
		
			
				
							bodyReader  :=  strings . NewReader ( body ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							dc . cfg . SSOURL  =  strings . TrimSuffix ( dc . cfg . SSOURL ,  "/" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							req ,  _  :=  http . NewRequestWithContext ( ctx ,  "POST" ,  dc . cfg . SSOURL + "/v1/oauth/access_token" ,  bodyReader ) 
 
			
		
	
		
			
				
							req . Header . Add ( "Content-Type" ,  "application/x-www-form-urlencoded" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							resp ,  err  :=  dc . client . Do ( req ) 
 
			
		
	
		
			
				
							if  err  !=  nil  { 
 
			
		
	
		
			
				
								return  fmt . Errorf ( "cannot get token: %w" ,  err ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							tokenBytes ,  _  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
							resp . Body . Close ( ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  resp . StatusCode  !=  200  { 
 
			
		
	
		
			
				
								return  fmt . Errorf ( "cannot get token: %s" ,  tokenBytes ) 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							token  :=  string ( tokenBytes ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							dc . cfg . Token  =  token 
 
			
		
	
		
			
				
							dc . expiryTime  =  time . Now ( ) . AddDate ( 0 ,  0 ,  1 ) 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  nil 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					func  ( dc  * DecortClient )  do ( req  * http . Request )  ( * http . Response ,  error )  {  
			
		
	
		
			
				
						req . Header . Add ( "Content-Type" ,  "application/x-www-form-urlencoded" ) 
 
			
		
	
		
			
				
						req . Header . Add ( "Authorization" ,  "bearer " + dc . cfg . Token ) 
 
			
		
	
		
			
				
						req . Header . Set ( "Accept" ,  "application/json" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// var resp *http.Response
 
 
			
		
	
		
			
				
						// var err error
 
 
			
		
	
		
			
				
						buf ,  _  :=  io . ReadAll ( req . Body ) 
 
			
		
	
		
			
				
						// req = req.Clone(req.Context())
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// for i := uint64(0); i < dc.cfg.Retries; i++ {
 
 
			
		
	
		
			
				
						req . Body  =  io . NopCloser ( bytes . NewBuffer ( buf ) ) 
 
			
		
	
		
			
				
						resp ,  err  :=  dc . client . Do ( req ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// if err == nil {
 
 
			
		
	
		
			
				
						if  resp . StatusCode  ==  200  { 
 
			
		
	
		
			
				
							return  resp ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						respBytes ,  _  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
						err  =  fmt . Errorf ( "%s" ,  respBytes ) 
 
			
		
	
		
			
				
						resp . Body . Close ( ) 
 
			
		
	
		
			
				
						// }
 
 
			
		
	
		
			
				
						// }
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  nil ,  fmt . Errorf ( "could not execute request: %w" ,  err ) 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					func  ( dc  * DecortClient )  domp ( req  * http . Request ,  ctype  string )  ( * http . Response ,  error )  {  
			
		
	
		
			
				
						req . Header . Add ( "Content-Type" ,  ctype ) 
 
			
		
	
		
			
				
						req . Header . Add ( "Authorization" ,  "bearer " + dc . cfg . Token ) 
 
			
		
	
		
			
				
						req . Header . Set ( "Accept" ,  "application/json" ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// var resp *http.Response
 
 
			
		
	
		
			
				
						// var err error
 
 
			
		
	
		
			
				
						buf ,  _  :=  io . ReadAll ( req . Body ) 
 
			
		
	
		
			
				
						// req = req.Clone(req.Context())
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// for i := uint64(0); i < dc.cfg.Retries; i++ {
 
 
			
		
	
		
			
				
						req . Body  =  io . NopCloser ( bytes . NewBuffer ( buf ) ) 
 
			
		
	
		
			
				
						resp ,  err  :=  dc . client . Do ( req ) 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						// if err == nil {
 
 
			
		
	
		
			
				
						if  resp . StatusCode  ==  200  { 
 
			
		
	
		
			
				
							return  resp ,  err 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						respBytes ,  _  :=  io . ReadAll ( resp . Body ) 
 
			
		
	
		
			
				
						err  =  fmt . Errorf ( "%s" ,  respBytes ) 
 
			
		
	
		
			
				
						resp . Body . Close ( ) 
 
			
		
	
		
			
				
						// }
 
 
			
		
	
		
			
				
						// }
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						return  nil ,  fmt . Errorf ( "could not execute request: %w" ,  err ) 
 
			
		
	
		
			
				
						return  reqBody ,  ct 
 
			
		
	
		
			
				
					}