ipsos-components
Version:
Material Design components for Angular
41 lines (34 loc) • 1.56 kB
text/typescript
import * as firebaseFunctions from 'firebase-functions';
import {writeFileSync} from 'fs';
import {verifySecureToken} from './jwt-util';
import {isCreateEvent} from './util/util';
const gcs = require('@google-cloud/storage')();
/** The storage bucket to store the images. The bucket is also used by Firebase Storage. */
const bucket = gcs.bucket(firebaseFunctions.config().firebase.storageBucket);
/**
* Writes base-64 encoded test images to png files on the filesystem.
* Image data posted to database will be saved as png files
* and uploaded to screenshot/$prNumber/dataType/$filename
* Convert BufferArray to .png image file
*/
export function writeTestImagesToFiles(event: any) {
// Only edit data when it is first created. Exit when the data is deleted.
if (!isCreateEvent(event)) {
return;
}
let dataType = event.params.dataType;
let prNumber = event.params.prNumber;
let data = event.data.val();
let saveFilename = `${event.params.filename}.screenshot.png`;
// Check it's either diff images generated by screenshot comparison, or the test image results
if (dataType !== 'diff' && dataType !== 'test') {
return;
}
return verifySecureToken(event).then(() => {
let tempPath = `/tmp/${dataType}-${saveFilename}`;
let filePath = `screenshots/${prNumber}/${dataType}/${saveFilename}`;
let binaryData = new Buffer(data, 'base64').toString('binary');
writeFileSync(tempPath, binaryData, 'binary');
return bucket.upload(tempPath, {destination: filePath});
});
}