mirror of
https://github.com/covidpass-org/covidpass.git
synced 2025-02-23 06:57:40 +01:00
pre-merge with main updates
This commit is contained in:
parent
d2c824f129
commit
32ea1edbae
@ -255,9 +255,18 @@ function Form(): JSX.Element {
|
||||
|
||||
try {
|
||||
if (payloadBody) {
|
||||
const passName = payloadBody.receipts[selectedDose].name.replace(' ', '-');
|
||||
const vaxName = payloadBody.receipts[selectedDose].vaccineName.replace(' ', '-');
|
||||
const passDose = payloadBody.receipts[selectedDose].numDoses;
|
||||
|
||||
let selectedReceipt;
|
||||
if (payloadBody.rawData.length > 0) { // shc stuff
|
||||
const sortedKeys = Object.keys(payloadBody.receipts).sort(); // pickup the last key in the receipt table
|
||||
const lastKey = sortedKeys[sortedKeys.length - 1];
|
||||
selectedReceipt = payloadBody.receipts[lastKey];
|
||||
} else {
|
||||
selectedReceipt = payloadBody.receipts[selectedDose];
|
||||
}
|
||||
const passName = selectedReceipt.name.replace(' ', '-');
|
||||
const vaxName = selectedReceipt.vaccineName.replace(' ', '-');
|
||||
const passDose = selectedReceipt.numDoses;
|
||||
const covidPassFilename = `grassroots-receipt-${passName}-${vaxName}-${passDose}.pkpass`;
|
||||
|
||||
//console.log('> increment count');
|
||||
@ -310,13 +319,24 @@ function Form(): JSX.Element {
|
||||
}
|
||||
|
||||
try {
|
||||
const passName = payloadBody.receipts[selectedDose].name.replace(' ', '-');
|
||||
const vaxName = payloadBody.receipts[selectedDose].vaccineName.replace(' ', '-');
|
||||
const passDose = payloadBody.receipts[selectedDose].numDoses;
|
||||
|
||||
let selectedReceipt;
|
||||
if (payloadBody.rawData.length > 0) { // shc stuff
|
||||
const sortedKeys = Object.keys(payloadBody.receipts).sort(); // pickup the last key in the receipt table
|
||||
const lastKey = sortedKeys[sortedKeys.length - 1];
|
||||
selectedReceipt = payloadBody.receipts[lastKey];
|
||||
setSelectedDose(Number(lastKey));
|
||||
} else {
|
||||
selectedReceipt = payloadBody.receipts[selectedDose];
|
||||
}
|
||||
const passName = selectedReceipt.name.replace(' ', '-');
|
||||
const vaxName = selectedReceipt.vaccineName.replace(' ', '-');
|
||||
const passDose = selectedReceipt.numDoses;
|
||||
const covidPassFilename = `grassroots-receipt-${passName}-${vaxName}-${passDose}.png`;
|
||||
|
||||
await incrementCount();
|
||||
let photoBlob = await Photo.generatePass(payloadBody, selectedDose);
|
||||
|
||||
let photoBlob = await Photo.generatePass(payloadBody, passDose);
|
||||
saveAs(photoBlob, covidPassFilename);
|
||||
|
||||
// need to clean up
|
||||
|
@ -20,10 +20,17 @@ export function getQRFromImage(imageData) {
|
||||
export function decodedStringToReceipt(decoded: object) : HashTable<Receipt> {
|
||||
|
||||
const codeToVaccineName = {
|
||||
'28581000087106': 'Pfizer-BioNTech',
|
||||
'28951000087107': 'Johnson & Johnson / Janssen',
|
||||
'28761000087108': 'AstraZeneca',
|
||||
'28571000087109': 'Moderna'
|
||||
'28581000087106': 'PFIZER',
|
||||
'28951000087107': 'JANSSEN',
|
||||
'28761000087108': 'ASTRAZENECA',
|
||||
'28571000087109': 'MODERNA'
|
||||
}
|
||||
|
||||
const cvxCodeToVaccineName = { // https://www2a.cdc.gov/vaccines/iis/iisstandards/vaccines.asp?rpt=cvx
|
||||
'208': 'PFIZER',
|
||||
'212': 'JANSSEN',
|
||||
'210': 'ASTRAZENECA',
|
||||
'207': 'MODERNA'
|
||||
}
|
||||
|
||||
console.log(decoded);
|
||||
@ -35,7 +42,7 @@ export function decodedStringToReceipt(decoded: object) : HashTable<Receipt> {
|
||||
if (decoded['iss'].includes('ontariohealth.ca')) {
|
||||
issuer = 'on';
|
||||
}
|
||||
if (decoded['iss'].includes('bchealth.ca')) {
|
||||
if (decoded['iss'] == "https://smarthealthcard.phsa.ca/v1/issuer") {
|
||||
issuer = 'bc';
|
||||
}
|
||||
|
||||
@ -62,12 +69,15 @@ export function decodedStringToReceipt(decoded: object) : HashTable<Receipt> {
|
||||
let vaccineName : string;
|
||||
let organizationName : string;
|
||||
let vaccinationDate : string;
|
||||
|
||||
for (const vaccineCodes of resource.vaccineCode.coding) {
|
||||
if (vaccineCodes.system.includes("snomed.info")) {
|
||||
if (vaccineCodes.system.includes("snomed.info")) { //bc
|
||||
vaccineName = codeToVaccineName[vaccineCodes.code];
|
||||
if (vaccineName == undefined)
|
||||
vaccineName = 'Unknown - ' + vaccineCodes.code;
|
||||
} else if (vaccineCodes.system == "http://hl7.org/fhir/sid/cvx") { //qc
|
||||
vaccineName = cvxCodeToVaccineName[vaccineCodes.code];
|
||||
if (vaccineName == undefined)
|
||||
vaccineName = 'Unknown - ' + vaccineCodes.code;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,8 +72,8 @@ export class PassData {
|
||||
|
||||
const results = await PassPhotoCommon.preparePayload(payloadBody, numDose);
|
||||
const payload = results.payload;
|
||||
|
||||
// Create pass data
|
||||
|
||||
const pass: PassData = new PassData(results.payload, results.qrCode);
|
||||
|
||||
// Create new zip
|
||||
|
@ -36,57 +36,61 @@ export class PassPhotoCommon {
|
||||
const payload: Payload = new Payload(payloadBody, numDose);
|
||||
|
||||
payload.serialNumber = uuid4();
|
||||
let qrCodeMessage;
|
||||
|
||||
// register record
|
||||
if (payloadBody.rawData.startsWith('shc:/')) {
|
||||
|
||||
qrCodeMessage = payloadBody.rawData;
|
||||
|
||||
const clonedReceipt = Object.assign({}, payloadBody.receipts[numDose]);
|
||||
delete clonedReceipt.name;
|
||||
delete clonedReceipt.dateOfBirth;
|
||||
clonedReceipt["serialNumber"] = payload.serialNumber;
|
||||
clonedReceipt["type"] = 'applewallet';
|
||||
} else {
|
||||
|
||||
// register record
|
||||
|
||||
let requestOptions = {
|
||||
method: 'POST', // *GET, POST, PUT, DELETE, etc.
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(clonedReceipt) // body data type must match "Content-Type" header
|
||||
const clonedReceipt = Object.assign({}, payloadBody.receipts[numDose]);
|
||||
delete clonedReceipt.name;
|
||||
delete clonedReceipt.dateOfBirth;
|
||||
clonedReceipt["serialNumber"] = payload.serialNumber;
|
||||
clonedReceipt["type"] = 'applewallet';
|
||||
|
||||
let requestOptions = {
|
||||
method: 'POST', // *GET, POST, PUT, DELETE, etc.
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(clonedReceipt) // body data type must match "Content-Type" header
|
||||
}
|
||||
|
||||
console.log('registering ' + JSON.stringify(clonedReceipt, null, 2));
|
||||
const configResponse = await fetch('/api/config');
|
||||
|
||||
const configResponseJson = await configResponse.json();
|
||||
|
||||
const verifierHost = configResponseJson.verifierHost;
|
||||
const registrationHost = configResponseJson.registrationHost;
|
||||
let functionSuffix = configResponseJson.functionSuffix;
|
||||
|
||||
if (functionSuffix == undefined)
|
||||
functionSuffix = '';
|
||||
|
||||
const registerUrl = `${registrationHost}/register${functionSuffix}`;
|
||||
// console.log(registerUrl);
|
||||
|
||||
const response = await fetch(registerUrl, requestOptions);
|
||||
const responseJson = await response.json();
|
||||
|
||||
console.log(JSON.stringify(responseJson,null,2));
|
||||
|
||||
if (responseJson["result"] != 'OK') {
|
||||
console.error(responseJson);
|
||||
return Promise.reject();
|
||||
}
|
||||
|
||||
const encodedUri = `serialNumber=${encodeURIComponent(payload.serialNumber)}&vaccineName=${encodeURIComponent(payloadBody.receipts[numDose].vaccineName)}&vaccinationDate=${encodeURIComponent(payloadBody.receipts[numDose].vaccinationDate)}&organization=${encodeURIComponent(payloadBody.receipts[numDose].organization)}&dose=${encodeURIComponent(payloadBody.receipts[numDose].numDoses)}`;
|
||||
const qrCodeUrl = `${verifierHost}/verify?${encodedUri}`;
|
||||
qrCodeMessage = qrCodeUrl;
|
||||
// console.log(qrCodeUrl);
|
||||
}
|
||||
|
||||
console.log('registering ' + JSON.stringify(clonedReceipt, null, 2));
|
||||
const configResponse = await fetch('/api/config');
|
||||
|
||||
const configResponseJson = await configResponse.json();
|
||||
|
||||
const verifierHost = configResponseJson.verifierHost;
|
||||
const registrationHost = configResponseJson.registrationHost;
|
||||
let functionSuffix = configResponseJson.functionSuffix;
|
||||
|
||||
if (functionSuffix == undefined)
|
||||
functionSuffix = '';
|
||||
|
||||
const registerUrl = `${registrationHost}/register${functionSuffix}`;
|
||||
// console.log(registerUrl);
|
||||
|
||||
const response = await fetch(registerUrl, requestOptions);
|
||||
const responseJson = await response.json();
|
||||
|
||||
console.log(JSON.stringify(responseJson,null,2));
|
||||
|
||||
if (responseJson["result"] != 'OK') {
|
||||
console.error(responseJson);
|
||||
return Promise.reject();
|
||||
}
|
||||
|
||||
const encodedUri = `serialNumber=${encodeURIComponent(payload.serialNumber)}&vaccineName=${encodeURIComponent(payloadBody.receipts[numDose].vaccineName)}&vaccinationDate=${encodeURIComponent(payloadBody.receipts[numDose].vaccinationDate)}&organization=${encodeURIComponent(payloadBody.receipts[numDose].organization)}&dose=${encodeURIComponent(payloadBody.receipts[numDose].numDoses)}`;
|
||||
const qrCodeUrl = `${verifierHost}/verify?${encodedUri}`;
|
||||
|
||||
// console.log(qrCodeUrl);
|
||||
|
||||
let qrCodeMessage = payloadBody.rawData.startsWith('shc:/')
|
||||
? payloadBody.rawData
|
||||
: qrCodeUrl;
|
||||
|
||||
// Create QR Code Object
|
||||
const qrCode: QrCode = {
|
||||
message: qrCodeMessage,
|
||||
|
@ -23,16 +23,13 @@ export class Photo {
|
||||
|
||||
// Create Payload
|
||||
try {
|
||||
|
||||
console.log('generatePass');
|
||||
|
||||
const results = await PassPhotoCommon.preparePayload(payloadBody, numDose);
|
||||
|
||||
const payload = results.payload;
|
||||
const qrCode = results.qrCode;
|
||||
|
||||
let receipt;
|
||||
|
||||
if (results.payload.rawData.length == 0) {
|
||||
receipt = results.payload.receipts[numDose];
|
||||
} else {
|
||||
@ -68,7 +65,7 @@ export class Photo {
|
||||
}
|
||||
|
||||
const codeWriter = new BrowserQRCodeSvgWriter();
|
||||
const hints : Map<EncodeHintType,any> = new Map().set(EncodeHintType.ERROR_CORRECTION,'M');
|
||||
const hints : Map<EncodeHintType,any> = new Map().set(EncodeHintType.ERROR_CORRECTION,'L');
|
||||
const svg = codeWriter.write(qrCode.message,200,200, hints);
|
||||
svg.setAttribute('style','background-color: white');
|
||||
document.getElementById('qrcode').appendChild(svg);
|
||||
|
Loading…
x
Reference in New Issue
Block a user