github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/v3/shared/new_clients.go (about)

     1  package shared
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     8  	ccWrapper "code.cloudfoundry.org/cli/api/cloudcontroller/wrapper"
     9  	"code.cloudfoundry.org/cli/api/uaa"
    10  	uaaWrapper "code.cloudfoundry.org/cli/api/uaa/wrapper"
    11  	"code.cloudfoundry.org/cli/command"
    12  )
    13  
    14  // NewClients creates a new V3 Cloud Controller client and UAA client using the
    15  // passed in config.
    16  func NewClients(config command.Config, ui command.UI, targetCF bool) (*ccv3.Client, *uaa.Client, error) {
    17  	ccWrappers := []ccv3.ConnectionWrapper{}
    18  
    19  	verbose, location := config.Verbose()
    20  	if verbose {
    21  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    22  	}
    23  	if location != nil {
    24  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    25  	}
    26  
    27  	authWrapper := ccWrapper.NewUAAAuthentication(nil, config)
    28  
    29  	ccWrappers = append(ccWrappers, authWrapper)
    30  	ccWrappers = append(ccWrappers, ccWrapper.NewRetryRequest(2))
    31  
    32  	ccClient := ccv3.NewClient(ccv3.Config{
    33  		AppName:    config.BinaryName(),
    34  		AppVersion: config.BinaryVersion(),
    35  		Wrappers:   ccWrappers,
    36  	})
    37  
    38  	if !targetCF {
    39  		return ccClient, nil, nil
    40  	}
    41  
    42  	if config.Target() == "" {
    43  		return nil, nil, command.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  		if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound {
    55  			return nil, nil, V3APIDoesNotExistError{Message: err.Error()}
    56  		}
    57  
    58  		return nil, nil, HandleError(err)
    59  	}
    60  
    61  	uaaClient := uaa.NewClient(uaa.Config{
    62  		AppName:           config.BinaryName(),
    63  		AppVersion:        config.BinaryVersion(),
    64  		ClientID:          config.UAAOAuthClient(),
    65  		ClientSecret:      config.UAAOAuthClientSecret(),
    66  		DialTimeout:       config.DialTimeout(),
    67  		SkipSSLValidation: config.SkipSSLValidation(),
    68  		URL:               ccClient.UAA(),
    69  	})
    70  
    71  	if verbose {
    72  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    73  	}
    74  	if location != nil {
    75  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    76  	}
    77  
    78  	uaaClient.WrapConnection(uaaWrapper.NewUAAAuthentication(uaaClient, config))
    79  	uaaClient.WrapConnection(uaaWrapper.NewRetryRequest(2))
    80  
    81  	authWrapper.SetClient(uaaClient)
    82  
    83  	return ccClient, uaaClient, nil
    84  }