code: func NewURLProvider(ctx context.Context, config *configuration.Registry, osioclient OpenshiftIOClient) (kubernetes.BaseURLProvider, error) {
  
  	userServices, err := osioclient.GetUserServices(ctx)
  	if err != nil {
  		log.Error(ctx, map[string]interface{}{
  			"err": err,
  		}, "error accessing Tenant API")
  		return nil, err
  	}
  
  	token := goajwt.ContextJWT(ctx).Raw
  	proxyURL := config.GetOpenshiftProxyURL()
  
  	up, err := newTenantURLProviderFromTenant(userServices, token, proxyURL)
  	if err != nil {
  		return nil, err
  	}
  
  	// create Auth API client - required to get OSO tokens
  	authClient, err := auth.CreateClient(ctx, config)
  	if err != nil {
  		log.Error(ctx, map[string]interface{}{
  			"err": err,
  		}, "error accessing Auth server")
  		return nil, errs.Wrap(err, "error creating Auth client")
  	}
  	up.TokenRetriever = &tokenRetriever{
  		authClient: authClient,
  		context:    ctx,
  	}
  
  	// if we're not using a proxy then the API URL is actually the cluster of namespace 0,
  	// so the apiToken should be the token for that cluster.
  	// there should be no defaults, but that's deferred later
  	if len(proxyURL) == 0 {
  		tokenData, err := up.TokenForService(up.apiURL)
  		if err != nil {
  			return nil, err
  		}
  		up.apiToken = *tokenData
  	}
  	return up, nil
  }
docs: // NewURLProvider looks at what servers are available and create a BaseURLProvder that fits