From 615b18242167f0d020e5a887141d8cb74355e2be Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Sat, 18 Jan 2025 04:24:27 -0500 Subject: [PATCH] init --- .github/workflows/jsr-publish.yml | 25 +++++ .gitignore | 175 ++++++++++++++++++++++++++++++ README.md | 24 ++++ build.ts | 24 ++++ bun.lockb | Bin 0 -> 105416 bytes index.ts | 1 + package.json | 76 +++++++++++++ src/index.ts | 117 ++++++++++++++++++++ tsconfig.json | 27 +++++ 9 files changed, 469 insertions(+) create mode 100644 .github/workflows/jsr-publish.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.ts create mode 100755 bun.lockb create mode 100644 index.ts create mode 100644 package.json create mode 100644 src/index.ts create mode 100644 tsconfig.json diff --git a/.github/workflows/jsr-publish.yml b/.github/workflows/jsr-publish.yml new file mode 100644 index 0000000..578212b --- /dev/null +++ b/.github/workflows/jsr-publish.yml @@ -0,0 +1,25 @@ +name: Publish +on: + push: + branches: + - main + +jobs: + publish: + runs-on: ubuntu-latest + + permissions: + contents: read + id-token: write + + steps: + - uses: actions/checkout@v4 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: latest + - name: Publish package + run: | + bun install + bun run build + bunx jsr publish --allow-slow-types diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b1ee42 --- /dev/null +++ b/.gitignore @@ -0,0 +1,175 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..6e474e9 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Wifi Password Share + +## Platforms +- MacOS + ```bash + networksetup -listpreferredwirelessnetworks en0 + security find-generic-password -D "AirPort network password" -a $SSID -w + ``` +- Windows + ```powershell + $_, $ssid = ((netsh wlan show interface | findstr "Profile" | findstr /v "mode") -split ":",2).trim(); + $_, $pass = ((netsh wlan show profile name=$ssid key=clear | findstr Key) -split ":").trim(); + ``` +- Linux + ```bash + ssid=$(nmcli device wifi show-password | grep SSID | cut -d : -f 2 | xargs) + password=$(nmcli device wifi show-password | grep Password | cut -d : -f 2 | xargs) + ``` + +## Features + +- Reveal Wifi Password from current machine +- Generate Connection QR Code, mobile devices can scan to connect directly + diff --git a/build.ts b/build.ts new file mode 100644 index 0000000..c0d3da2 --- /dev/null +++ b/build.ts @@ -0,0 +1,24 @@ +import { watch } from "fs" +import { join } from "path" +import { refreshTemplateWorkerExtension } from "@kksh/api/dev" +import { $ } from "bun" + +async function build() { + try { + await $`bun build --minify --target=browser --outdir=./dist ./src/index.ts` + await refreshTemplateWorkerExtension() + } catch (error) { + console.error(error) + } +} + +const srcDir = join(import.meta.dir, "src") + +await build() + +if (Bun.argv.includes("dev")) { + console.log(`Watching ${srcDir} for changes...`) + watch(srcDir, { recursive: true }, async (event, filename) => { + await build() + }) +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..5afbe89d3e3bfe1bb5de3dd881c6d884f9d0a0bf GIT binary patch literal 105416 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
2g<_PnUJ^FmM2kr0a!1&fY?(>S; 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 + new List.Item({ + title: x, + value: x, + icon: new Icon({ + type: IconEnum.Iconify, + value: "mdi:wifi" + }) + }) + ) + } + + async load() { + ui.setSearchBarPlaceholder("Search for wifi and press enter to get password") + const platform = await os.platform() + if (platform === "macos") { + const cmd = shell.createCommand("networksetup", ["-listpreferredwirelessnetworks", "en0"]) + const result = await cmd.execute() + if (result.code !== 0) { + toast.error("Failed to get wifi password") + return + } + this.networks = result.stdout + .trim() + .split("\n") + .slice(1) + .map((x) => x.trim()) + } + return ui.render( + new List.List({ + items: this.listItems + }) + ) + } + + async onListItemSelected(ssid: string): Promise { + ui.render( + new List.List({ + inherits: ["items"], + detail: undefined + }) + ) + const cmd = shell.createCommand("security", [ + "find-generic-password", + "-D", + `AirPort network password`, + "-a", + ssid, + "-w" + ]) + const result = await cmd.execute() + if (result.code !== 0) { + console.log(result.stderr) + toast.error("Failed to get wifi password") + return + } + const wifiPassword = result.stdout.trim() + toast.success(`Wifi password: ${wifiPassword}, written to clipboard`) + clipboard.writeText(wifiPassword) + const wifiConnectUrl = `WIFI:S:${ssid};T:WPA;P:${wifiPassword};;` + let qrcodeSvg: string | undefined + try { + qrcodeSvg = await qrcode.toString(wifiConnectUrl) + } catch (error) { + toast.error(`Failed to generate QR code: ${error}`) + console.error(error) + } + // + if (!qrcodeSvg) { + return toast.error("Failed to generate QR code") + } + const markdown = ` +
+
+ ${qrcodeSvg} +
+

Wifi Password: ${wifiPassword}

+

Connect URL: ${wifiConnectUrl}

+
+` + return ui.render( + new List.List({ + inherits: ["items"], + detail: new List.ItemDetail({ + width: 60, + children: [new Markdown(markdown)] + }) + }) + ) + } +} + +expose(new ExtensionTemplate()) diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..49ca356 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + // Enable latest features + "lib": [ + "ESNext", + "DOM" + ], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": false, + "verbatimModuleSyntax": true, + "noEmit": true, + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} \ No newline at end of file