CredentialFactory getInstanceCredentialFactory()

in core/src/main/java/com/google/cloud/sql/core/CredentialFactoryProvider.java [64:97]


  CredentialFactory getInstanceCredentialFactory(ConnectorConfig config) {

    CredentialFactory instanceCredentialFactory;
    if (config.getGoogleCredentialsSupplier() != null) {
      instanceCredentialFactory =
          new SupplierCredentialFactory(config.getGoogleCredentialsSupplier());
    } else if (config.getGoogleCredentials() != null) {
      instanceCredentialFactory = new ConstantCredentialFactory(config.getGoogleCredentials());
    } else if (config.getGoogleCredentialsPath() != null) {
      instanceCredentialFactory = new FileCredentialFactory(config.getGoogleCredentialsPath());
    } else {
      instanceCredentialFactory = getDefaultCredentialFactory();
    }

    // Validate targetPrincipal and delegates
    if (config.getTargetPrincipal() == null
        && config.getDelegates() != null
        && !config.getDelegates().isEmpty()) {
      throw new IllegalArgumentException(
          String.format(
              "Connection property %s must be when %s is set.",
              ConnectionConfig.CLOUD_SQL_TARGET_PRINCIPAL_PROPERTY,
              ConnectionConfig.CLOUD_SQL_DELEGATES_PROPERTY));
    }

    // If targetPrincipal and delegates are set, then
    if (config.getTargetPrincipal() != null && !config.getTargetPrincipal().isEmpty()) {
      instanceCredentialFactory =
          new ServiceAccountImpersonatingCredentialFactory(
              instanceCredentialFactory, config.getTargetPrincipal(), config.getDelegates());
    }

    return instanceCredentialFactory;
  }