This repository has been archived on 2024-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
green-pass-simple/js/main.js
2021-11-20 17:35:01 +01:00

238 lines
9.7 KiB
JavaScript

function newr() {
document.getElementById("main").style.display = "block";
document.getElementById("res").style.display = "none";
}
function check() {
document.getElementById("res").style.display = "block";
document.getElementById("main").style.display = "none";
list = Object.values(manufacturer)[2]; // Extract actual list from file
manufacturersValues = Object.values(list); // extract values
manufacturersKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: manufacturersValues[manufacturersKeys.indexOf(<field 'ma'>)].display
list = Object.values(product)[2]; // Extract actual list from file
productsValues = Object.values(list); // extract values
productsKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: productsValues[productsKeys.indexOf(<field 'mp'>)].display
list = Object.values(prophylaxis)[2]; // Extract actual list from file
prophylaxisValues = Object.values(list); // extract values
prophylaxisKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: prophylaxisValues[prophylaxisKeys.indexOf(<field 'vp'>)].display
list = Object.values(diseases)[2]; // Extract actual list from file
diseasesValues = Object.values(list); // extract values
diseasesKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: diseasesValues[diseasesKeys.indexOf(<field 'tg'>)].display
list = Object.values(testManufObj)[2]; // Extract actual list from file
testDeviceValues = Object.values(list); // extract values
testDeviceKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: testDeviceValues[testDeviceKeys.indexOf(<field 'ma'>)].display
list = Object.values(testTypeObj)[2]; // Extract actual list from file
testTypeValues = Object.values(list); // extract values
testTypeKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: testTypeValues[testTypeKeys.indexOf(<field 'tt'>)].display
list = Object.values(testResultObj)[2]; // Extract actual list from file
testResultValues = Object.values(list); // extract values
testResultKeys = Object.keys(list); // extract keys
// To find the name of the manufacturer: testResultValues[testResultKeys.indexOf(<field 'tr'>)].display
// Process:
// QR Image --> HC1 string --> BASE45 string --> ZIP array --> COSE array --> CBOR array --> json object
BASE45 = window["raw"].replace("HC1:", "");
//console.log("BASE45=",BASE45);
// Decode BASE45:
COMPRESSED = decode(BASE45).raw;
// Unzip the COMPRESSED:
COSEbin = pako.inflate(COMPRESSED);
//console.log("UNZ:",COSEbin);
COSE = buf2hex(COSEbin);
console.log("UNZ:", COSE);
//console.log("Input:", raw.innerHTML.length);
//console.log("Test:", testData.COSE.length);
var typedArray = new Uint8Array(COSE.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
})) // https://stackoverflow.com/questions/43131242/how-to-convert-a-hexadecimal-string-of-data-to-an-arraybuffer-in-javascript
var unzipped = typedArray.buffer;
//console.log("unzipped=",unzipped) ;
[headers1, headers2, cbor_data, signature] = CBOR.decode(unzipped);
//console.log("cbor_data=",cbor_data) ;
//cbor_dataStr = buf2hex(cbor_data);
//console.log("decodedStr=",decodedStr);
//cbor_dataArr=hexStringToArrayBuffer(cbor_dataStr);
cbor_dataArr = typedArrayToBuffer(cbor_data);
//console.log("cbor_dataArr=",cbor_dataArr);
greenpassData = CBOR.decode(cbor_dataArr);
qrdays = ((greenpassData[4] * 1000 - greenpassData[6] * 1000) / 86400000).toFixed(0);
qrmonths = ((greenpassData[4] * 1000 - greenpassData[6] * 1000) / 2592000000).toFixed(0);
qrCreation = new Date(greenpassData[6] * 1000).toLocaleString();
qrExpiration = new Date(greenpassData[4] * 1000).toLocaleString();
console.log("greenpassData =", greenpassData);
//rawjson.innerHTML = JSON.stringify(greenpassData, null, "\t");;
firstname.innerHTML = "-";
surname.innerHTML = "-";
birth.innerHTML = "-";
covidend.innerHTML = "-";
tested.innerHTML = "-";
vaccin.innerHTML = "-";
/// VACCINATO
targetV.innerHTML = "-";
proph.innerHTML = "-";
vaccid.innerHTML = "-";
manuf.innerHTML = "-";
receivedDoses.innerHTML = "-";
neededDoses.innerHTML = "-";
vaccinDate.innerHTML = "-";
nation.innerHTML = "-";
issuerV.innerHTML = "-";
idV.innerHTML = "-";
/// TESTATO
testDate.innerHTML = "-"; //sc
testDevice.innerHTML = "-"; //ma
testType.innerHTML = "-"; //tt
testName.innerHTML = "-"; //nm
testCountryTestato.innerHTML = "-"; //co
testCenter.innerHTML = "-"; //tc
testCertId.innerHTML = "-"; //ci
issuerT.innerHTML = "-"; //is
testDisease.innerHTML = "-"; //tg
testResult.innerHTML = "-"; //tr
/// GUARITO
covidend.innerHTML = "-";
targetR.innerHTML = "-";
firstPositive.innerHTML = "-";
testCountryGuarito.innerHTML = "-";
issuerR.innerHTML = "-";
validFromR.innerHTML = "-";
validToR.innerHTML = "-";
validForDaysR.innerHTML = "-";
certIdR.innerHTML = "-";
validFromR.innerHTML = "-";
validToR.innerHTML = "-";
validForDaysR.innerHTML = "-";
try {
console.log("First name:", greenpassData[-260][1].nam.gn);
firstname.innerHTML = greenpassData[-260][1].nam.gn;
console.log("Surname:", greenpassData[-260][1].nam.fn);
surname.innerHTML = greenpassData[-260][1].nam.fn;
console.log("Born:", greenpassData[-260][1].dob);
birth.innerHTML = greenpassData[-260][1].dob;
////////////// VACCINATO
if (greenpassData[-260][1].v != null) {
console.log("Vaccinato");
vaccin.innerHTML = "Yes";
targetV.innerHTML = diseasesValues[diseasesKeys.indexOf(greenpassData[-260][1].v[0].tg)].display;
proph.innerHTML = prophylaxisValues[prophylaxisKeys.indexOf(greenpassData[-260][1].v[0].vp)].display;
vaccid.innerHTML = productsValues[productsKeys.indexOf(greenpassData[-260][1].v[0].mp)].display;
manuf.innerHTML = manufacturersValues[manufacturersKeys.indexOf(greenpassData[-260][1].v[0].ma)].display;
console.log("Vaccine doses:", greenpassData[-260][1].v[0].dn);
receivedDoses.innerHTML = greenpassData[-260][1].v[0].dn;
console.log("Vaccine doses needed:", greenpassData[-260][1].v[0].sd);
neededDoses.innerHTML = greenpassData[-260][1].v[0].sd;
console.log("Vaccin date:", greenpassData[-260][1].v[0].dt);
vaccinDate.innerHTML = greenpassData[-260][1].v[0].dt;
nation.innerHTML = greenpassData[-260][1].v[0].co;
issuerV.innerHTML = greenpassData[-260][1].v[0].is;
idV.innerHTML = greenpassData[-260][1].v[0].ci;
} else {
vaccin.innerHTML = "No";
}
////////// TESTATO
if (greenpassData[-260][1].t != null) {
console.log("Testato");
tested.innerHTML = "Yes";
testDisease.innerHTML = diseasesValues[diseasesKeys.indexOf(greenpassData[-260][1].t[0].tg)].display;
testType.innerHTML = testTypeValues[testTypeKeys.indexOf(greenpassData[-260][1].t[0].tt)].display;
testName.innerHTML = greenpassData[-260][1].t[0].nm;
testDevice.innerHTML = testDeviceValues[testDeviceKeys.indexOf(greenpassData[-260][1].t[0].ma)].display;;
testDate.innerHTML = greenpassData[-260][1].t[0].sc;
testResult.innerHTML = greenpassData[-260][1].t[0].tr;
testCenter.innerHTML = greenpassData[-260][1].t[0].tc;
//dr.innerHTML = greenpassData[-260][1].t[0].dr; ???
testCountryTestato.innerHTML = greenpassData[-260][1].t[0].co;
issuerT.innerHTML = greenpassData[-260][1].t[0].is;
testCertId.innerHTML = greenpassData[-260][1].t[0].ci;
} else {
tested.innerHTML = "No";
}
///////// GUARITO
if (greenpassData[-260][1].r != null) {
console.log("Guarito");
covidend.innerHTML = "Yes";
targetR.innerHTML = diseasesValues[diseasesKeys.indexOf(greenpassData[-260][1].r[0].tg)].display;;
console.log("1");
firstPositive.innerHTML = greenpassData[-260][1].r[0].fr;
testCountryGuarito.innerHTML = greenpassData[-260][1].r[0].co;
console.log("2");
issuerR.innerHTML = greenpassData[-260][1].r[0].is;
validFromR.innerHTML = greenpassData[-260][1].r[0].df;
validToR.innerHTML = greenpassData[-260][1].r[0].du;
fromDate = new Date(greenpassData[-260][1].r[0].df);
toDate = new Date(greenpassData[-260][1].r[0].du);
diffDays = (toDate.getTime() - fromDate.getTime()) / 86400000;
validForDaysR.innerHTML = diffDays.toFixed(0);
certIdR.innerHTML = greenpassData[-260][1].r[0].ci;
} else {
covidend.innerHTML = "No";
}
} catch (e) {
console.log("ops");
}
console.log("QR code creation date:", qrCreation);
console.log("QR code expiration date:", qrExpiration);
console.log("QR code duration (days):", qrdays);
console.log("QR code duration (months):", qrmonths);
qrdate1.innerHTML = qrCreation;
qrdate2.innerHTML = qrExpiration;
days.innerHTML = qrdays;
months.innerHTML = qrmonths;
today = new Date();
todayDays = today.getDate();
diff = (new Date(greenpassData[4] * 1000).getTime() - (new Date()).getTime()) / 86400000;
daysleft.innerHTML = diff.toFixed(0);
monthsleft.innerHTML = (diff / 30).toFixed(2);
}