From 8592d934467ad2de8aaee06afa46e41604ee41ce Mon Sep 17 00:00:00 2001
From: blek
Date: Thu, 21 Sep 2023 13:04:26 +1000
Subject: [PATCH] improve qr code gen & use V1 for encrypting the link
---
package.json | 3 +-
src/GameCreator.svelte | 46 +++++-----
src/lib/cipher.ts | 10 ++-
yarn.lock | 195 +++++++++++++++++++++++++++++++++++++++--
4 files changed, 222 insertions(+), 32 deletions(-)
diff --git a/package.json b/package.json
index 8cc50b5..e0960a0 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"@sveltejs/vite-plugin-svelte": "^2.4.2",
"@tsconfig/svelte": "^5.0.0",
"@types/node": "^20.5.9",
+ "@types/qrcode": "^1.5.2",
"svelte": "^4.0.5",
"svelte-check": "^3.4.6",
"tslib": "^2.6.0",
@@ -22,6 +23,6 @@
},
"dependencies": {
"copy-to-clipboard": "^3.3.3",
- "qr-creator": "^1.0.0"
+ "qrcode": "^1.5.3"
}
}
diff --git a/src/GameCreator.svelte b/src/GameCreator.svelte
index d0bb520..741a524 100644
--- a/src/GameCreator.svelte
+++ b/src/GameCreator.svelte
@@ -5,30 +5,33 @@
import ModalContent from "./modal/ModalContent.svelte";
import ModalFooter from "./modal/ModalFooter.svelte";
import ModalTitle from "./modal/ModalTitle.svelte";
- import { encode } from "./lib/cipher";
- import { getRandom } from "./targets";
+ import { V1 } from "./lib/cipher";
+
+ import { toCanvas } from "qrcode";
export let show = false;
- let word = getRandom(5);
- let qrurl: string | false = false;
+ let word = '';
let wordurl = '';
+ let wordgend = false;
let qrcanvas: HTMLCanvasElement;
- async function upd_qr() {
- if (word == '') return;
- if (!qrcanvas) return;
- wordurl = `${window.location.protocol}//${window.location.host}?challenge=${encodeURIComponent(btoa(encode(word)))}`;
- const QrCreator = (await import('qr-creator')).default;
+ async function upd_qr(e: any) {
+
+ if (!e.target.value.match(/^[a-z]+$/i)) {
+ word = e.target.value.replace(/[^a-z]/gm, '');
+ }
- QrCreator.render({
- text: wordurl,
- radius: 0.5,
- ecLevel: 'L',
- fill: '#000000',
- background: '#ffffff',
- size: 120
- }, qrcanvas);
+ if (word == '') {
+ wordgend = false;
+ return
+ }
+ if (!qrcanvas) return;
+ wordurl = `${window.location.protocol}//${window.location.host}?challenge=${encodeURIComponent(btoa((await V1.encode(word)).join(';')))}`;
+ toCanvas(qrcanvas, wordurl, {
+ width: 200
+ });
+ wordgend = true;
}
async function copylink() {
@@ -36,9 +39,6 @@
copy(wordurl);
}
- onMount(async () => {
- await upd_qr();
- })
{#if show}
@@ -51,14 +51,14 @@
Word:
-
+
-
+
- {show = false; word = getRandom(5); upd_qr()}}>
+ {show = false}}>
Close
diff --git a/src/lib/cipher.ts b/src/lib/cipher.ts
index ccc261a..132dd94 100644
--- a/src/lib/cipher.ts
+++ b/src/lib/cipher.ts
@@ -62,20 +62,24 @@ export class V1 {
// sssshhh.. dont tell anyone :p
static aes256secret = 'skater_girl';
- static async encode(word: string): Promise