diff --git a/src/js/main.js b/src/js/main.js index ae0040a7f267a531f7629e196c741d4e4f9cc383..f736df9e876c388a9aad6157603ef6ac42b7f028 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -1,5 +1,16 @@ import {Html5Qrcode} from "html5-qrcode"; +import { + ed448 +} from "@noble/curves/ed448"; +import { + Buffer +} from "buffer"; + +function htoa(h) { + return Uint8Array.from(Buffer.from(h,"hex")); +} + var received_items = {}; var scanner = new Html5Qrcode("reader",{}); var scanner_audio = new Audio("/beep.wav"); @@ -15,6 +26,7 @@ function updateItemsView() { } } + export async function addItemTag(form) { if (form.value.length == 6) { var response = await fetch("http://127.0.0.1:8000/tag/"+form.value); @@ -83,3 +95,25 @@ export async function loadStorages() { } } + +async function onRecevierScanSuccess(scannedCode) { + var [uuid,signature] = scannedCode.split("/"); + scanner_audio.play(); + await scanner.stop(); + + var response = await fetch("http://127.0.0.1:8000/item/"+uuid); + if (response.status == 200) { + var tracking_item = await response.json(); + if (ed448.verify(htoa(signature),new TextEncoder().encode(tracking_item.uuid),htoa(tracking_item.verification))) { + document.querySelector("#uuid").innerHTML = tracking_item.uuid; + document.querySelector("#tag").innerHTML = tracking_item.tag; + document.querySelector("#storage").innerHTML = tracking_item.storage; + document.querySelector("#addressee").innerHTML = tracking_item.addressee; + document.querySelector("#team").innerHTML = tracking_item.team; + } + } +} + +export async function scanReceiver() { + scanner.start({ facingMode: "user" }, { fps: 10, qrbox: { width: 250, height: 250 } }, onRecevierScanSuccess); +} diff --git a/src/views/checkout.html b/src/views/checkout.html new file mode 100644 index 0000000000000000000000000000000000000000..55dd80df34ed2e3e9909d52793157be7cfb0b0bb --- /dev/null +++ b/src/views/checkout.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html lang="de"> + <head> + <title>Paketshop: Checkout</title> + <module href="/components/head.html"></module> + </head> + + <body> + <div class="container"> + <h1>Checkout</h1> + <div class="row"> + <button onclick="lib.scanReceiver()" class="btn btn-primary">Scan Code</button> + </div> + <div class="row"> + <div id="reader" style="width: 500px; margin 0 auto;"></div> + </div> + <div class="row"> + <h2 id="uuid"></h2> + <div class="col-md-6"> + <strong id="storage"></strong><br> + <span id="tag"></span> + </div> + <div class="col-md-6"> + <strong id="addressee"></strong><br> + <span id="team"></span> + </div> + </div> + </div> + <module href="/components/foot.html"></module> + </body> +</html>