Skip to content

Commit 44b1f0a

Browse files
committed
Add StorageOptions to FirebaseOptions
1 parent 25dfab6 commit 44b1f0a

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

src/main/java/com/google/firebase/FirebaseOptions.java

+16
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.api.client.util.Key;
2525
import com.google.auth.oauth2.GoogleCredentials;
2626
import com.google.cloud.firestore.FirestoreOptions;
27+
import com.google.cloud.storage.StorageOptions;
2728
import com.google.common.base.Strings;
2829
import com.google.common.base.Supplier;
2930
import com.google.common.base.Suppliers;
@@ -86,6 +87,8 @@ public GoogleCredentials get() {
8687
private final ThreadManager threadManager;
8788
private final FirestoreOptions firestoreOptions;
8889

90+
private final StorageOptions storageOptions;
91+
8992
private FirebaseOptions(@NonNull final FirebaseOptions.Builder builder) {
9093
this.databaseUrl = builder.databaseUrl;
9194
this.credentialsSupplier = checkNotNull(
@@ -113,6 +116,7 @@ private FirebaseOptions(@NonNull final FirebaseOptions.Builder builder) {
113116
checkArgument(builder.readTimeout >= 0);
114117
this.readTimeout = builder.readTimeout;
115118
this.firestoreOptions = builder.firestoreOptions;
119+
this.storageOptions = builder.storageOptions;
116120
}
117121

118122
/**
@@ -216,6 +220,10 @@ FirestoreOptions getFirestoreOptions() {
216220
return firestoreOptions;
217221
}
218222

223+
public StorageOptions getStorageOptions() {
224+
return storageOptions;
225+
}
226+
219227
/**
220228
* Creates an empty builder.
221229
*
@@ -251,6 +259,8 @@ public static final class Builder {
251259
@Key("storageBucket")
252260
private String storageBucket;
253261

262+
private StorageOptions storageOptions;
263+
254264
@Key("serviceAccountId")
255265
private String serviceAccountId;
256266
private Supplier<GoogleCredentials> credentialsSupplier;
@@ -290,6 +300,7 @@ public Builder(FirebaseOptions options) {
290300
connectTimeout = options.connectTimeout;
291301
readTimeout = options.readTimeout;
292302
firestoreOptions = options.firestoreOptions;
303+
storageOptions = options.storageOptions;
293304
}
294305

295306
/**
@@ -495,6 +506,11 @@ public Builder setReadTimeout(int readTimeout) {
495506
return this;
496507
}
497508

509+
public Builder setStorageOptions(StorageOptions storageOptions) {
510+
this.storageOptions = storageOptions;
511+
return this;
512+
}
513+
498514
/**
499515
* Builds the {@link FirebaseOptions} instance from the previously set options.
500516
*

src/main/java/com/google/firebase/cloud/StorageClient.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.common.base.Preconditions.checkArgument;
2020
import static com.google.common.base.Preconditions.checkNotNull;
2121

22+
import com.google.cloud.firestore.FirestoreOptions;
2223
import com.google.cloud.storage.Bucket;
2324
import com.google.cloud.storage.Storage;
2425
import com.google.cloud.storage.StorageOptions;
@@ -46,6 +47,9 @@ public class StorageClient {
4647
StorageClient(FirebaseApp app, Storage storage) {
4748
this.app = checkNotNull(app, "FirebaseApp must not be null");
4849
this.storage = checkNotNull(storage, "Storage must not be null");
50+
51+
StorageOptions userOptions = app.getOptions().getStorageOptions();
52+
4953
}
5054

5155
public static StorageClient getInstance() {
@@ -56,7 +60,10 @@ public static synchronized StorageClient getInstance(FirebaseApp app) {
5660
StorageClientService service = ImplFirebaseTrampolines.getService(app, SERVICE_ID,
5761
StorageClientService.class);
5862
if (service == null) {
59-
Storage storage = StorageOptions.newBuilder()
63+
StorageOptions userOptions = app.getOptions().getStorageOptions();
64+
StorageOptions.Builder builder = userOptions != null ? userOptions.toBuilder() :
65+
StorageOptions.newBuilder();
66+
Storage storage = builder
6067
.setCredentials(ImplFirebaseTrampolines.getCredentials(app))
6168
.build()
6269
.getService();

src/test/java/com/google/firebase/cloud/StorageClientIT.java

+15
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@
2121
import static org.junit.Assert.assertTrue;
2222
import static org.junit.Assert.fail;
2323

24+
import com.google.auth.oauth2.GoogleCredentials;
2425
import com.google.cloud.storage.Blob;
2526
import com.google.cloud.storage.Bucket;
27+
import com.google.cloud.storage.Storage;
28+
import com.google.cloud.storage.StorageOptions;
2629
import com.google.common.io.CharStreams;
2730
import com.google.firebase.testing.IntegrationTestUtils;
31+
import com.google.firebase.testing.ServiceAccount;
2832
import java.io.IOException;
2933
import java.io.InputStream;
3034
import java.io.InputStreamReader;
@@ -88,4 +92,15 @@ private Blob createTextBlob(Bucket bucket, String contents) {
8892
return bucket.create(fileName, contents.getBytes(), "text/plain");
8993
}
9094

95+
@Test
96+
public void testStorageOptions() throws IOException {
97+
Storage storage = StorageOptions.newBuilder()
98+
.setCredentials(GoogleCredentials.fromStream(ServiceAccount.EDITOR.asStream()))
99+
.setProjectId("explicit-project-id")
100+
.setHost("explicit-host")
101+
.build().getService();
102+
assertEquals("explicit-project-id", storage.getOptions().getProjectId());
103+
assertEquals("explicit-host", storage.getOptions().getHost());
104+
}
105+
91106
}

0 commit comments

Comments
 (0)