github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/cf/api/repository_locator.go (about)

     1  package api
     2  
     3  import (
     4  	"crypto/tls"
     5  	"net/http"
     6  	"strconv"
     7  	"time"
     8  
     9  	"code.cloudfoundry.org/cli/cf/api/appevents"
    10  	api_appfiles "code.cloudfoundry.org/cli/cf/api/appfiles"
    11  	"code.cloudfoundry.org/cli/cf/api/appinstances"
    12  	"code.cloudfoundry.org/cli/cf/api/applicationbits"
    13  	"code.cloudfoundry.org/cli/cf/api/applications"
    14  	"code.cloudfoundry.org/cli/cf/api/authentication"
    15  	"code.cloudfoundry.org/cli/cf/api/copyapplicationsource"
    16  	"code.cloudfoundry.org/cli/cf/api/environmentvariablegroups"
    17  	"code.cloudfoundry.org/cli/cf/api/featureflags"
    18  	"code.cloudfoundry.org/cli/cf/api/logs"
    19  	"code.cloudfoundry.org/cli/cf/api/organizations"
    20  	"code.cloudfoundry.org/cli/cf/api/password"
    21  	"code.cloudfoundry.org/cli/cf/api/quotas"
    22  	"code.cloudfoundry.org/cli/cf/api/securitygroups"
    23  	"code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/running"
    24  	"code.cloudfoundry.org/cli/cf/api/securitygroups/defaults/staging"
    25  	securitygroupspaces "code.cloudfoundry.org/cli/cf/api/securitygroups/spaces"
    26  	"code.cloudfoundry.org/cli/cf/api/spacequotas"
    27  	"code.cloudfoundry.org/cli/cf/api/spaces"
    28  	"code.cloudfoundry.org/cli/cf/api/stacks"
    29  	"code.cloudfoundry.org/cli/cf/appfiles"
    30  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
    31  	"code.cloudfoundry.org/cli/cf/net"
    32  	"code.cloudfoundry.org/cli/cf/terminal"
    33  	"code.cloudfoundry.org/cli/cf/trace"
    34  	"github.com/cloudfoundry/noaa/consumer"
    35  )
    36  
    37  type RepositoryLocator struct {
    38  	authRepo                        authentication.Repository
    39  	curlRepo                        CurlRepository
    40  	endpointRepo                    coreconfig.EndpointRepository
    41  	organizationRepo                organizations.OrganizationRepository
    42  	quotaRepo                       quotas.QuotaRepository
    43  	spaceRepo                       spaces.SpaceRepository
    44  	appRepo                         applications.Repository
    45  	appBitsRepo                     applicationbits.CloudControllerApplicationBitsRepository
    46  	appSummaryRepo                  AppSummaryRepository
    47  	appInstancesRepo                appinstances.Repository
    48  	appEventsRepo                   appevents.Repository
    49  	appFilesRepo                    api_appfiles.Repository
    50  	domainRepo                      DomainRepository
    51  	routeRepo                       RouteRepository
    52  	routingAPIRepo                  RoutingAPIRepository
    53  	stackRepo                       stacks.StackRepository
    54  	serviceRepo                     ServiceRepository
    55  	serviceKeyRepo                  ServiceKeyRepository
    56  	serviceBindingRepo              ServiceBindingRepository
    57  	routeServiceBindingRepo         RouteServiceBindingRepository
    58  	serviceSummaryRepo              ServiceSummaryRepository
    59  	userRepo                        UserRepository
    60  	passwordRepo                    password.Repository
    61  	logsRepo                        logs.Repository
    62  	authTokenRepo                   ServiceAuthTokenRepository
    63  	serviceBrokerRepo               ServiceBrokerRepository
    64  	servicePlanRepo                 CloudControllerServicePlanRepository
    65  	servicePlanVisibilityRepo       ServicePlanVisibilityRepository
    66  	userProvidedServiceInstanceRepo UserProvidedServiceInstanceRepository
    67  	buildpackRepo                   BuildpackRepository
    68  	buildpackBitsRepo               BuildpackBitsRepository
    69  	securityGroupRepo               securitygroups.SecurityGroupRepo
    70  	stagingSecurityGroupRepo        staging.SecurityGroupsRepo
    71  	runningSecurityGroupRepo        running.SecurityGroupsRepo
    72  	securityGroupSpaceBinder        securitygroupspaces.SecurityGroupSpaceBinder
    73  	spaceQuotaRepo                  spacequotas.SpaceQuotaRepository
    74  	featureFlagRepo                 featureflags.FeatureFlagRepository
    75  	environmentVariableGroupRepo    environmentvariablegroups.Repository
    76  	copyAppSourceRepo               copyapplicationsource.Repository
    77  }
    78  
    79  const noaaRetryDefaultTimeout = 5 * time.Second
    80  
    81  func NewRepositoryLocator(config coreconfig.ReadWriter, gatewaysByName map[string]net.Gateway, logger trace.Printer, envDialTimeout string) (loc RepositoryLocator) {
    82  	cloudControllerGateway := gatewaysByName["cloud-controller"]
    83  	routingAPIGateway := gatewaysByName["routing-api"]
    84  	uaaGateway := gatewaysByName["uaa"]
    85  	loc.authRepo = authentication.NewUAARepository(uaaGateway, config, net.NewRequestDumper(logger))
    86  
    87  	// ensure gateway refreshers are set before passing them by value to repositories
    88  	cloudControllerGateway.SetTokenRefresher(loc.authRepo)
    89  	uaaGateway.SetTokenRefresher(loc.authRepo)
    90  
    91  	loc.appBitsRepo = applicationbits.NewCloudControllerApplicationBitsRepository(config, cloudControllerGateway)
    92  	loc.appEventsRepo = appevents.NewCloudControllerAppEventsRepository(config, cloudControllerGateway)
    93  	loc.appFilesRepo = api_appfiles.NewCloudControllerAppFilesRepository(config, cloudControllerGateway)
    94  	loc.appRepo = applications.NewCloudControllerRepository(config, cloudControllerGateway)
    95  	loc.appSummaryRepo = NewCloudControllerAppSummaryRepository(config, cloudControllerGateway)
    96  	loc.appInstancesRepo = appinstances.NewCloudControllerAppInstancesRepository(config, cloudControllerGateway)
    97  	loc.authTokenRepo = NewCloudControllerServiceAuthTokenRepository(config, cloudControllerGateway)
    98  	loc.curlRepo = NewCloudControllerCurlRepository(config, cloudControllerGateway)
    99  	loc.domainRepo = NewCloudControllerDomainRepository(config, cloudControllerGateway)
   100  	loc.endpointRepo = NewEndpointRepository(cloudControllerGateway)
   101  
   102  	tlsConfig := net.NewTLSConfig([]tls.Certificate{}, config.IsSSLDisabled())
   103  
   104  	var noaaRetryTimeout time.Duration
   105  	convertedTime, err := strconv.Atoi(envDialTimeout)
   106  	if err != nil {
   107  		noaaRetryTimeout = noaaRetryDefaultTimeout
   108  	} else {
   109  		noaaRetryTimeout = time.Duration(convertedTime) * 3 * time.Second
   110  	}
   111  
   112  	consumer := consumer.New(config.DopplerEndpoint(), tlsConfig, http.ProxyFromEnvironment)
   113  	consumer.SetDebugPrinter(terminal.DebugPrinter{Logger: logger})
   114  	loc.logsRepo = logs.NewNoaaLogsRepository(config, consumer, loc.authRepo, noaaRetryTimeout)
   115  
   116  	loc.organizationRepo = organizations.NewCloudControllerOrganizationRepository(config, cloudControllerGateway)
   117  	loc.passwordRepo = password.NewCloudControllerRepository(config, uaaGateway)
   118  	loc.quotaRepo = quotas.NewCloudControllerQuotaRepository(config, cloudControllerGateway)
   119  	loc.routeRepo = NewCloudControllerRouteRepository(config, cloudControllerGateway)
   120  	loc.routeServiceBindingRepo = NewCloudControllerRouteServiceBindingRepository(config, cloudControllerGateway)
   121  	loc.routingAPIRepo = NewRoutingAPIRepository(config, routingAPIGateway)
   122  	loc.stackRepo = stacks.NewCloudControllerStackRepository(config, cloudControllerGateway)
   123  	loc.serviceRepo = NewCloudControllerServiceRepository(config, cloudControllerGateway)
   124  	loc.serviceKeyRepo = NewCloudControllerServiceKeyRepository(config, cloudControllerGateway)
   125  	loc.serviceBindingRepo = NewCloudControllerServiceBindingRepository(config, cloudControllerGateway)
   126  	loc.serviceBrokerRepo = NewCloudControllerServiceBrokerRepository(config, cloudControllerGateway)
   127  	loc.servicePlanRepo = NewCloudControllerServicePlanRepository(config, cloudControllerGateway)
   128  	loc.servicePlanVisibilityRepo = NewCloudControllerServicePlanVisibilityRepository(config, cloudControllerGateway)
   129  	loc.serviceSummaryRepo = NewCloudControllerServiceSummaryRepository(config, cloudControllerGateway)
   130  	loc.spaceRepo = spaces.NewCloudControllerSpaceRepository(config, cloudControllerGateway)
   131  	loc.userProvidedServiceInstanceRepo = NewCCUserProvidedServiceInstanceRepository(config, cloudControllerGateway)
   132  	loc.userRepo = NewCloudControllerUserRepository(config, uaaGateway, cloudControllerGateway)
   133  	loc.buildpackRepo = NewCloudControllerBuildpackRepository(config, cloudControllerGateway)
   134  	loc.buildpackBitsRepo = NewCloudControllerBuildpackBitsRepository(config, cloudControllerGateway, appfiles.ApplicationZipper{})
   135  	loc.securityGroupRepo = securitygroups.NewSecurityGroupRepo(config, cloudControllerGateway)
   136  	loc.stagingSecurityGroupRepo = staging.NewSecurityGroupsRepo(config, cloudControllerGateway)
   137  	loc.runningSecurityGroupRepo = running.NewSecurityGroupsRepo(config, cloudControllerGateway)
   138  	loc.securityGroupSpaceBinder = securitygroupspaces.NewSecurityGroupSpaceBinder(config, cloudControllerGateway)
   139  	loc.spaceQuotaRepo = spacequotas.NewCloudControllerSpaceQuotaRepository(config, cloudControllerGateway)
   140  	loc.featureFlagRepo = featureflags.NewCloudControllerFeatureFlagRepository(config, cloudControllerGateway)
   141  	loc.environmentVariableGroupRepo = environmentvariablegroups.NewCloudControllerRepository(config, cloudControllerGateway)
   142  	loc.copyAppSourceRepo = copyapplicationsource.NewCloudControllerCopyApplicationSourceRepository(config, cloudControllerGateway)
   143  
   144  	return
   145  }
   146  
   147  func (locator RepositoryLocator) SetAuthenticationRepository(repo authentication.Repository) RepositoryLocator {
   148  	locator.authRepo = repo
   149  	return locator
   150  }
   151  
   152  func (locator RepositoryLocator) GetAuthenticationRepository() authentication.Repository {
   153  	return locator.authRepo
   154  }
   155  
   156  func (locator RepositoryLocator) SetCurlRepository(repo CurlRepository) RepositoryLocator {
   157  	locator.curlRepo = repo
   158  	return locator
   159  }
   160  
   161  func (locator RepositoryLocator) GetCurlRepository() CurlRepository {
   162  	return locator.curlRepo
   163  }
   164  
   165  func (locator RepositoryLocator) GetEndpointRepository() coreconfig.EndpointRepository {
   166  	return locator.endpointRepo
   167  }
   168  
   169  func (locator RepositoryLocator) SetEndpointRepository(e coreconfig.EndpointRepository) RepositoryLocator {
   170  	locator.endpointRepo = e
   171  	return locator
   172  }
   173  
   174  func (locator RepositoryLocator) SetOrganizationRepository(repo organizations.OrganizationRepository) RepositoryLocator {
   175  	locator.organizationRepo = repo
   176  	return locator
   177  }
   178  
   179  func (locator RepositoryLocator) GetOrganizationRepository() organizations.OrganizationRepository {
   180  	return locator.organizationRepo
   181  }
   182  
   183  func (locator RepositoryLocator) SetQuotaRepository(repo quotas.QuotaRepository) RepositoryLocator {
   184  	locator.quotaRepo = repo
   185  	return locator
   186  }
   187  
   188  func (locator RepositoryLocator) GetQuotaRepository() quotas.QuotaRepository {
   189  	return locator.quotaRepo
   190  }
   191  
   192  func (locator RepositoryLocator) SetSpaceRepository(repo spaces.SpaceRepository) RepositoryLocator {
   193  	locator.spaceRepo = repo
   194  	return locator
   195  }
   196  
   197  func (locator RepositoryLocator) GetSpaceRepository() spaces.SpaceRepository {
   198  	return locator.spaceRepo
   199  }
   200  
   201  func (locator RepositoryLocator) SetApplicationRepository(repo applications.Repository) RepositoryLocator {
   202  	locator.appRepo = repo
   203  	return locator
   204  }
   205  
   206  func (locator RepositoryLocator) GetApplicationRepository() applications.Repository {
   207  	return locator.appRepo
   208  }
   209  
   210  func (locator RepositoryLocator) GetApplicationBitsRepository() applicationbits.Repository {
   211  	return locator.appBitsRepo
   212  }
   213  
   214  func (locator RepositoryLocator) SetAppSummaryRepository(repo AppSummaryRepository) RepositoryLocator {
   215  	locator.appSummaryRepo = repo
   216  	return locator
   217  }
   218  
   219  func (locator RepositoryLocator) SetUserRepository(repo UserRepository) RepositoryLocator {
   220  	locator.userRepo = repo
   221  	return locator
   222  }
   223  
   224  func (locator RepositoryLocator) GetAppSummaryRepository() AppSummaryRepository {
   225  	return locator.appSummaryRepo
   226  }
   227  
   228  func (locator RepositoryLocator) SetAppInstancesRepository(repo appinstances.Repository) RepositoryLocator {
   229  	locator.appInstancesRepo = repo
   230  	return locator
   231  }
   232  
   233  func (locator RepositoryLocator) GetAppInstancesRepository() appinstances.Repository {
   234  	return locator.appInstancesRepo
   235  }
   236  
   237  func (locator RepositoryLocator) SetAppEventsRepository(repo appevents.Repository) RepositoryLocator {
   238  	locator.appEventsRepo = repo
   239  	return locator
   240  }
   241  
   242  func (locator RepositoryLocator) GetAppEventsRepository() appevents.Repository {
   243  	return locator.appEventsRepo
   244  }
   245  
   246  func (locator RepositoryLocator) SetAppFileRepository(repo api_appfiles.Repository) RepositoryLocator {
   247  	locator.appFilesRepo = repo
   248  	return locator
   249  }
   250  
   251  func (locator RepositoryLocator) GetAppFilesRepository() api_appfiles.Repository {
   252  	return locator.appFilesRepo
   253  }
   254  
   255  func (locator RepositoryLocator) SetDomainRepository(repo DomainRepository) RepositoryLocator {
   256  	locator.domainRepo = repo
   257  	return locator
   258  }
   259  
   260  func (locator RepositoryLocator) GetDomainRepository() DomainRepository {
   261  	return locator.domainRepo
   262  }
   263  
   264  func (locator RepositoryLocator) SetRouteRepository(repo RouteRepository) RepositoryLocator {
   265  	locator.routeRepo = repo
   266  	return locator
   267  }
   268  
   269  func (locator RepositoryLocator) GetRoutingAPIRepository() RoutingAPIRepository {
   270  	return locator.routingAPIRepo
   271  }
   272  
   273  func (locator RepositoryLocator) SetRoutingAPIRepository(repo RoutingAPIRepository) RepositoryLocator {
   274  	locator.routingAPIRepo = repo
   275  	return locator
   276  }
   277  
   278  func (locator RepositoryLocator) GetRouteRepository() RouteRepository {
   279  	return locator.routeRepo
   280  }
   281  
   282  func (locator RepositoryLocator) SetStackRepository(repo stacks.StackRepository) RepositoryLocator {
   283  	locator.stackRepo = repo
   284  	return locator
   285  }
   286  
   287  func (locator RepositoryLocator) GetStackRepository() stacks.StackRepository {
   288  	return locator.stackRepo
   289  }
   290  
   291  func (locator RepositoryLocator) SetServiceRepository(repo ServiceRepository) RepositoryLocator {
   292  	locator.serviceRepo = repo
   293  	return locator
   294  }
   295  
   296  func (locator RepositoryLocator) GetServiceRepository() ServiceRepository {
   297  	return locator.serviceRepo
   298  }
   299  
   300  func (locator RepositoryLocator) SetServiceKeyRepository(repo ServiceKeyRepository) RepositoryLocator {
   301  	locator.serviceKeyRepo = repo
   302  	return locator
   303  }
   304  
   305  func (locator RepositoryLocator) GetServiceKeyRepository() ServiceKeyRepository {
   306  	return locator.serviceKeyRepo
   307  }
   308  
   309  func (locator RepositoryLocator) SetRouteServiceBindingRepository(repo RouteServiceBindingRepository) RepositoryLocator {
   310  	locator.routeServiceBindingRepo = repo
   311  	return locator
   312  }
   313  
   314  func (locator RepositoryLocator) GetRouteServiceBindingRepository() RouteServiceBindingRepository {
   315  	return locator.routeServiceBindingRepo
   316  }
   317  
   318  func (locator RepositoryLocator) SetServiceBindingRepository(repo ServiceBindingRepository) RepositoryLocator {
   319  	locator.serviceBindingRepo = repo
   320  	return locator
   321  }
   322  
   323  func (locator RepositoryLocator) GetServiceBindingRepository() ServiceBindingRepository {
   324  	return locator.serviceBindingRepo
   325  }
   326  
   327  func (locator RepositoryLocator) GetServiceSummaryRepository() ServiceSummaryRepository {
   328  	return locator.serviceSummaryRepo
   329  }
   330  func (locator RepositoryLocator) SetServiceSummaryRepository(repo ServiceSummaryRepository) RepositoryLocator {
   331  	locator.serviceSummaryRepo = repo
   332  	return locator
   333  }
   334  
   335  func (locator RepositoryLocator) GetUserRepository() UserRepository {
   336  	return locator.userRepo
   337  }
   338  
   339  func (locator RepositoryLocator) SetPasswordRepository(repo password.Repository) RepositoryLocator {
   340  	locator.passwordRepo = repo
   341  	return locator
   342  }
   343  
   344  func (locator RepositoryLocator) GetPasswordRepository() password.Repository {
   345  	return locator.passwordRepo
   346  }
   347  
   348  func (locator RepositoryLocator) SetLogsRepository(repo logs.Repository) RepositoryLocator {
   349  	locator.logsRepo = repo
   350  	return locator
   351  }
   352  
   353  func (locator RepositoryLocator) GetLogsRepository() logs.Repository {
   354  	return locator.logsRepo
   355  }
   356  
   357  func (locator RepositoryLocator) SetServiceAuthTokenRepository(repo ServiceAuthTokenRepository) RepositoryLocator {
   358  	locator.authTokenRepo = repo
   359  	return locator
   360  }
   361  
   362  func (locator RepositoryLocator) GetServiceAuthTokenRepository() ServiceAuthTokenRepository {
   363  	return locator.authTokenRepo
   364  }
   365  
   366  func (locator RepositoryLocator) SetServiceBrokerRepository(repo ServiceBrokerRepository) RepositoryLocator {
   367  	locator.serviceBrokerRepo = repo
   368  	return locator
   369  }
   370  
   371  func (locator RepositoryLocator) GetServiceBrokerRepository() ServiceBrokerRepository {
   372  	return locator.serviceBrokerRepo
   373  }
   374  
   375  func (locator RepositoryLocator) GetServicePlanRepository() ServicePlanRepository {
   376  	return locator.servicePlanRepo
   377  }
   378  
   379  func (locator RepositoryLocator) SetUserProvidedServiceInstanceRepository(repo UserProvidedServiceInstanceRepository) RepositoryLocator {
   380  	locator.userProvidedServiceInstanceRepo = repo
   381  	return locator
   382  }
   383  
   384  func (locator RepositoryLocator) GetUserProvidedServiceInstanceRepository() UserProvidedServiceInstanceRepository {
   385  	return locator.userProvidedServiceInstanceRepo
   386  }
   387  
   388  func (locator RepositoryLocator) SetBuildpackRepository(repo BuildpackRepository) RepositoryLocator {
   389  	locator.buildpackRepo = repo
   390  	return locator
   391  }
   392  
   393  func (locator RepositoryLocator) GetBuildpackRepository() BuildpackRepository {
   394  	return locator.buildpackRepo
   395  }
   396  
   397  func (locator RepositoryLocator) SetBuildpackBitsRepository(repo BuildpackBitsRepository) RepositoryLocator {
   398  	locator.buildpackBitsRepo = repo
   399  	return locator
   400  }
   401  
   402  func (locator RepositoryLocator) GetBuildpackBitsRepository() BuildpackBitsRepository {
   403  	return locator.buildpackBitsRepo
   404  }
   405  
   406  func (locator RepositoryLocator) SetSecurityGroupRepository(repo securitygroups.SecurityGroupRepo) RepositoryLocator {
   407  	locator.securityGroupRepo = repo
   408  	return locator
   409  }
   410  
   411  func (locator RepositoryLocator) GetSecurityGroupRepository() securitygroups.SecurityGroupRepo {
   412  	return locator.securityGroupRepo
   413  }
   414  
   415  func (locator RepositoryLocator) SetStagingSecurityGroupRepository(repo staging.SecurityGroupsRepo) RepositoryLocator {
   416  	locator.stagingSecurityGroupRepo = repo
   417  	return locator
   418  }
   419  
   420  func (locator RepositoryLocator) GetStagingSecurityGroupsRepository() staging.SecurityGroupsRepo {
   421  	return locator.stagingSecurityGroupRepo
   422  }
   423  
   424  func (locator RepositoryLocator) SetRunningSecurityGroupRepository(repo running.SecurityGroupsRepo) RepositoryLocator {
   425  	locator.runningSecurityGroupRepo = repo
   426  	return locator
   427  }
   428  
   429  func (locator RepositoryLocator) GetRunningSecurityGroupsRepository() running.SecurityGroupsRepo {
   430  	return locator.runningSecurityGroupRepo
   431  }
   432  
   433  func (locator RepositoryLocator) SetSecurityGroupSpaceBinder(repo securitygroupspaces.SecurityGroupSpaceBinder) RepositoryLocator {
   434  	locator.securityGroupSpaceBinder = repo
   435  	return locator
   436  }
   437  
   438  func (locator RepositoryLocator) GetSecurityGroupSpaceBinder() securitygroupspaces.SecurityGroupSpaceBinder {
   439  	return locator.securityGroupSpaceBinder
   440  }
   441  
   442  func (locator RepositoryLocator) GetServicePlanVisibilityRepository() ServicePlanVisibilityRepository {
   443  	return locator.servicePlanVisibilityRepo
   444  }
   445  
   446  func (locator RepositoryLocator) GetSpaceQuotaRepository() spacequotas.SpaceQuotaRepository {
   447  	return locator.spaceQuotaRepo
   448  }
   449  
   450  func (locator RepositoryLocator) SetSpaceQuotaRepository(repo spacequotas.SpaceQuotaRepository) RepositoryLocator {
   451  	locator.spaceQuotaRepo = repo
   452  	return locator
   453  }
   454  
   455  func (locator RepositoryLocator) SetFeatureFlagRepository(repo featureflags.FeatureFlagRepository) RepositoryLocator {
   456  	locator.featureFlagRepo = repo
   457  	return locator
   458  }
   459  
   460  func (locator RepositoryLocator) GetFeatureFlagRepository() featureflags.FeatureFlagRepository {
   461  	return locator.featureFlagRepo
   462  }
   463  
   464  func (locator RepositoryLocator) SetEnvironmentVariableGroupsRepository(repo environmentvariablegroups.Repository) RepositoryLocator {
   465  	locator.environmentVariableGroupRepo = repo
   466  	return locator
   467  }
   468  
   469  func (locator RepositoryLocator) GetEnvironmentVariableGroupsRepository() environmentvariablegroups.Repository {
   470  	return locator.environmentVariableGroupRepo
   471  }
   472  
   473  func (locator RepositoryLocator) SetCopyApplicationSourceRepository(repo copyapplicationsource.Repository) RepositoryLocator {
   474  	locator.copyAppSourceRepo = repo
   475  	return locator
   476  }
   477  
   478  func (locator RepositoryLocator) GetCopyApplicationSourceRepository() copyapplicationsource.Repository {
   479  	return locator.copyAppSourceRepo
   480  }