Inital commit
This commit is contained in:
commit
d76392f99b
7 changed files with 453 additions and 0 deletions
156
programmaatjes/ondertekening.js
Normal file
156
programmaatjes/ondertekening.js
Normal file
|
@ -0,0 +1,156 @@
|
|||
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});
|
||||
}
|
||||
});
|
2
programmaatjes/openpgp.js
Normal file
2
programmaatjes/openpgp.js
Normal file
File diff suppressed because one or more lines are too long
2
programmaatjes/openpgp.js.bak
Normal file
2
programmaatjes/openpgp.js.bak
Normal file
File diff suppressed because one or more lines are too long
2
programmaatjes/veelvul.urlsearchparams.js
Normal file
2
programmaatjes/veelvul.urlsearchparams.js
Normal file
|
@ -0,0 +1,2 @@
|
|||
/*! (c) Andrea Giammarchi - ISC */
|
||||
var self=this||{};try{!function(t,e){if(new t("q=%2B").get("q")!==e||new t({q:e}).get("q")!==e||new t([["q",e]]).get("q")!==e||"q=%0A"!==new t("q=\n").toString()||"q=+%26"!==new t({q:" &"}).toString()||"q=%25zx"!==new t({q:"%zx"}).toString())throw t;self.URLSearchParams=t}(URLSearchParams,"+")}catch(t){!function(t,a,o){"use strict";var u=t.create,h=t.defineProperty,e=/[!'\(\)~]|%20|%00/g,n=/%(?![0-9a-fA-F]{2})/g,r=/\+/g,i={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},s={append:function(t,e){p(this._ungap,t,e)},delete:function(t){delete this._ungap[t]},get:function(t){return this.has(t)?this._ungap[t][0]:null},getAll:function(t){return this.has(t)?this._ungap[t].slice(0):[]},has:function(t){return t in this._ungap},set:function(t,e){this._ungap[t]=[a(e)]},forEach:function(e,n){var r=this;for(var i in r._ungap)r._ungap[i].forEach(t,i);function t(t){e.call(n,t,a(i),r)}},toJSON:function(){return{}},toString:function(){var t=[];for(var e in this._ungap)for(var n=v(e),r=0,i=this._ungap[e];r<i.length;r++)t.push(n+"="+v(i[r]));return t.join("&")}};for(var c in s)h(f.prototype,c,{configurable:!0,writable:!0,value:s[c]});function f(t){var e=u(null);switch(h(this,"_ungap",{value:e}),!0){case!t:break;case"string"==typeof t:"?"===t.charAt(0)&&(t=t.slice(1));for(var n=t.split("&"),r=0,i=n.length;r<i;r++){var a=(s=n[r]).indexOf("=");-1<a?p(e,g(s.slice(0,a)),g(s.slice(a+1))):s.length&&p(e,g(s),"")}break;case o(t):for(r=0,i=t.length;r<i;r++){var s;p(e,(s=t[r])[0],s[1])}break;case"forEach"in t:t.forEach(l,e);break;default:for(var c in t)p(e,c,t[c])}}function l(t,e){p(this,e,t)}function p(t,e,n){var r=o(n)?n.join(","):n;e in t?t[e].push(r):t[e]=[r]}function g(t){return decodeURIComponent(t.replace(n,"%25").replace(r," "))}function v(t){return encodeURIComponent(t).replace(e,d)}function d(t){return i[t]}self.URLSearchParams=f}(Object,String,Array.isArray)}!function(d){var r=!1;try{r=!!Symbol.iterator}catch(t){}function t(t,e){var n=[];return t.forEach(e,n),r?n[Symbol.iterator]():{next:function(){var t=n.shift();return{done:void 0===t,value:t}}}}"forEach"in d||(d.forEach=function(n,r){var i=this,t=Object.create(null);this.toString().replace(/=[\s\S]*?(?:&|$)/g,"=").split("=").forEach(function(e){!e.length||e in t||(t[e]=i.getAll(e)).forEach(function(t){n.call(r,t,e,i)})})}),"keys"in d||(d.keys=function(){return t(this,function(t,e){this.push(e)})}),"values"in d||(d.values=function(){return t(this,function(t,e){this.push(t)})}),"entries"in d||(d.entries=function(){return t(this,function(t,e){this.push([e,t])})}),!r||Symbol.iterator in d||(d[Symbol.iterator]=d.entries),"sort"in d||(d.sort=function(){for(var t,e,n,r=this.entries(),i=r.next(),a=i.done,s=[],c=Object.create(null);!a;)e=(n=i.value)[0],s.push(e),e in c||(c[e]=[]),c[e].push(n[1]),a=(i=r.next()).done;for(s.sort(),t=0;t<s.length;t++)this.delete(s[t]);for(t=0;t<s.length;t++)e=s[t],this.append(e,c[e].shift())}),function(f){function l(t){var e=t.append;t.append=d.append,URLSearchParams.call(t,t._usp.search.slice(1)),t.append=e}function p(t,e){if(!(t instanceof e))throw new TypeError("'searchParams' accessed on an object that does not implement interface "+e.name)}function t(e){var n,r,i,t=e.prototype,a=v(t,"searchParams"),s=v(t,"href"),c=v(t,"search");function o(t,e){d.append.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function u(t){d.delete.call(this,t),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}function h(t,e){d.set.call(this,t,e),t=this.toString(),i.set.call(this._usp,t?"?"+t:"")}!a&&c&&c.set&&(i=c,r=function(t,e){return t.append=o,t.delete=u,t.set=h,g(t,"_usp",{configurable:!0,writable:!0,value:e})},n=function(t,e){return g(t,"_searchParams",{configurable:!0,writable:!0,value:r(e,t)}),e},f.defineProperties(t,{href:{get:function(){return s.get.call(this)},set:function(t){var e=this._searchParams;s.set.call(this,t),e&&l(e)}},search:{get:function(){return c.get.call(this)},set:function(t){var e=this._searchParams;c.set.call(this,t),e&&l(e)}},searchParams:{get:function(){return p(this,e),this._searchParams||n(this,new URLSearchParams(this.search.slice(1)))},set:function(t){p(this,e),n(this,t)}}}))}var g=f.defineProperty,v=f.getOwnPropertyDescriptor;try{t(HTMLAnchorElement),/^function|object$/.test(typeof URL)&&URL.prototype&&t(URL)}catch(t){}}(Object)}(self.URLSearchParams.prototype,Object);
|
Loading…
Add table
Add a link
Reference in a new issue