github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/shared/new_clients.go (about)

     1  package shared
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     5  	ccWrapper "code.cloudfoundry.org/cli/api/cloudcontroller/wrapper"
     6  	"code.cloudfoundry.org/cli/api/router"
     7  	routerWrapper "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 NewRouterClient(config command.Config, ui command.UI, uaaClient *uaa.Client) (*router.Client, error) {
    15  	routerConfig := router.Config{
    16  		AppName:    config.BinaryName(),
    17  		AppVersion: config.BinaryVersion(),
    18  		ConnectionConfig: router.ConnectionConfig{
    19  			DialTimeout:       config.DialTimeout(),
    20  			SkipSSLValidation: config.SkipSSLValidation(),
    21  		},
    22  		RoutingEndpoint: config.RoutingEndpoint(),
    23  	}
    24  
    25  	routerWrappers := []router.ConnectionWrapper{}
    26  
    27  	verbose, location := config.Verbose()
    28  
    29  	if verbose {
    30  		routerWrappers = append(routerWrappers, routerWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    31  	}
    32  
    33  	if location != nil {
    34  		routerWrappers = append(routerWrappers, routerWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    35  	}
    36  
    37  	authWrapper := routerWrapper.NewUAAAuthentication(uaaClient, config)
    38  	errorWrapper := routerWrapper.NewErrorWrapper()
    39  
    40  	routerWrappers = append(routerWrappers, authWrapper, errorWrapper)
    41  	routerConfig.Wrappers = routerWrappers
    42  
    43  	routerClient := router.NewClient(routerConfig)
    44  	return routerClient, nil
    45  }
    46  
    47  func GetNewClientsAndConnectToCF(config command.Config, ui command.UI) (*ccv2.Client, *uaa.Client, error) {
    48  	var err error
    49  
    50  	ccClient, authWrapper := NewWrappedCloudControllerClient(config, ui)
    51  
    52  	ccClient, err = connectToCF(config, ui, ccClient)
    53  	if err != nil {
    54  		return nil, nil, err
    55  	}
    56  	uaaClient, err := newWrappedUAAClient(config, ui, ccClient, authWrapper)
    57  
    58  	return ccClient, uaaClient, err
    59  }
    60  
    61  func NewWrappedCloudControllerClient(config command.Config, ui command.UI) (*ccv2.Client, *ccWrapper.UAAAuthentication) {
    62  	ccWrappers := []ccv2.ConnectionWrapper{}
    63  
    64  	verbose, location := config.Verbose()
    65  	if verbose {
    66  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    67  	}
    68  
    69  	if location != nil {
    70  		ccWrappers = append(ccWrappers, ccWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    71  	}
    72  
    73  	authWrapper := ccWrapper.NewUAAAuthentication(nil, config)
    74  
    75  	ccWrappers = append(ccWrappers, authWrapper)
    76  	ccWrappers = append(ccWrappers, ccWrapper.NewRetryRequest(config.RequestRetryCount()))
    77  
    78  	ccClient := ccv2.NewClient(ccv2.Config{
    79  		AppName:            config.BinaryName(),
    80  		AppVersion:         config.BinaryVersion(),
    81  		JobPollingTimeout:  config.OverallPollingTimeout(),
    82  		JobPollingInterval: config.PollingInterval(),
    83  		Wrappers:           ccWrappers,
    84  	})
    85  	return ccClient, authWrapper
    86  }
    87  
    88  func newWrappedUAAClient(config command.Config, ui command.UI, ccClient *ccv2.Client, authWrapper *ccWrapper.UAAAuthentication) (*uaa.Client, error) {
    89  	var err error
    90  	verbose, location := config.Verbose()
    91  
    92  	uaaClient := uaa.NewClient(config)
    93  
    94  	if verbose {
    95  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerTerminalDisplay()))
    96  	}
    97  	if location != nil {
    98  		uaaClient.WrapConnection(uaaWrapper.NewRequestLogger(ui.RequestLoggerFileWriter(location)))
    99  	}
   100  
   101  	uaaAuthWrapper := uaaWrapper.NewUAAAuthentication(nil, config)
   102  	uaaClient.WrapConnection(uaaAuthWrapper)
   103  	uaaClient.WrapConnection(uaaWrapper.NewRetryRequest(config.RequestRetryCount()))
   104  
   105  	err = uaaClient.SetupResources(ccClient.AuthorizationEndpoint())
   106  	if err != nil {
   107  		return nil, err
   108  	}
   109  	uaaAuthWrapper.SetClient(uaaClient)
   110  	authWrapper.SetClient(uaaClient)
   111  
   112  	return uaaClient, nil
   113  }
   114  
   115  func connectToCF(config command.Config, ui command.UI, ccClient *ccv2.Client) (*ccv2.Client, error) {
   116  	if config.Target() == "" {
   117  		return nil, translatableerror.NoAPISetError{
   118  			BinaryName: config.BinaryName(),
   119  		}
   120  	}
   121  
   122  	_, err := ccClient.TargetCF(ccv2.TargetSettings{
   123  		URL:               config.Target(),
   124  		SkipSSLValidation: config.SkipSSLValidation(),
   125  		DialTimeout:       config.DialTimeout(),
   126  	})
   127  	if err != nil {
   128  		return nil, err
   129  	}
   130  	if err = command.WarnIfAPIVersionBelowSupportedMinimum(ccClient.APIVersion(), ui); err != nil {
   131  		return nil, err
   132  	}
   133  	if ccClient.AuthorizationEndpoint() == "" {
   134  		return nil, translatableerror.AuthorizationEndpointNotFoundError{}
   135  	}
   136  
   137  	return ccClient, err
   138  }