Merge user security changes
Browse files- .gitignore +5 -37
- firebase_manager.py +23 -8
.gitignore
CHANGED
|
@@ -1,40 +1,8 @@
|
|
| 1 |
-
# Python
|
| 2 |
__pycache__/
|
| 3 |
-
*.
|
| 4 |
-
*
|
| 5 |
-
.
|
| 6 |
-
.venv_fix/
|
| 7 |
-
venv/
|
| 8 |
-
env/
|
| 9 |
-
ENV/
|
| 10 |
-
|
| 11 |
-
# OS
|
| 12 |
-
.DS_Store
|
| 13 |
-
Thumbs.db
|
| 14 |
-
desktop.ini
|
| 15 |
-
|
| 16 |
-
# Logs
|
| 17 |
-
*.log
|
| 18 |
-
server.log
|
| 19 |
-
|
| 20 |
-
# Credentials
|
| 21 |
.env
|
| 22 |
-
serviceAccountKey_dev.json
|
| 23 |
-
.google-credentials.json
|
| 24 |
-
|
| 25 |
-
# Backups
|
| 26 |
-
*.bak
|
| 27 |
-
|
| 28 |
-
# Models & Large Binaries (Unused)
|
| 29 |
-
phonikud-1.0.int8.onnx
|
| 30 |
-
|
| 31 |
-
# Temporary / Cache
|
| 32 |
-
.pytest_cache/
|
| 33 |
-
test_results/
|
| 34 |
-
temp/
|
| 35 |
-
tmp/
|
| 36 |
output_locus.txt
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
*.wav
|
| 40 |
-
!welcome_speech_fixed.wav
|
|
|
|
|
|
|
| 1 |
__pycache__/
|
| 2 |
+
*.pyc
|
| 3 |
+
*.pyo
|
| 4 |
+
serviceAccountKey*.json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
.env
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
output_locus.txt
|
| 7 |
+
*.log
|
| 8 |
+
.DS_Store
|
|
|
|
|
|
firebase_manager.py
CHANGED
|
@@ -25,22 +25,37 @@ class FirebaseManager:
|
|
| 25 |
"""Initialize Firebase Admin SDK with service account."""
|
| 26 |
try:
|
| 27 |
from config import FIREBASE_CREDENTIALS_PATH, STORAGE_BUCKET, IS_PRODUCTION
|
| 28 |
-
|
| 29 |
-
cred_path = FIREBASE_CREDENTIALS_PATH
|
| 30 |
-
|
| 31 |
-
if not os.path.exists(cred_path):
|
| 32 |
-
logger.warning(f"MISSING: [FIREBASE] Missing credentials at {cred_path}. Audio/Storage will fail!")
|
| 33 |
-
return
|
| 34 |
|
| 35 |
if not firebase_admin._apps:
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
firebase_admin.initialize_app(cred, {
|
| 38 |
'storageBucket': STORAGE_BUCKET
|
| 39 |
})
|
| 40 |
logger.info(f"SUCCESS: [FIREBASE] Initialized successfully for {'PROD' if IS_PRODUCTION else 'DEV'}.")
|
| 41 |
|
| 42 |
self._bucket = storage.bucket()
|
| 43 |
-
|
| 44 |
except Exception as e:
|
| 45 |
logger.error(f"ERROR: [FIREBASE] Initialization failed: {e}")
|
| 46 |
|
|
|
|
| 25 |
"""Initialize Firebase Admin SDK with service account."""
|
| 26 |
try:
|
| 27 |
from config import FIREBASE_CREDENTIALS_PATH, STORAGE_BUCKET, IS_PRODUCTION
|
| 28 |
+
import json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
if not firebase_admin._apps:
|
| 31 |
+
cred_dict = None
|
| 32 |
+
|
| 33 |
+
# Try loading from environment variable first (for HF Secrets)
|
| 34 |
+
env_creds = os.environ.get("FIREBASE_CREDENTIALS_JSON")
|
| 35 |
+
if env_creds:
|
| 36 |
+
try:
|
| 37 |
+
cred_dict = json.loads(env_creds)
|
| 38 |
+
logger.info("INFO: [FIREBASE] Loading credentials from environment variable.")
|
| 39 |
+
except Exception as e:
|
| 40 |
+
logger.error(f"ERROR: [FIREBASE] Failed to parse FIREBASE_CREDENTIALS_JSON: {e}")
|
| 41 |
+
|
| 42 |
+
# Fallback to file if environment variable not set or failed
|
| 43 |
+
if not cred_dict:
|
| 44 |
+
if os.path.exists(FIREBASE_CREDENTIALS_PATH):
|
| 45 |
+
with open(FIREBASE_CREDENTIALS_PATH, "r", encoding="utf-8") as f:
|
| 46 |
+
cred_dict = json.load(f)
|
| 47 |
+
logger.info(f"INFO: [FIREBASE] Loading credentials from {FIREBASE_CREDENTIALS_PATH}.")
|
| 48 |
+
else:
|
| 49 |
+
logger.warning(f"MISSING: [FIREBASE] Missing credentials at {FIREBASE_CREDENTIALS_PATH} and env var unset.")
|
| 50 |
+
return
|
| 51 |
+
|
| 52 |
+
cred = credentials.Certificate(cred_dict)
|
| 53 |
firebase_admin.initialize_app(cred, {
|
| 54 |
'storageBucket': STORAGE_BUCKET
|
| 55 |
})
|
| 56 |
logger.info(f"SUCCESS: [FIREBASE] Initialized successfully for {'PROD' if IS_PRODUCTION else 'DEV'}.")
|
| 57 |
|
| 58 |
self._bucket = storage.bucket()
|
|
|
|
| 59 |
except Exception as e:
|
| 60 |
logger.error(f"ERROR: [FIREBASE] Initialization failed: {e}")
|
| 61 |
|