Browse Source

Getting closer to an actual badge

pull/1/head
Vitor Pamplona 5 years ago
parent
commit
5fee1c2cc5
7 changed files with 44 additions and 19 deletions
  1. BIN
      img/ok-24.png
  2. BIN
      img/ok-256.png
  3. BIN
      img/ok-32.png
  4. BIN
      img/ok-48.png
  5. BIN
      img/ok-64.png
  6. +4
    -0
      style.verify.css
  7. +40
    -19
      verify.html

BIN
img/ok-24.png View File

Before After
Width: 24  |  Height: 24  |  Size: 628 B

BIN
img/ok-256.png View File

Before After
Width: 256  |  Height: 256  |  Size: 15 KiB

BIN
img/ok-32.png View File

Before After
Width: 32  |  Height: 32  |  Size: 772 B

BIN
img/ok-48.png View File

Before After
Width: 48  |  Height: 48  |  Size: 6.2 KiB

BIN
img/ok-64.png View File

Before After
Width: 64  |  Height: 64  |  Size: 1.6 KiB

+ 4
- 0
style.verify.css View File

@ -12,6 +12,10 @@ h1 {
margin: 0 auto; margin: 0 auto;
} }
.green {
color: #0F7F12;
}
.center-in-div { .center-in-div {
margin: 0; margin: 0;
position: absolute; position: absolute;


+ 40
- 19
verify.html View File

@ -23,9 +23,10 @@
<div id="post-verify-section" style="display: none;"> <div id="post-verify-section" style="display: none;">
<div class="card center-in-div"> <div class="card center-in-div">
<canvas id="qr"></canvas><br/>
<h1 id="qr-verify-title" style="text-align: center;"></h1>
<canvas style="padding:0px 50px" id="qr"></canvas><br/>
<h1 id="qr-verify-name" style="text-align: center;"></h1> <h1 id="qr-verify-name" style="text-align: center;"></h1>
<h1 id="qr-verify-verified" style="text-align: center;"></h1>
<h2 id="qr-verify-verified" style="text-align: center;"></h2>
</div> </div>
</div> </div>
</div> </div>
@ -44,6 +45,16 @@
<script> <script>
function e(elem) { return document.getElementById(elem); } function e(elem) { return document.getElementById(elem); }
const monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];
function parseDate(str) {
if(!/^(\d){8}$/.test(str)) return "invalid date";
var y = str.substr(0,4),
m = str.substr(4,2),
d = str.substr(6,2);
return monthNames[parseInt(m)] + ' ' + d + ', ' + y;
}
function verifyQRCode() { function verifyQRCode() {
let qr = e("qr-verify").value; let qr = e("qr-verify").value;
let uri = qr.substring(qr.indexOf("CRED:")); let uri = qr.substring(qr.indexOf("CRED:"));
@ -51,41 +62,51 @@
e("pre-verify-section").style.display = 'none'; e("pre-verify-section").style.display = 'none';
e("post-verify-section").style.display = ''; e("post-verify-section").style.display = '';
let params = {margin:0, width:700, errorCorrectionLevel: 'M', color: {dark: '#3654DD' }};
QRCode.toCanvas(e('qr'), uri, params, function (error) {});
const [schema, type, version, signatureBase32NoPad, pubKeyLink, payload] = PCF.parseURI(uri); const [schema, type, version, signatureBase32NoPad, pubKeyLink, payload] = PCF.parseURI(uri);
const result = PCF.downloadKeyVerify(pubKeyLink, payload, signatureBase32NoPad); const result = PCF.downloadKeyVerify(pubKeyLink, payload, signatureBase32NoPad);
const fields = PCF.getPayloadFields(payload);
let params = {margin:0, width:700, errorCorrectionLevel: 'M', color: {dark: '#3654DD' }};
QRCode.toCanvas(e('qr'), uri, params, function (error) {
if (result) {
const imgDim={width:150,height:150}; //logo dimention
var context = e('qr').getContext('2d');
var imageObj = new Image();
imageObj.src = './img/ok-256.png';
imageObj.onload = function() {
context.drawImage(imageObj,
e('qr').width / 2 - imgDim.width / 2 +1,
e('qr').height / 2 - imgDim.height / 2,imgDim.width,imgDim.height);
};
}
});
if (result == null) { if (result == null) {
e('qr-verify-verified').innerHTML = "Unable to Verify"; e('qr-verify-verified').innerHTML = "Unable to Verify";
} else if (result) { } else if (result) {
e('qr-verify-verified').innerHTML = "Credential Verified";
e('qr-verify-verified').innerHTML = 'Signed by ' + pubKeyLink + ' on ' + parseDate(fields['date']);
} else { } else {
e('qr-verify-verified').innerHTML = "Credential Invalid"; e('qr-verify-verified').innerHTML = "Credential Invalid";
} }
const fields = PCF.getPayloadFields(payload);
console.log(fields);
if (type == 'BADGE') { if (type == 'BADGE') {
e('qr-verify-name').innerHTML = "Badge for: " + fields['name'] + "<br>";
e('qr-verify-name').innerHTML += "DoB: " + fields['dob'];
e('qr-verify-title').innerHTML = "COVID-19 Vaccine Record"
e('qr-verify-name').innerHTML = fields['name'] + "<br>";
e('qr-verify-name').innerHTML += parseDate(fields['dob']) + "<br>";
} }
if (type == 'STATUS') { if (type == 'STATUS') {
e('qr-verify-title').innerHTML = "COVID-19 Pass"
e('qr-verify-name').innerHTML = "Status: " + (fields['status'] === '2' ? "Vaccinated" : "Not Vaccinated") + "<br />"; e('qr-verify-name').innerHTML = "Status: " + (fields['status'] === '2' ? "Vaccinated" : "Not Vaccinated") + "<br />";
e('qr-verify-name').innerHTML += "Initials: " + fields['initials'] + "<br>"; e('qr-verify-name').innerHTML += "Initials: " + fields['initials'] + "<br>";
} }
if (type == 'PASSKEY') { if (type == 'PASSKEY') {
e('qr-verify-name').innerHTML = "PassKey for: " + fields['name'] + "<br>"; e('qr-verify-name').innerHTML = "PassKey for: " + fields['name'] + "<br>";
e('qr-verify-name').innerHTML += "DoB: " + fields['dob'];
}
if (type == 'PASSKEY') {
e('qr-verify-name').innerHTML = "PassKey for: " + fields['name'] + "<br>";
e('qr-verify-name').innerHTML += "DoB: " + fields['dob'];
e('qr-verify-name').innerHTML += "DoB: " + parseDate(fields['dob']);
} }
if (type == 'LIBERTY') { if (type == 'LIBERTY') {
e('qr-verify-name').innerHTML = "Liberty Pass for: " + fields['firstName'] + " " + fields['lastName'] + "<br>";
e('qr-verify-name').innerHTML += "DoB: " + fields['dob'];
e('qr-verify-title').innerHTML = "COVID-19 Pass"
e('qr-verify-name').innerHTML = fields['firstName'] + " " + fields['lastName'] + "<br>";
e('qr-verify-name').innerHTML += fields['dob'];
} }
} else { } else {
e('qr-verify-verified').innerHTML = "Certificate not found. "; e('qr-verify-verified').innerHTML = "Certificate not found. ";


Loading…
Cancel
Save