github.com/kyma-project/kyma-environment-broker@v0.0.1/common/deprovision/client.go (about)

     1  package deprovision
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"time"
     7  
     8  	"github.com/sirupsen/logrus"
     9  	"golang.org/x/oauth2/clientcredentials"
    10  )
    11  
    12  const defaultPageSize = 100
    13  
    14  // Client is the interface to interact with the KEB /deprovision API as an HTTP client using OIDC ID token in JWT format.
    15  type Client interface {
    16  	DeprovisionRuntime(params DeprovisionParameters) error
    17  }
    18  
    19  type DeprovisionClient struct {
    20  	log    logrus.FieldLogger
    21  	URL    string
    22  	client *http.Client
    23  }
    24  
    25  func NewDeprovisionClient(parameters DeprovisionParameters) *DeprovisionClient {
    26  	cfg := clientcredentials.Config{
    27  		ClientID:     parameters.Oauth2ClientID,
    28  		ClientSecret: parameters.Oauth2ClientSecret,
    29  		TokenURL:     parameters.Oauth2IssuerURL,
    30  		Scopes:       parameters.Scopes,
    31  		AuthStyle:    parameters.AuthStyle,
    32  	}
    33  	httpClientOAuth := cfg.Client(parameters.Context)
    34  	httpClientOAuth.Timeout = 30 * time.Second
    35  
    36  	return &DeprovisionClient{
    37  		log:    logrus.WithField("client", "deprovision"),
    38  		URL:    parameters.EndpointURL,
    39  		client: httpClientOAuth,
    40  	}
    41  }
    42  
    43  func (c DeprovisionClient) DeprovisionRuntime(instanceID string) error {
    44  	logrus.Info("DeprovisionRuntime is called")
    45  	url := c.URL + "/oauth/v2/service_instances/" +
    46  		instanceID + "?accepts_incomplete=true&service_id=faebbe18-0a84-11e5-ab14-d663bd873d97&plan_id=0c712d43-b1e6-470s-9fe5-8e1d552aa6a5"
    47  
    48  	logrus.Infof("url: %s", url)
    49  	request, err := http.NewRequest("DELETE", url, nil)
    50  	if err != nil {
    51  		return fmt.Errorf("while creating the HTTP Delete request for deprovisioning: %w", err)
    52  	}
    53  	request.Header.Set("X-Broker-API-Version", "2.14")
    54  
    55  	response, err := c.client.Do(request)
    56  	if err != nil {
    57  		return fmt.Errorf("while calling %s: %w", request.URL.String(), err)
    58  	}
    59  
    60  	cerr := response.Body.Close()
    61  	if err == nil {
    62  		err = cerr
    63  	}
    64  
    65  	if response.StatusCode != http.StatusOK {
    66  		return fmt.Errorf("calling %s returned %d (%s) status", request.URL.String(), response.StatusCode, response.Status)
    67  	}
    68  	logrus.Infof("Deprovisioning request returned code: " + response.Status)
    69  	c.log.Infof("Deprovisioning request returned code: " + response.Status)
    70  
    71  	return err
    72  }