157 lines
6.3 KiB
JavaScript
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});
|
|
}
|
|
});
|