From e32a2520e8897c057f3515800764a76fd4276321 Mon Sep 17 00:00:00 2001 From: Luke Granger-Brown Date: Sun, 1 May 2022 16:24:29 +0100 Subject: [PATCH] web/lukegbcom: add tools/wifi-qrcode This is a (undocumented) tool for generating printable A4/Letter-sized Wifi QR code sheets. It takes URL parameters: * eventName: this is either the name of an event or a URL to a logo for it * ssid: network SSID * psk: network password; if not set, the network is assumed to have no password * hidden: if present, the network is assumed to be hidden --- web/lukegbcom/pages/tools/wifi-qrcode.js | 72 ++++++++++++++++++ .../pages/tools/wifi-qrcode.module.scss | 61 +++++++++++++++ web/lukegbcom/public/assets/wifi.png | Bin 0 -> 28180 bytes 3 files changed, 133 insertions(+) create mode 100644 web/lukegbcom/pages/tools/wifi-qrcode.js create mode 100644 web/lukegbcom/pages/tools/wifi-qrcode.module.scss create mode 100644 web/lukegbcom/public/assets/wifi.png diff --git a/web/lukegbcom/pages/tools/wifi-qrcode.js b/web/lukegbcom/pages/tools/wifi-qrcode.js new file mode 100644 index 0000000000..41cf24d459 --- /dev/null +++ b/web/lukegbcom/pages/tools/wifi-qrcode.js @@ -0,0 +1,72 @@ +import Head from 'next/head' +import Link from 'next/link' +import styles from './wifi-qrcode.module.scss' +import { QRCodeSVG } from 'qrcode.react' + +function generateQRString(details) { + const bits = { + S: details.ssid, + } + if (details.psk) { + bits.P = details.psk + bits.T = "WPA" + } else { + bits.T = "nopass" + } + if (details.hidden) { + bits.H = "true" + } + const escapeStr = (s) => { + if (s.match(/^[0-9A-Fa-f]+$/)) { + return `"${s}"` + } + return s + } + const generateWifiFromBits = (bits) => { + let o = []; + for (const b in bits) { + if (!bits.hasOwnProperty(b)) continue + o.push(`${b}:${escapeStr(bits[b])}`) + } + return o.join(';') + } + return `WIFI:${generateWifiFromBits(bits)};;` +} + +function WifiQRCode({ details }) { + const hasLogo = details.eventName.match(/^http[s]?:/) + + console.log(generateQRString(details)) + + return ( +
+
+ {hasLogo ? + : +

{details.eventName}

} +

SSID: {details.ssid}

+ +
Password: {details.psk}
+ +
+
+ ) +} + +WifiQRCode.getInitialProps = async (ctx) => { + const { + eventName, + ssid, + psk, + hidden, + } = ctx.query + + return {details: { + eventName, + ssid, + psk, + hidden, + }} +} + +export default WifiQRCode diff --git a/web/lukegbcom/pages/tools/wifi-qrcode.module.scss b/web/lukegbcom/pages/tools/wifi-qrcode.module.scss new file mode 100644 index 0000000000..3c8bb8920e --- /dev/null +++ b/web/lukegbcom/pages/tools/wifi-qrcode.module.scss @@ -0,0 +1,61 @@ +@media screen { + .background { + background: #ddd; + margin: 0; + padding: 0; + + display: flex; + justify-content: center; + + min-height: 100vh; + } + .page { + background: #fff; + width: 210mm; + height: 297mm; + } +} + +@media print { + .page { + width: 100vw; + height: 100vh; + } +} + +.page * { + margin: 0; + padding: 0; +} + +.page { + text-align: center; + padding: 0 1rem; + + display: flex; + flex-direction: column; + justify-content: space-around; + align-items: center; +} + +.event, .eventLogo { + font-size: 36pt; +} + +.network { + font-size: 42pt; +} + +.qrcode { + width: 50%; + height: auto; +} + +.passwordContainer { + font-size: 32pt; +} + +.wifiLogo { + width: 20%; + height: auto; +} diff --git a/web/lukegbcom/public/assets/wifi.png b/web/lukegbcom/public/assets/wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..02c3a7f18d77be39d62b62e3e07e2ee10e584677 GIT binary patch literal 28180 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