github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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  func GetNewClientsAndConnectToCF(config command.Config, ui command.UI, minVersionV3 string) (*ccv3.Client, *uaa.Client, error) {
    13  	var err error
    14  
    15  	ccClient, authWrapper := NewWrappedCloudControllerClient(config, ui)
    16  
    17  	ccClient, err = connectToCF(config, ui, ccClient, minVersionV3)
    18  	if err != nil {
    19  		return nil, nil, err
    20  	}
    21  	uaaClient, err := newWrappedUAAClient(config, ui, ccClient, authWrapper)
    22  
    23  	return ccClient, uaaClient, err
    24  }
    25  
    26  func NewWrappedCloudControllerClient(config command.Config, ui command.UI) (*ccv3.Client, *ccWrapper.UAAAuthentication) {
    27  	ccWrappers := []ccv3.ConnectionWrapper{}
    28  
    29  	verbose, location := config.Verbose()
    30  	if verbose {
    31  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    32  	}
    33  	if location != nil {
    34  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    35  	}
    36  
    37  	authWrapper := ccWrapper.NewUAAAuthentication(nil, config)
    38  
    39  	ccWrappers = append(ccWrappers, authWrapper)
    40  	ccWrappers = append(ccWrappers, ccWrapper.NewRetryRequest(config.RequestRetryCount()))
    41  
    42  	ccClient := ccv3.NewClient(ccv3.Config{
    43  		AppName:            config.BinaryName(),
    44  		AppVersion:         config.BinaryVersion(),
    45  		JobPollingTimeout:  config.OverallPollingTimeout(),
    46  		JobPollingInterval: config.PollingInterval(),
    47  		Wrappers:           ccWrappers,
    48  	})
    49  	return ccClient, authWrapper
    50  }
    51  
    52  func newWrappedUAAClient(config command.Config, ui command.UI, ccClient *ccv3.Client, authWrapper *ccWrapper.UAAAuthentication) (*uaa.Client, error) {
    53  	var err error
    54  	verbose, location := config.Verbose()
    55  
    56  	uaaClient := uaa.NewClient(config)
    57  	if verbose {
    58  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    59  	}
    60  	if location != nil {
    61  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    62  	}
    63  
    64  	uaaAuthWrapper := uaaWrapper.NewUAAAuthentication(uaaClient, config)
    65  	uaaClient.WrapConnection(uaaAuthWrapper)
    66  	uaaClient.WrapConnection(uaaWrapper.NewRetryRequest(config.RequestRetryCount()))
    67  
    68  	err = uaaClient.SetupResources(ccClient.UAA())
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  
    73  	uaaAuthWrapper.SetClient(uaaClient)
    74  	authWrapper.SetClient(uaaClient)
    75  
    76  	return uaaClient, nil
    77  }
    78  
    79  func connectToCF(config command.Config, ui command.UI, ccClient *ccv3.Client, minVersionV3 string) (*ccv3.Client, error) {
    80  	if config.Target() == "" {
    81  		return nil, translatableerror.NoAPISetError{
    82  			BinaryName: config.BinaryName(),
    83  		}
    84  	}
    85  
    86  	_, err := ccClient.TargetCF(ccv3.TargetSettings{
    87  		URL:               config.Target(),
    88  		SkipSSLValidation: config.SkipSSLValidation(),
    89  		DialTimeout:       config.DialTimeout(),
    90  	})
    91  	if err != nil {
    92  		return nil, err
    93  	}
    94  
    95  	if minVersionV3 != "" {
    96  		err = command.MinimumCCAPIVersionCheck(ccClient.CloudControllerAPIVersion(), minVersionV3)
    97  		if err != nil {
    98  			if _, ok := err.(translatableerror.MinimumCFAPIVersionNotMetError); ok {
    99  				return nil, translatableerror.V3V2SwitchError{}
   100  			}
   101  			return nil, err
   102  		}
   103  	}
   104  	return ccClient, nil
   105  }