github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/shared/new_clients.go (about)

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