Skip to content

Commit ce49269

Browse files
Regine UrtegårdRegine Urtegård
Regine Urtegård
authored and
Regine Urtegård
committed
Add firebase storage options
1 parent 25dfab6 commit ce49269

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-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

+21
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,29 @@
1717
package com.google.firebase.cloud;
1818

1919
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertNotSame;
2021
import static org.junit.Assert.assertNull;
22+
import static org.junit.Assert.assertSame;
2123
import static org.junit.Assert.assertTrue;
2224
import static org.junit.Assert.fail;
2325

26+
import com.google.auth.oauth2.GoogleCredentials;
27+
import com.google.cloud.firestore.Firestore;
2428
import com.google.cloud.storage.Blob;
2529
import com.google.cloud.storage.Bucket;
30+
import com.google.cloud.storage.Storage;
31+
import com.google.cloud.storage.StorageOptions;
2632
import com.google.common.io.CharStreams;
33+
import com.google.firebase.FirebaseApp;
34+
import com.google.firebase.FirebaseOptions;
2735
import com.google.firebase.testing.IntegrationTestUtils;
2836
import java.io.IOException;
2937
import java.io.InputStream;
3038
import java.io.InputStreamReader;
3139
import java.net.URL;
3240
import java.util.concurrent.TimeUnit;
41+
42+
import com.google.firebase.testing.ServiceAccount;
3343
import org.junit.Test;
3444

3545
public class StorageClientIT {
@@ -88,4 +98,15 @@ private Blob createTextBlob(Bucket bucket, String contents) {
8898
return bucket.create(fileName, contents.getBytes(), "text/plain");
8999
}
90100

101+
@Test
102+
public void testStorageOptions() throws IOException {
103+
Storage storage = StorageOptions.newBuilder()
104+
.setCredentials(GoogleCredentials.fromStream(ServiceAccount.EDITOR.asStream()))
105+
.setProjectId("explicit-project-id")
106+
.setHost("explicit-host")
107+
.build().getService();
108+
assertEquals("explicit-project-id", storage.getOptions().getProjectId());
109+
assertEquals("explicit-host", storage.getOptions().getHost());
110+
}
111+
91112
}

0 commit comments

Comments
 (0)