website-betalen/programmaatjes/ondertekening.js
2020-07-28 12:01:30 +02:00

157 lines
6.3 KiB
JavaScript

console.info("ondertekening.js geladen");
let publiekeSleutel = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" +
"\n" +
"mQENBF3FuR0BCACxaQrLc53zFD1ch9lY9tsCcQpmBPRT1x9yPphMcJl+0K3Lu8AB\n" +
"F2Nktvol3oV8LT3JCOT9WXwV2srN3CbTAI2h9P6Bu5tHztCfhotNtgFSeX31r2fc\n" +
"raDaDgWS8iKOHk2SCRaOk4UqkZkjSnKGs56MWCqDjtKYOl3pCvTPzCsEiduJGPtj\n" +
"83xI9WyF3mkGvh9EVcbfGDywfDpZ6zmRfWiAniteZuXLgDtQ4aDC9rfjg6vVTNZz\n" +
"Q6ntVzC5bVLHcIpk4fSEXL0M/0yFwycGkbf2mZbbAMJCnXPKo8EEoZwh4d4SusSy\n" +
"coJzTUV9Azo57eO25iUdvWeDXtukqvMttapJABEBAAG0IENocmlzIEpvc3RlbiA8\n" +
"YmV0YWxlbkBuZXRzb2oubmw+iQFUBBMBCAA+FiEE9y0e0M5kgwkiGmLb2y0MgIMO\n" +
"E30FAl3FuR0CGwMFCQPDShMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ2y0M\n" +
"gIMOE32Cnwf/aFTKv5vxQTDkvTyKPLh/i/AfA4PEDyRF+oX0INTnZ3BwfUZxFoCs\n" +
"XBcxolqtjZdOUPmGEIj0GbDCQs/NyHuqESdiUYdAlodACepqALnIrT2DdlLL5OMx\n" +
"NgyakbrsLSWAKVayDbljuEQ0pU+NfkYFgZFDDRM9dVMRw3CEfnEnjiGmU+S6dx6b\n" +
"011UCtICWS50d0hXxyjCOM+0BEpYD6mH7ZEx+8CIXkAAZgVwGdmRzvbe2KAtgxGo\n" +
"vF+3DzsPfP/GguaUwpFblz6IUnjVKvdc7FYv+1TlJRvCJgKCXWHHtq6eOthIoQgv\n" +
"eJGglnQla0Sys+druwpYPAF/08aWXSBW1bkBDQRdxbkdAQgAtySuGbe3+CDetv5A\n" +
"vodDVSZu9MzreT1zVUce2EDKWYzukEOuqJLU/49sB11Nh59Q+mV7TRle8+0KXsLq\n" +
"3DxZejuN7JBGWKF/6HU8huIunDXkbixK6bPOcXTBKxUJJkW6gRPtwtP03uJqDblq\n" +
"U4huA1NNKTJXdz3kiHRyNIZYVFMDaWiX+btRFr3Vcplo9Gyn+uklzArZZjrdIzwv\n" +
"xBIRDu+cy8uvREy1KRx+AFWUAidKUldrUZ2kMpaOWG663/4Byvv7HcOTKhdiqVLU\n" +
"N9gkeZnr+JQGwme5/+2aZJVuYgjIf89lsYF2y+C4ByNhkaaYkilv7RGhBw+srAdj\n" +
"WDHWvwARAQABiQE8BBgBCAAmFiEE9y0e0M5kgwkiGmLb2y0MgIMOE30FAl3FuR0C\n" +
"GwwFCQPDShMACgkQ2y0MgIMOE32+dAf/doJBIiNn1WqS7jUmek4Yz71AzzsLVo+z\n" +
"5/Q4hDoSaQAXxYZcNt2SUqtmwdZ4vctEWp5xXn9g5ysd82LIT2QR8PRCWdWbiK9Z\n" +
"kGYDjabMsOt/+aACfvxbqrL48oXMdTgAET2t6LSKJHoyNlXPvgwtHxKk5O4tANJR\n" +
"8DmL1H1UlI9mSuipHYPPRTMxMdknnVaiKwVIXdkTm514XxLWLJB3Hkjrb2AHhwxb\n" +
"Lih5kdsxL/DoZ1Ss73SZWVATbpUAtkXbOAcePjGdpUS91krHGFacYSH4plnHGhcT\n" +
"2HfZWiN/fi2hfE9gXhRGYXiS8pRd0eMemt+gUIUkAyRy33BHvzkW2Q==\n" +
" =hGsM\n" +
"-----END PGP PUBLIC KEY BLOCK-----";
let TEKST_FOUT_ENGELS = 0;
let TEKST_FOUT_MISSENDE_PARAMETERS = 1;
let TEKST_FOUT_ONJUISTE_HANDTEKENING = 2;
let TEKST_FOUT_CORRUPTE_HANDTEKENING = 3;
let TEKST_FOUT_VERLOPEN = 4;
let teksten = [];
teksten[TEKST_FOUT_ENGELS] = "Helaas hebben we alleen een Engelse foutmelding voor deze fout. Als u dit aankunt, lees dan de onderstaande tekst:";
teksten[TEKST_FOUT_MISSENDE_PARAMETERS] = "Ongeldige URL: missende parameters.";
teksten[TEKST_FOUT_ONJUISTE_HANDTEKENING] = "Ongeldige URL: ongeldige handtekening.";
teksten[TEKST_FOUT_CORRUPTE_HANDTEKENING] = "Ongeldige URL: handtekening corrupt.";
teksten[TEKST_FOUT_VERLOPEN] = "Betaalverzoek is verlopen.";
let vertaaldeFouten = {};
vertaaldeFouten["Error during parsing. This message / key probably does not conform to a valid OpenPGP format."] = TEKST_FOUT_CORRUPTE_HANDTEKENING;
function toonFout(tekstId, opties) {
vulVeldIn("foutmelding", teksten[tekstId]);
document.getElementById("betaal-fout").style.display = "block";
if (opties) {
if (opties["toonHandtekening"]) {
document.getElementById("fout-handtekening").style.display = "block";
}
if (opties["engelseFout"]) {
vulVeldIn("fout-engels", opties["engelseFout"]);
document.getElementById("fout-engels").style.display = "block";
}
}
}
function vulVeldIn(veld, data) {
let velden = document.querySelectorAll("*[data-veld='" + veld + "']");
for (let i = 0; i < velden.length; i++) {
velden[i].innerText = data;
}
}
function goeieOuweOntkink(object) {
return;
//alert(JSON.stringify(object));
}
document.addEventListener("DOMContentLoaded", function() {
try {
//goeieOuweOntkink("Verkrijgen parameters")
// Verkrijg parameters
let aanvraagParameters = new URLSearchParams(window.location.search);
let aan = aanvraagParameters.get("aan");
let betreft = aanvraagParameters.get("betreft");
let bedrag = aanvraagParameters.get("bedrag");
let iban = aanvraagParameters.get("iban");
let datum = aanvraagParameters.get("datum");
let handtekening = aanvraagParameters.get("handtekening");
goeieOuweOntkink(aanvraagParameters);
//Controleer of ze allemaal zijn ingevuld.
if (aan === null || betreft === null || bedrag === null || iban === null
|| datum === null || handtekening === null) {
toonFout(TEKST_FOUT_MISSENDE_PARAMETERS);
return;
}
// Maak een tekenreeks van alle parameters
let nakijkParameters = new URLSearchParams();
nakijkParameters.append("aan", aan);
nakijkParameters.append("betreft", betreft);
nakijkParameters.append("bedrag", bedrag);
nakijkParameters.append("iban", iban);
nakijkParameters.append("datum", datum);
handtekening = "-----BEGIN PGP SIGNATURE-----\n\n" + handtekening + "\n-----END PGP SIGNATURE-----";
belofte1 = openpgp.cleartext.fromText(nakijkParameters.toString())
belofte2 = openpgp.signature.readArmored(handtekening)
belofte3 = openpgp.key.readArmored(publiekeSleutel)
Promise.all([belofte1, belofte2, belofte3])
.then(function(waardes) {
console.log(waardes);
opties = {
message: waardes[0],
signature: waardes[1],
publicKeys: waardes[2].keys
}
return openpgp.verify(opties).then(function(geverifieerd) {
let handtekening2 = geverifieerd.signatures[0];
vulVeldIn("handtekening-vingerafdruk", handtekening2.keyid.toHex());
vulVeldIn("onderteken-datum", handtekening2.signature.packets[0].created.toLocaleString());
vulVeldIn("handtekening", handtekening);
if (geverifieerd.signatures[0].valid) {
console.info("Handtekekning juist");
return Promise.resolve(geverifieerd.signatures[0]);
} else {
console.info("Handtekening onjuist");
toonFout(TEKST_FOUT_ONJUISTE_HANDTEKENING, {"toonHandtekening": true});
return Promise.reject();
}
});
}, function(fout) {
console.error(fout.message);
fout2 = vertaaldeFouten[fout.message];
if (fout2) {
toonFout(fout2);
} else {
toonFout(TEKST_FOUT_ENGELS, {"engelseFout": fout.name + ": " + fout.message});
}
return Promise.reject();
}).then(function(handtekening2) {
console.log(handtekening2);
vulVeldIn("aan", aan);
vulVeldIn("betreft", betreft);
vulVeldIn("bedrag", bedrag);
vulVeldIn("iban", iban);
document.getElementById("betaal-info").style.display = "block";
});
let ondertekendeTekst = nakijkParameters.toString();
console.log(ondertekendeTekst);
} catch(e) {
console.error(e);
toonFout(TEKST_FOUT_ENGELS, {"engelseFout": e.name + ": " + e.message});
}
});