use of com.google.api.gax.rpc.internal.QuotaProjectIdHidingCredentials in project gax-java by googleapis.
the class ClientContext method create.
/**
* Instantiates the executor, credentials, and transport context based on the given client
* settings.
*/
public static ClientContext create(StubSettings settings) throws IOException {
ApiClock clock = settings.getClock();
ExecutorProvider backgroundExecutorProvider = settings.getBackgroundExecutorProvider();
final ScheduledExecutorService backgroundExecutor = backgroundExecutorProvider.getExecutor();
Credentials credentials = settings.getCredentialsProvider().getCredentials();
if (settings.getQuotaProjectId() != null) {
// If the quotaProjectId is set, wrap original credentials with correct quotaProjectId as
// QuotaProjectIdHidingCredentials.
// Ensure that a custom set quota project id takes priority over one detected by credentials.
// Avoid the backend receiving possibly conflict values of quotaProjectId
credentials = new QuotaProjectIdHidingCredentials(credentials);
}
TransportChannelProvider transportChannelProvider = settings.getTransportChannelProvider();
// will have a default executor if it needs one.
if (transportChannelProvider.needsExecutor() && settings.getExecutorProvider() != null) {
transportChannelProvider = transportChannelProvider.withExecutor(backgroundExecutor);
}
Map<String, String> headers = getHeadersFromSettings(settings);
if (transportChannelProvider.needsHeaders()) {
transportChannelProvider = transportChannelProvider.withHeaders(headers);
}
if (transportChannelProvider.needsCredentials() && credentials != null) {
transportChannelProvider = transportChannelProvider.withCredentials(credentials);
}
String endpoint = getEndpoint(settings.getEndpoint(), settings.getMtlsEndpoint(), settings.getSwitchToMtlsEndpointAllowed(), new MtlsProvider());
if (transportChannelProvider.needsEndpoint()) {
transportChannelProvider = transportChannelProvider.withEndpoint(endpoint);
}
TransportChannel transportChannel = transportChannelProvider.getTransportChannel();
ApiCallContext defaultCallContext = transportChannel.getEmptyCallContext().withTransportChannel(transportChannel);
if (credentials != null) {
defaultCallContext = defaultCallContext.withCredentials(credentials);
}
WatchdogProvider watchdogProvider = settings.getStreamWatchdogProvider();
@Nullable Watchdog watchdog = null;
if (watchdogProvider != null) {
if (watchdogProvider.needsCheckInterval()) {
watchdogProvider = watchdogProvider.withCheckInterval(settings.getStreamWatchdogCheckInterval());
}
if (watchdogProvider.needsClock()) {
watchdogProvider = watchdogProvider.withClock(clock);
}
if (watchdogProvider.needsExecutor()) {
watchdogProvider = watchdogProvider.withExecutor(backgroundExecutor);
}
watchdog = watchdogProvider.getWatchdog();
}
ImmutableList.Builder<BackgroundResource> backgroundResources = ImmutableList.builder();
if (transportChannelProvider.shouldAutoClose()) {
backgroundResources.add(transportChannel);
}
if (backgroundExecutorProvider.shouldAutoClose()) {
backgroundResources.add(new ExecutorAsBackgroundResource(backgroundExecutor));
}
if (watchdogProvider != null && watchdogProvider.shouldAutoClose()) {
backgroundResources.add(watchdog);
}
return newBuilder().setBackgroundResources(backgroundResources.build()).setExecutor(backgroundExecutor).setCredentials(credentials).setTransportChannel(transportChannel).setHeaders(ImmutableMap.copyOf(settings.getHeaderProvider().getHeaders())).setInternalHeaders(ImmutableMap.copyOf(settings.getInternalHeaderProvider().getHeaders())).setClock(clock).setDefaultCallContext(defaultCallContext).setEndpoint(settings.getEndpoint()).setQuotaProjectId(settings.getQuotaProjectId()).setStreamWatchdog(watchdog).setStreamWatchdogCheckInterval(settings.getStreamWatchdogCheckInterval()).setTracerFactory(settings.getTracerFactory()).build();
}
use of com.google.api.gax.rpc.internal.QuotaProjectIdHidingCredentials in project java-storage-nio by googleapis.
the class CloudStorageFileSystemTest method ensureMultipleInstancesDoNotCorruptCredentials.
// port of test from
// https://github.com/broadinstitute/cromwell/pull/6491/files#diff-758dbbe823e71cc26fee7bc89cd5c434dfb76e604d51005b8327db59aab96068R300-R336
@Test
public void ensureMultipleInstancesDoNotCorruptCredentials() throws Exception {
CloudStorageConfiguration config = CloudStorageConfiguration.builder().permitEmptyPathComponents(true).stripPrefixSlash(true).usePseudoDirectories(true).build();
Credentials noCredentials = NoCredentials.getInstance();
Credentials saCredentials = new QuotaProjectIdHidingCredentials(noCredentials);
StorageOptions noOptions = StorageOptions.newBuilder().setProjectId("public-project").setCredentials(noCredentials).build();
StorageOptions saOptions = StorageOptions.newBuilder().setProjectId("private-project").setCredentials(saCredentials).build();
CloudStorageFileSystem noFs = CloudStorageFileSystem.forBucket("public-bucket", config, noOptions);
CloudStorageFileSystem saFs = CloudStorageFileSystem.forBucket("private-bucket", config, saOptions);
CloudStoragePath noPath = noFs.getPath("public-file");
CloudStoragePath saPath = saFs.getPath("private-file");
assertThat(credentialsForPath(noPath)).isEqualTo(noCredentials);
assertThat(credentialsForPath(saPath)).isEqualTo(saCredentials);
}
Aggregations