From 6f836db65f1654c21dafbba78a7d50a4f2912912 Mon Sep 17 00:00:00 2001 From: Maxime Alza Date: Mon, 29 Jul 2024 14:22:50 +0200 Subject: [PATCH 1/2] Create function to initialize firebase --- .../backend/cleanup/index.js | 40 ++++++++++++++----- .../backend/cleanup/package.json | 3 +- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/translation-app-assessment/backend/cleanup/index.js b/translation-app-assessment/backend/cleanup/index.js index 03b01e3..d1c6599 100644 --- a/translation-app-assessment/backend/cleanup/index.js +++ b/translation-app-assessment/backend/cleanup/index.js @@ -7,9 +7,8 @@ const express = require('express') const bodyParser = require('body-parser') const Moment = require('moment') const firebaseAdmin = require('firebase-admin') -const fs = require('fs'); - -const firebaseConfig = JSON.parse(fs.readFileSync('/secrets/firebase-config.json', 'utf8')); +const { SecretManagerServiceClient } = require('@google-cloud/secret-manager'); +const secretManagerServiceClient = new SecretManagerServiceClient(); const Monitoring = require('@google-cloud/monitoring') // Init express.js app @@ -19,12 +18,12 @@ const cookieParser = require('cookie-parser') app.use(cookieParser()) app.disable('x-powered-by') -require("dotenv"); +require('dotenv').config({ path: require('find-config')('.env') }) const cors = require('cors'); const corsOptions = { origin: process.env.FRONTEND_URL, - credentials: true, // Permet les requêtes incluant les cookies + credentials: true, // Permet les requêtes incluant les cookiesn allowedHeaders: ['Content-Type', 'Authorization', 'Accept', 'Origin'], methods: ['GET', 'POST'], }; @@ -32,10 +31,11 @@ const corsOptions = { app.use(cors(corsOptions)); // Init project and services const projectId = process.env.GCP_PROJECT -firebaseAdmin.initializeApp({ - credential: firebaseAdmin.credential.cert(firebaseConfig) -}); -const firestore = firebaseAdmin.firestore() + +// Call initializeFirebase during startup +initializeFirebase(); + + // Function to write monitoring "heartbeat" that cleanup has run const writeMonitoring = async () => { const monitoringOptions = { @@ -83,6 +83,8 @@ app.get('/', async (req, res) => { app.post('/', async (req, res, next) => { try { + + await kpi() // Delete chat that have been expired for an hour or longer const deletionPromises = [] @@ -412,3 +414,23 @@ async function deleteInactiveUsers() { } } +// Function to initialize Firebase +async function initializeFirebase() { + try { + const [version] = await secretManagerServiceClient.accessSecretVersion({ + name: `projects/${projectId}/secrets/firebase-config/versions/latest`, + }); + + // Extract the secret payload as a string + const payload = version.payload.data.toString('utf8'); + + // Initialize Firebase Admin SDK + firebaseAdmin.initializeApp({ + credential: firebaseAdmin.credential.cert(JSON.parse(payload)), + }); + + console.log('Firebase Admin initialized successfully'); + } catch (error) { + console.error('Error initializing Firebase Admin:', error); + } +} diff --git a/translation-app-assessment/backend/cleanup/package.json b/translation-app-assessment/backend/cleanup/package.json index 7bcf610..e903893 100644 --- a/translation-app-assessment/backend/cleanup/package.json +++ b/translation-app-assessment/backend/cleanup/package.json @@ -5,15 +5,16 @@ "main": "index.js", "dependencies": { "@google-cloud/monitoring": "^2.2.0", + "@google-cloud/secret-manager": "^5.6.0", "body-parser": "^1.19.0", "cookie-parser": "^1.4.6", "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.17.1", + "find-config": "^1.0.0", "firebase-admin": "^9.5.0", "moment": "^2.29.1" }, - "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js" From f56f28cd3deb644e8fba93f1f565a397447a0e7a Mon Sep 17 00:00:00 2001 From: Maxime Alza Date: Mon, 29 Jul 2024 14:24:26 +0200 Subject: [PATCH 2/2] Create function to initialize firebase --- translation-app-assessment/backend/cleanup/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translation-app-assessment/backend/cleanup/index.js b/translation-app-assessment/backend/cleanup/index.js index d1c6599..fe12285 100644 --- a/translation-app-assessment/backend/cleanup/index.js +++ b/translation-app-assessment/backend/cleanup/index.js @@ -18,12 +18,12 @@ const cookieParser = require('cookie-parser') app.use(cookieParser()) app.disable('x-powered-by') -require('dotenv').config({ path: require('find-config')('.env') }) +require('dotenv'); const cors = require('cors'); const corsOptions = { origin: process.env.FRONTEND_URL, - credentials: true, // Permet les requêtes incluant les cookiesn + credentials: true, // Permet les requêtes incluant les cookies allowedHeaders: ['Content-Type', 'Authorization', 'Accept', 'Origin'], methods: ['GET', 'POST'], };