/** * Import function triggers from their respective submodules: * * const {onCall} = require("firebase-functions/v2/https"); * const {onDocumentWritten} = require("firebase-functions/v2/firestore"); * * See a full list of supported triggers at https://firebase.google.com/docs/functions */ const {onRequest} = require("firebase-functions/v2/https"); const logger = require("firebase-functions/logger"); const admin = require('firebase-admin'); const { Storage } = require('@google-cloud/storage'); admin.initializeApp(); const storage = new Storage(); // Create and deploy your first functions // https://firebase.google.com/docs/functions/get-started // exports.helloWorld = onRequest((request, response) => { // logger.info("Hello logs!", {structuredData: true}); // response.send("Hello from Firebase!"); // }); // Nouvelle version HTTP sécurisée exports.moveEventFileV2 = onRequest({cors: true}, async (req, res) => { // La gestion CORS est maintenant gérée par l'option {cors: true} // La vérification pour les requêtes OPTIONS n'est plus nécessaire // Vérification du token Firebase dans l'en-tête Authorization let uid = null; if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) { const idToken = req.headers.authorization.split('Bearer ')[1]; try { const decodedToken = await admin.auth().verifyIdToken(idToken); uid = decodedToken.uid; } catch (e) { logger.error("Error while verifying Firebase ID token:", e); res.status(401).json({ error: 'Unauthorized: Invalid token' }); return; } } else { logger.warn("No Firebase ID token was passed as a Bearer token in the Authorization header."); res.status(401).json({ error: 'Unauthorized: No token provided' }); return; } const { sourcePath, destinationPath } = req.body.data || {}; if (!sourcePath || !destinationPath) { res.status(400).json({ error: 'Source and destination paths are required.' }); return; } const bucketName = admin.storage().bucket().name; const bucket = storage.bucket(bucketName); try { await bucket.file(sourcePath).copy(bucket.file(destinationPath)); await bucket.file(sourcePath).delete(); const [url] = await bucket.file(destinationPath).getSignedUrl({ action: 'read', expires: '03-01-2500', }); res.status(200).json({ url }); } catch (error) { logger.error("Error moving file:", error); res.status(500).json({ error: error.message }); } });