diff --git a/firebase.json b/firebase.json new file mode 100644 index 00000000..da12533e --- /dev/null +++ b/firebase.json @@ -0,0 +1,27 @@ +{ + "functions": { + "source": "functions" + }, + "emulators": { + "auth": { + "port": 9099 + }, + "firestore": { + "port": 8080 + }, + "storage": { + "port": 9199 + }, + "ui": { + "enabled": true + }, + "singleProjectMode": true + }, + "firestore": { + "rules": "firestore.rules", + "indexes": "firestore.indexes.json" + }, + "storage": { + "rules": "storage.rules" + } +} diff --git a/firestore.indexes.json b/firestore.indexes.json new file mode 100644 index 00000000..49e69244 --- /dev/null +++ b/firestore.indexes.json @@ -0,0 +1,19 @@ +{ + "indexes": [ + { + "collectionGroup": "scenes", + "queryScope": "COLLECTION", + "fields": [ + { + "fieldPath": "author", + "order": "ASCENDING" + }, + { + "fieldPath": "updateTimestamp", + "order": "DESCENDING" + } + ] + } + ], + "fieldOverrides": [] +} diff --git a/firestore.rules b/firestore.rules new file mode 100644 index 00000000..b4eb7949 --- /dev/null +++ b/firestore.rules @@ -0,0 +1,8 @@ +rules_version = '2'; +service cloud.firestore { + match /databases/{database}/documents { + match /{document=**} { + allow read, write: if request.auth != null; + } + } +} diff --git a/src/services/firebase.js b/src/services/firebase.js index c6a7f864..8b6e4489 100644 --- a/src/services/firebase.js +++ b/src/services/firebase.js @@ -1,7 +1,7 @@ import { initializeApp } from 'firebase/app'; import { getAuth } from 'firebase/auth'; import { getStorage } from 'firebase/storage'; -import { getFirestore } from 'firebase/firestore'; +import { connectFirestoreEmulator, getFirestore } from 'firebase/firestore'; const firebaseConfig = { apiKey: process.env.FIREBASE_API_KEY, @@ -18,4 +18,13 @@ const auth = getAuth(app); const storage = getStorage(app); const db = getFirestore(app); +const isLocalhostAndMissingFirebaseEnv = + window.location.hostname === 'localhost' && + (!process.env.FIREBASE_PROJECT_ID || !process.env.FIREBASE_API_KEY); + +if (isLocalhostAndMissingFirebaseEnv) { + console.log('Using Firestore Emulator'); + connectFirestoreEmulator(db, 'localhost', 8080); +} + export { auth, storage, db }; diff --git a/storage.rules b/storage.rules new file mode 100644 index 00000000..8863e61a --- /dev/null +++ b/storage.rules @@ -0,0 +1,9 @@ +rules_version = '2'; + +service firebase.storage { + match /b/{bucket}/o { + match /{allPaths=**} { + allow read, write: if false; + } + } +} diff --git a/ui-debug.log b/ui-debug.log new file mode 100644 index 00000000..edaaf3e0 --- /dev/null +++ b/ui-debug.log @@ -0,0 +1,2 @@ +Web / API server started at 127.0.0.1:4000 +Web / API server started at ::1:4000