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 }