I have this code in a google cloud function
const functions = require('firebase-functions');
const { Buffer } = require('buffer')
//const busboy = require('busboy')
const crypto = require('crypto')
const cors = require('cors')({origin: true})
//fix encrypting e decrypting file multipli
const processBase64Input = async (password, base64Files) => {
return new Promise( (resolve, reject) => {
const salt = crypto.randomBytes(32)
const key = crypto.scryptSync(password, salt, 32)
const processed = []
base64Files.forEach( (base64) => {
const output = []
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
const encryptedData = Buffer.concat([cipher.update(base64, 'utf8'), cipher.final()]);
const data = `${iv.toString('hex')}:${encryptedData.toString('hex')}`;
console.log('const data logn', data)
output.push(data);
const result = output.join(' ');
console.log('const result logn', result)
processed.push(`${salt.toString('hex')}+${result}`)
});
resolve(processed)
})
}
//
exports.encryptFiles = functions.https.onRequest( (req, res) => {
cors( req, res, async () => {
console.log(req.body.password, req.body.base64Files)
let password = req.body.password
let base64Files = req.body.base64Files
let output = []
let salt = crypto.randomBytes(32)
let key = crypto.scryptSync(password, salt, 32)
base64Files.forEach( (base64) => {
console.log('processing base64: ', base64)
let iv = crypto.randomBytes(16);
let cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
let encryptedData = Buffer.concat([cipher.update(base64.file, 'utf8'), cipher.final()]);
let data = `${iv.toString('hex')}:${encryptedData.toString('hex')}`;
output.push({
fileName: base64.fileName,
encryptedFile: `${salt.toString('hex')}+${data}`
})
console.log(output)
})
res.send(output)
//res.send("Hello from Firebase!");
})
});
//
exports.decryptFiles = functions.https.onRequest( (req, res) => {
cors( req, res, () => {
let encryptedFiles = req.body.encryptedFiles
let password = req.body.password
let output = [];
encryptedFiles.forEach( (file) => {
let [salt, fileContents] = file.split('+');
let key = crypto.scryptSync(password, Buffer.from(salt, 'hex'), 32);
let splittedFile = fileContents.split(' ');
output = splittedFile.map( (file) => {
let [iv, content] = file.split(':');
let cipher = crypto.createDecipheriv('aes-256-gcm', key, Buffer.from(iv, 'hex'));
let decryptedData = cipher.update(content, 'hex', 'utf8');
return decryptedData;
});
})
res.send(output)
})
})
I want to test it using postman but I will always get a 500 error because when I set the body of the POST request, the function will not detect the password field. How I can correctly test the function using postman? I have two functions, one is for encrypt files and another is for decrypt. any help?