199 lines
7 KiB
JavaScript
199 lines
7 KiB
JavaScript
console.info("ondertekening.js geladen");
|
|
const publiekeSleutel = `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
mDMEZFK5rRYJKwYBBAHaRw8BAQdAMTYOa+tK/1ojqvcwm6COXF17/e7mXJi/zsjM
|
|
1CWniLK0IENocmlzIEpvc3RlbiA8YmV0YWxlbkBuZXRzb2oubmw+iJkEExYIAEEW
|
|
IQTgjDs2/86n2pVsTdyKiCQFquzvCwUCZFK5rQIbAwUJA8MvcwULCQgHAgIiAgYV
|
|
CgkICwIEFgIDAQIeBwIXgAAKCRCKiCQFquzvC2v4AP0T+w0GHfW3GcMgexSLAxYU
|
|
XsstC+kzhYoeKkX9MiqQwwD9GSi9J3GgxLzRalsgGDkSK3Ia39RWK9uFkg8UCq/I
|
|
xAaJATMEEAEIAB0WIQQLgn4CBXfMJA//RIJxt+XUHlPEMwUCZFK6BAAKCRBxt+XU
|
|
HlPEM1ZpCACABZ1Iegb0HWs3s/a7OEQz7ynDmGMCndcRnTMX2RhdEv80Ajgh1cuD
|
|
LGBFg6i58jzSp1EzKI7QAkv6UuEce+iH1Axdvfx+XQmbft2eo/YYRqLDsg94oIFb
|
|
EsXQqOHCTWf57EUAN4beM+3jnHdmq/4ZEu1mJxps7HDxqlO0nrUyBPcjw5SGrmAv
|
|
jucs0DTRwTTS1tAcYcdVAG4LxwpAQNiw73bOp++FBPJg3UvV31RxbW0ZIIZ1goWf
|
|
ULWnBpCx7qABuBI+LPNUOKA5poAhGymTOh48muau7kBgC6yJmvR5/WEkyISvcbFa
|
|
yF//d4JWgUmo8kFE8eRekxYVWEV3Y6pouDgEZFK5rRIKKwYBBAGXVQEFAQEHQMje
|
|
uAuRdPjl/LV4lXgs5yW1AAVkNsJfRxwWJ3Vn2zEwAwEIB4h+BBgWCAAmFiEE4Iw7
|
|
Nv/Op9qVbE3ciogkBars7wsFAmRSua0CGwwFCQPDL3MACgkQiogkBars7wvoyAD/
|
|
RFNkqCy0d4pv0cHZMLam1El+mefgPs0gd77kRiNLO78BALKCQOtKE1+INMD+dApP
|
|
hs9ssb71ob7pPbLispAYsn8O
|
|
=SCX7
|
|
-----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 TEKST_FOUT_VEROUDERD = 5;
|
|
|
|
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.";
|
|
teksten[TEKST_FOUT_VEROUDERD] = "Dit is een verlopen, verouderd betaalverzoek. Vraag de maker om een nieuw betaalverzoek op te sturen.";
|
|
|
|
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));
|
|
}
|
|
|
|
function valutaNaarSymbool(valuta) {
|
|
switch (valuta.toUpperCase()) {
|
|
case "EUR":
|
|
return "€";
|
|
case "USD":
|
|
return "$";
|
|
default:
|
|
return valuta.toUpperCase();
|
|
}
|
|
}
|
|
|
|
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 handtekening = aanvraagParameters.get("handtekening");
|
|
let valuta = aanvraagParameters.get("valuta");
|
|
|
|
// Eerdere betaalverzoeken hadden geen valuta parameter, maar wel een datum.
|
|
if (valuta === null && aanvraagParameters.get("datum") != null) {
|
|
toonFout(TEKST_FOUT_VEROUDERD);
|
|
return;
|
|
}
|
|
goeieOuweOntkink(aanvraagParameters);
|
|
|
|
//Controleer of ze allemaal zijn ingevuld.
|
|
if (aan === null || betreft === null || bedrag === null || iban === null
|
|
|| handtekening === null || valuta == 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("valuta", valuta);
|
|
|
|
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);
|
|
vulVeldIn("valuta-symbool", valutaNaarSymbool(valuta));
|
|
let betaalLinkParameters = new URLSearchParams();
|
|
betaalLinkParameters.append("amount", valuta.toUpperCase() + ":" + bedrag.replaceAll(",", "."));
|
|
betaalLinkParameters.append("message", betreft);
|
|
betaalLinkParameters.append("receiver-name", aan);
|
|
|
|
document.getElementById("betaallink-iban").href = "payto://iban/" + iban + "/?"
|
|
+ betaalLinkParameters.toString();
|
|
|
|
document.getElementById("betaallink-contant").href = "payto://void/?"
|
|
+ betaalLinkParameters.toString();
|
|
|
|
document.getElementById("betaal-info").style.display = "block";
|
|
|
|
let qrValue = `BCD
|
|
002
|
|
1
|
|
SCT
|
|
|
|
${aan}
|
|
${iban}
|
|
${valuta}${bedrag.replace(",", ".")}
|
|
|
|
|
|
${betreft}
|
|
via betalen.chris.netsoj.nl
|
|
`;
|
|
|
|
// https://www.europeanpaymentscouncil.eu/sites/default/files/KB/files/EPC069-12%20v2.1%20Quick%20Response%20Code%20-%20Guidelines%20to%20Enable%20the%20Data%20Capture%20for%20the%20Initiation%20of%20a%20SCT.pdf
|
|
let qr = new QRious({
|
|
element: document.getElementById('qr-sepa'),
|
|
level: "M",
|
|
size: 200,
|
|
value: qrValue
|
|
});
|
|
});
|
|
|
|
|
|
let ondertekendeTekst = nakijkParameters.toString();
|
|
console.log(ondertekendeTekst);
|
|
} catch(e) {
|
|
console.error(e);
|
|
toonFout(TEKST_FOUT_ENGELS, {"engelseFout": e.name + ": " + e.message});
|
|
}
|
|
});
|