Files
EM2_ERP/em2rp/functions/index.js
2025-10-10 14:58:05 +02:00

71 lines
2.5 KiB
JavaScript

/**
* 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 });
}
});