github.com/orange-cloudfoundry/cli@v7.1.0+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/router"
     7  	routingWrapper "code.cloudfoundry.org/cli/api/router/wrapper"
     8  	"code.cloudfoundry.org/cli/api/uaa"
     9  	uaaWrapper "code.cloudfoundry.org/cli/api/uaa/wrapper"
    10  	"code.cloudfoundry.org/cli/command"
    11  	"code.cloudfoundry.org/cli/command/translatableerror"
    12  )
    13  
    14  func GetNewClientsAndConnectToCF(config command.Config, ui command.UI, minVersionV3 string) (*ccv3.Client, *uaa.Client, *router.Client, error) {
    15  	var err error
    16  
    17  	ccClient, authWrapper := NewWrappedCloudControllerClient(config, ui)
    18  
    19  	ccClient, err = connectToCF(config, ui, ccClient, minVersionV3)
    20  	if err != nil {
    21  		return nil, nil, nil, err
    22  	}
    23  
    24  	uaaClient, err := newWrappedUAAClient(config, ui, ccClient, authWrapper)
    25  	if err != nil {
    26  		return nil, nil, nil, err
    27  	}
    28  
    29  	routingClient, err := newWrappedRoutingClient(config, ui, uaaClient)
    30  
    31  	return ccClient, uaaClient, routingClient, err
    32  }
    33  
    34  func NewWrappedCloudControllerClient(config command.Config, ui command.UI) (*ccv3.Client, *ccWrapper.UAAAuthentication) {
    35  	ccWrappers := []ccv3.ConnectionWrapper{}
    36  
    37  	verbose, location := config.Verbose()
    38  	if verbose {
    39  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    40  	}
    41  	if location != nil {
    42  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    43  	}
    44  
    45  	authWrapper := ccWrapper.NewUAAAuthentication(nil, config)
    46  
    47  	ccWrappers = append(ccWrappers, authWrapper)
    48  	ccWrappers = append(ccWrappers, ccWrapper.NewRetryRequest(config.RequestRetryCount()))
    49  
    50  	ccClient := ccv3.NewClient(ccv3.Config{
    51  		AppName:            config.BinaryName(),
    52  		AppVersion:         config.BinaryVersion(),
    53  		JobPollingTimeout:  config.OverallPollingTimeout(),
    54  		JobPollingInterval: config.PollingInterval(),
    55  		Wrappers:           ccWrappers,
    56  	})
    57  	return ccClient, authWrapper
    58  }
    59  
    60  func newWrappedUAAClient(config command.Config, ui command.UI, ccClient *ccv3.Client, authWrapper *ccWrapper.UAAAuthentication) (*uaa.Client, error) {
    61  	var err error
    62  	verbose, location := config.Verbose()
    63  
    64  	uaaClient := uaa.NewClient(config)
    65  	if verbose {
    66  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    67  	}
    68  	if location != nil {
    69  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    70  	}
    71  
    72  	uaaAuthWrapper := uaaWrapper.NewUAAAuthentication(uaaClient, config)
    73  	uaaClient.WrapConnection(uaaAuthWrapper)
    74  	uaaClient.WrapConnection(uaaWrapper.NewRetryRequest(config.RequestRetryCount()))
    75  
    76  	err = uaaClient.SetupResources(ccClient.Login())
    77  	if err != nil {
    78  		return nil, err
    79  	}
    80  
    81  	uaaAuthWrapper.SetClient(uaaClient)
    82  	authWrapper.SetClient(uaaClient)
    83  
    84  	return uaaClient, nil
    85  }
    86  
    87  func newWrappedRoutingClient(config command.Config, ui command.UI, uaaClient *uaa.Client) (*router.Client, error) {
    88  	routingConfig := router.Config{
    89  		AppName:    config.BinaryName(),
    90  		AppVersion: config.BinaryVersion(),
    91  		ConnectionConfig: router.ConnectionConfig{
    92  			DialTimeout:       config.DialTimeout(),
    93  			SkipSSLValidation: config.SkipSSLValidation(),
    94  		},
    95  		RoutingEndpoint: config.RoutingEndpoint(),
    96  	}
    97  
    98  	routingWrappers := []router.ConnectionWrapper{routingWrapper.NewErrorWrapper()}
    99  
   100  	verbose, location := config.Verbose()
   101  
   102  	if verbose {
   103  		routingWrappers = append(routingWrappers, routingWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
   104  	}
   105  
   106  	if location != nil {
   107  		routingWrappers = append(routingWrappers, routingWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
   108  	}
   109  
   110  	authWrapper := routingWrapper.NewUAAAuthentication(uaaClient, config)
   111  
   112  	routingWrappers = append(routingWrappers, authWrapper)
   113  	routingConfig.Wrappers = routingWrappers
   114  
   115  	routingClient := router.NewClient(routingConfig)
   116  
   117  	return routingClient, nil
   118  }
   119  
   120  func connectToCF(config command.Config, ui command.UI, ccClient *ccv3.Client, minVersionV3 string) (*ccv3.Client, error) {
   121  	if config.Target() == "" {
   122  		return nil, translatableerror.NoAPISetError{
   123  			BinaryName: config.BinaryName(),
   124  		}
   125  	}
   126  
   127  	_, _, err := ccClient.TargetCF(ccv3.TargetSettings{
   128  		URL:               config.Target(),
   129  		SkipSSLValidation: config.SkipSSLValidation(),
   130  		DialTimeout:       config.DialTimeout(),
   131  	})
   132  	if err != nil {
   133  		return nil, err
   134  	}
   135  
   136  	if minVersionV3 != "" {
   137  		err = command.MinimumCCAPIVersionCheck(ccClient.CloudControllerAPIVersion(), minVersionV3)
   138  		if err != nil {
   139  			if _, ok := err.(translatableerror.MinimumCFAPIVersionNotMetError); ok {
   140  				return nil, translatableerror.V3V2SwitchError{}
   141  			}
   142  			return nil, err
   143  		}
   144  	}
   145  	return ccClient, nil
   146  }