github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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 }