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 }