Fixed code to run on tabs

This commit is contained in:
Alexander Cerutti
2023-07-28 23:19:42 +02:00
parent 7aac248130
commit 4dbd053ca3

View File

@@ -1,177 +1,204 @@
const functions = require("firebase-functions"); const functions = require("firebase-functions");
const { PKPass } = require("passkit-generator"); const { PKPass } = require("passkit-generator");
const admin = require("firebase-admin"); const admin = require("firebase-admin");
var fs = require('file-system'); var fs = require("file-system");
var path = require('path'); var path = require("path");
var axios = require('axios'); var axios = require("axios");
var os = require('os'); var os = require("os");
// Firebase init // Firebase init
admin.initializeApp({ admin.initializeApp({
credential: admin.credential.cert(require("CERTIFICATE_PATH")), credential: admin.credential.cert(require("CERTIFICATE_PATH")),
storageBucket: "STORAGE_BUCKET_URL" storageBucket: "STORAGE_BUCKET_URL",
}); });
var storageRef = admin.storage().bucket() var storageRef = admin.storage().bucket();
exports.pass = functions.https.onRequest((request, response) => { exports.pass = functions.https.onRequest((request, response) => {
PKPass.from({ PKPass.from(
// Get relevant pass model from model folder (see passkit-generator/examples/models/) {
model: `./model/${request.body.passType}.pass`, // Get relevant pass model from model folder (see passkit-generator/examples/models/)
certificates: { model: `./model/${request.body.passType}.pass`,
// Assigning certificates from certs folder (you will need to provide these yourself) certificates: {
wwdr: fs.fs.readFileSync("./certs/wwdr.pem"), // Assigning certificates from certs folder (you will need to provide these yourself)
signerCert: fs.fs.readFileSync("./certs/signerCert.pem"), wwdr: fs.fs.readFileSync("./certs/wwdr.pem"),
signerKey: fs.fs.readFileSync("./certs/signerKey.pem"), signerCert: fs.fs.readFileSync("./certs/signerCert.pem"),
signerKeyPassphrase: "PASSPHRASE" signerKey: fs.fs.readFileSync("./certs/signerKey.pem"),
}, signerKeyPassphrase: "PASSPHRASE",
}, },
{ },
serialNumber: request.body.serialNumber, {
description: "DESCRIPTION", serialNumber: request.body.serialNumber,
logoText: request.body.logoText, description: "DESCRIPTION",
foregroundColor: request.body.textColor, logoText: request.body.logoText,
backgroundColor: request.body.backgroundColor, foregroundColor: request.body.textColor,
labelColor: request.body.labelColor backgroundColor: request.body.backgroundColor,
}) labelColor: request.body.labelColor,
.then(async (newPass) => { },
).then(async (newPass) => {
let currentPassType = request.body.passType;
let currentPassType = request.body.passType; if (currentPassType == "boardingPass") {
newPass.transitType = `PKTransitType${request.body.transitType}`;
}
if (currentPassType == "boardingPass") { if (request.body.relevantDate !== "Blank") {
newPass.transitType = `PKTransitType${request.body.transitType}`; newPass.setRelevantDate(new Date(request.body.relevantDate));
} }
if (request.body.relevantDate !== "Blank") { if (request.body.expiryDate !== "Blank") {
newPass.setRelevantDate(new Date(request.body.relevantDate)); newPass.setExpirationDate(new Date(request.body.expiryDate));
} }
if (request.body.expiryDate !== "Blank") { if (
newPass.setExpirationDate(new Date(request.body.expiryDate)); request.body.relevantLocationLat !== "Blank" &&
} request.body.relevantLocationLong !== "Blank"
) {
newPass.setLocations({
latitude: request.body.relevantLocationLat,
longitude: request.body.relevantLocationLong,
});
}
if (request.body.relevantLocationLat !== "Blank" && request.body.relevantLocationLong !== "Blank") { request.body.header.forEach((field, index) => {
newPass.setLocations({latitude: request.body.relevantLocationLat, longitude: request.body.relevantLocationLong}); if (field.label !== "" || field.value !== "") {
} newPass.headerFields.push({
key: `header${index}`,
label: field.label,
value: field.value,
});
}
});
request.body.header.forEach((field, index) => { request.body.primary.forEach((field, index) => {
if (field.label !== '' || field.value !== '') { if (field.label !== "" || field.value !== "") {
newPass.headerFields.push({ newPass.primaryFields.push({
key: `header${index}`, key: `primary${index}`,
label: field.label, label: field.label,
value: field.value, value:
}); currentPassType == "boardingPass"
} ? field.value.toUpperCase()
}); : field.value,
});
}
});
request.body.primary.forEach((field, index) => { request.body.secondary.forEach((field, index) => {
if (field.label !== '' || field.value !== '') { if (field.label !== "" || field.value !== "") {
newPass.primaryFields.push({ newPass.secondaryFields.push({
key: `primary${index}`, key: `secondary${index}`,
label: field.label, label: field.label,
value: (currentPassType == "boardingPass") ? field.value.toUpperCase() : field.value, value: field.value,
}); textAlignment:
} index === request.body.secondary.length - 2 ||
}); index === request.body.secondary.length - 1
? "PKTextAlignmentRight"
: "PKTextAlignmentLeft",
});
}
});
request.body.secondary.forEach((field, index) => { request.body.auxiliary.forEach((field, index) => {
if (field.label !== '' || field.value !== '') { if (field.label !== "" || field.value !== "") {
newPass.secondaryFields.push({ newPass.auxiliaryFields.push({
key: `secondary${index}`, key: `auxiliary${index}`,
label: field.label, label: field.label,
value: field.value, value: field.value,
textAlignment: (index === request.body.secondary.length - 2 || index === request.body.secondary.length - 1) ? "PKTextAlignmentRight" : "PKTextAlignmentLeft", textAlignment:
}); index === request.body.secondary.length - 2 ||
} index === request.body.secondary.length - 1
}); ? "PKTextAlignmentRight"
: "PKTextAlignmentLeft",
});
}
});
request.body.auxiliary.forEach((field, index) => { if (!request.body.codeAlt || request.body.codeAlt.trim() === "") {
if (field.label !== '' || field.value !== '') { newPass.setBarcodes({
newPass.auxiliaryFields.push({ message: request.body.qrText,
key: `auxiliary${index}`, format: `PKBarcodeFormat${request.body.codeType}`,
label: field.label, messageEncoding: "iso-8859-1",
value: field.value, });
textAlignment: (index === request.body.secondary.length - 2 || index === request.body.secondary.length - 1) ? "PKTextAlignmentRight" : "PKTextAlignmentLeft", } else {
}); newPass.setBarcodes({
} message: request.body.qrText,
}); format: `PKBarcodeFormat${request.body.codeType}`,
messageEncoding: "iso-8859-1",
altText: request.body.codeAlt,
});
}
if (!request.body.codeAlt || request.body.codeAlt.trim() === "") { // Downloading thumbnail and logo files from Firebase Storage and adding to pass
newPass.setBarcodes({ if (currentPassType == "generic" || currentPassType == "eventTicket") {
message: request.body.qrText, const thumbnailFile = request.body.thumbnailFile;
format: `PKBarcodeFormat${request.body.codeType}`, const tempPath1 = path.join(os.tmpdir(), thumbnailFile);
messageEncoding: "iso-8859-1", try {
}); await storageRef
} else { .file(`thumbnails/${thumbnailFile}`)
newPass.setBarcodes({ .download({ destination: tempPath1 });
message: request.body.qrText, } catch (error) {
format: `PKBarcodeFormat${request.body.codeType}`, console.error(error);
messageEncoding: "iso-8859-1", }
altText: request.body.codeAlt, let buffer = Buffer.alloc(0);
}); try {
} buffer = fs.readFileSync(tempPath1);
} catch (error) {
// Downloading thumbnail and logo files from Firebase Storage and adding to pass console.error(error);
if (currentPassType == "generic" || currentPassType == "eventTicket") { }
const thumbnailFile = request.body.thumbnailFile newPass.addBuffer("thumbnail.png", buffer);
const tempPath1 = path.join(os.tmpdir(), thumbnailFile) newPass.addBuffer("thumbnail@2x.png", buffer);
try { }
await storageRef.file(`thumbnails/${thumbnailFile}`).download({destination: tempPath1})
} catch (error) {
console.error(error)
}
let buffer = Buffer.alloc(0);
try {
buffer = fs.readFileSync(tempPath1)
} catch (error) {
console.error(error)
}
newPass.addBuffer("thumbnail.png", buffer)
newPass.addBuffer("thumbnail@2x.png", buffer)
}
const logoFile = request.body.logoFile const logoFile = request.body.logoFile;
const tempPath2 = path.join(os.tmpdir(), logoFile) const tempPath2 = path.join(os.tmpdir(), logoFile);
try { try {
await storageRef.file(`logos/${logoFile}`).download({destination: tempPath2}) await storageRef
} catch (error) { .file(`logos/${logoFile}`)
console.error(error) .download({ destination: tempPath2 });
} } catch (error) {
let buffer = Buffer.alloc(0); console.error(error);
try { }
buffer = fs.readFileSync(tempPath2) let buffer = Buffer.alloc(0);
} catch (error) { try {
console.error(error) buffer = fs.readFileSync(tempPath2);
} } catch (error) {
newPass.addBuffer("logo.png", buffer) console.error(error);
newPass.addBuffer("logo@2x.png", buffer) }
newPass.addBuffer("logo.png", buffer);
newPass.addBuffer("logo@2x.png", buffer);
const bufferData = newPass.getAsBuffer(); const bufferData = newPass.getAsBuffer();
try { try {
console.log("Pass was uploaded successfully."); console.log("Pass was uploaded successfully.");
response.set('Content-Type', newPass.mimeType); response.set("Content-Type", newPass.mimeType);
response.status(200).send(bufferData); response.status(200).send(bufferData);
// Delete thumbnail file in Firebase Storage // Delete thumbnail file in Firebase Storage
storageRef.file(`thumbnails/${thumbnailFile}`).delete().then(() => { storageRef
console.log('Thumbnail file deleted successfully'); .file(`thumbnails/${thumbnailFile}`)
}).catch((error) => { .delete()
console.error(error); .then(() => {
}) console.log("Thumbnail file deleted successfully");
})
.catch((error) => {
console.error(error);
});
// Delete logo file in Firebase Storage // Delete logo file in Firebase Storage
storageRef.file(`logos/${logoFile}`).delete().then(() => { storageRef
console.log('Logo file deleted successfully'); .file(`logos/${logoFile}`)
}).catch((error) => { .delete()
console.error(error); .then(() => {
}) console.log("Logo file deleted successfully");
})
} catch (error) { .catch((error) => {
console.log("Error Uploading pass " + error); console.error(error);
response.send({ });
"explanation": error.message, } catch (error) {
"result": "FAILED", console.log("Error Uploading pass " + error);
}); response.send({
} explanation: error.message,
}) result: "FAILED",
}); });
}
});
});