github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/v7/shared/new_clients.go (about)

     1  package shared
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     5  	ccWrapper "code.cloudfoundry.org/cli/api/cloudcontroller/wrapper"
     6  	"code.cloudfoundry.org/cli/api/uaa"
     7  	uaaWrapper "code.cloudfoundry.org/cli/api/uaa/wrapper"
     8  	"code.cloudfoundry.org/cli/command"
     9  	"code.cloudfoundry.org/cli/command/translatableerror"
    10  )
    11  
    12  // NewClients creates a new V3 Cloud Controller client and UAA client using the
    13  // passed in config.
    14  func NewClients(config command.Config, ui command.UI, targetCF bool, minVersionV3 string) (*ccv3.Client, *uaa.Client, error) {
    15  	ccWrappers := []ccv3.ConnectionWrapper{}
    16  
    17  	verbose, location := config.Verbose()
    18  	if verbose {
    19  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    20  	}
    21  	if location != nil {
    22  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    23  	}
    24  
    25  	authWrapper := ccWrapper.NewUAAAuthentication(nil, config)
    26  
    27  	ccWrappers = append(ccWrappers, authWrapper)
    28  	ccWrappers = append(ccWrappers, ccWrapper.NewRetryRequest(config.RequestRetryCount()))
    29  
    30  	ccClient := ccv3.NewClient(ccv3.Config{
    31  		AppName:            config.BinaryName(),
    32  		AppVersion:         config.BinaryVersion(),
    33  		JobPollingTimeout:  config.OverallPollingTimeout(),
    34  		JobPollingInterval: config.PollingInterval(),
    35  		Wrappers:           ccWrappers,
    36  	})
    37  
    38  	if !targetCF {
    39  		return ccClient, nil, nil
    40  	}
    41  
    42  	if config.Target() == "" {
    43  		return nil, nil, translatableerror.NoAPISetError{
    44  			BinaryName: config.BinaryName(),
    45  		}
    46  	}
    47  
    48  	_, err := ccClient.TargetCF(ccv3.TargetSettings{
    49  		URL:               config.Target(),
    50  		SkipSSLValidation: config.SkipSSLValidation(),
    51  		DialTimeout:       config.DialTimeout(),
    52  	})
    53  	if err != nil {
    54  		return nil, nil, err
    55  	}
    56  
    57  	if minVersionV3 != "" {
    58  		err = command.MinimumCCAPIVersionCheck(ccClient.CloudControllerAPIVersion(), minVersionV3)
    59  		if err != nil {
    60  			if _, ok := err.(translatableerror.MinimumCFAPIVersionNotMetError); ok {
    61  				return nil, nil, translatableerror.V3V2SwitchError{}
    62  			}
    63  			return nil, nil, err
    64  		}
    65  	}
    66  
    67  	if ccClient.UAA() == "" {
    68  		return nil, nil, translatableerror.UAAEndpointNotFoundError{}
    69  	}
    70  
    71  	uaaClient := uaa.NewClient(config)
    72  
    73  	if verbose {
    74  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    75  	}
    76  	if location != nil {
    77  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    78  	}
    79  
    80  	uaaAuthWrapper := uaaWrapper.NewUAAAuthentication(uaaClient, config)
    81  	uaaClient.WrapConnection(uaaAuthWrapper)
    82  	uaaClient.WrapConnection(uaaWrapper.NewRetryRequest(config.RequestRetryCount()))
    83  
    84  	err = uaaClient.SetupResources(ccClient.UAA())
    85  	if err != nil {
    86  		return nil, nil, err
    87  	}
    88  
    89  	uaaAuthWrapper.SetClient(uaaClient)
    90  	authWrapper.SetClient(uaaClient)
    91  
    92  	return ccClient, uaaClient, nil
    93  }