From c403ca036bde25300af27674f5877b8c21b566ea Mon Sep 17 00:00:00 2001 From: s2 Date: Wed, 15 Nov 2017 16:56:03 +0100 Subject: [PATCH] initial commit --- README.md | 5 +++++ icons/lock-32.png | Bin 0 -> 473 bytes icons/lock-48.png | Bin 0 -> 647 bytes icons/lock.png | Bin 0 -> 7301 bytes manifest.json | 24 +++++++++++++++++++++++ popup/pwgen.css | 1 + popup/pwgen.html | 26 +++++++++++++++++++++++++ popup/pwgen.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 104 insertions(+) create mode 100644 README.md create mode 100644 icons/lock-32.png create mode 100644 icons/lock-48.png create mode 100644 icons/lock.png create mode 100644 manifest.json create mode 100644 popup/pwgen.css create mode 100644 popup/pwgen.html create mode 100644 popup/pwgen.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..c4b6e6d --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# pwgen + +## What it does ## + +Simply generate a password and copy it to the clipboard diff --git a/icons/lock-32.png b/icons/lock-32.png new file mode 100644 index 0000000000000000000000000000000000000000..66cb06ef9a3e663a5089f78a96e2d8c9554036ee GIT binary patch literal 473 zcmV;~0Ve*5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0003`s#D=7R?U z*>mP3L$b4pXNIwfGrZt8rPt@EV+27mhX?!@c*HygnkK&BTF~Vi+Zaez@B`OEe<{~{ z+L|@=l?k+98*9O1%%YO2;RssPUi*$Jdd@CvLw&Vd=$3V4w`w0f=NY!y9*VL9Tl0z` zcxM{6(I>`Hlren3*3Q5?%dkzZQ8rhwwX5)s_R}`GMA@9e);8ds4cI0=1DwFt#sNwX zpg)ZR=*Dsb+vE)wCF$m5Yj2^RhnR#jx{KYx7KU(-QRK1!S3w9%$R+!;3rXjOT;c$6 zfH*)LAPx`*(81AlaR~abx#*yfJx+(v#uS`cgr07@J@55HJ)dCC0!h*V&va#OOZB8& P00000NkvXXu0mjfn+U|1 literal 0 HcmV?d00001 diff --git a/icons/lock-48.png b/icons/lock-48.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc31db9f31eb40d06cc3bc0a3cd7662e22db6fd GIT binary patch literal 647 zcmV;20(kw2P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0005@NklAAT@d{WN zN!-91SS{`_jd#r_Ji;1K9?zJhm9gEJOw$~vk+V&ZLVYMNe(F%#qWkw&tb@xyH+SlaEfi3oP=Ift0N+9ZzJ&sO z3kCQV3h*ry;9DrbxBsJnGB4`&^KR;*ejV1qWw3?Rbfb({LH~ZykL;PEZ|64Q;=d68 hN@LL1oW|fQl{W#sWH`l}o!bBa002ovPDHLkV1noq8x8;f literal 0 HcmV?d00001 diff --git a/icons/lock.png b/icons/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea1ca9a3e0a8f9e997194dd8dd4046ac449a3ca GIT binary patch literal 7301 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 VZlA8A>@OjJa&&d5v-kh){{XNuBmDpX literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..532f447 --- /dev/null +++ b/manifest.json @@ -0,0 +1,24 @@ +{ + "description": "Just a toolbar button that generates a password and copies it to your clipboard.", + "manifest_version": 2, + "name": "pwgen", + "version": "1.0", + "homepage_url": "http://www.google.com", + "icons": { + "48": "icons/lock-48.png" + }, + "browser_action": { + "default_icon": "icons/lock-32.png", + "theme_icons": [{ + "light": "icons/lock-32-light.png", + "dark": "icons/lock-32.png", + "size": 32 + }], + "default_title": "pwgen", + "default_popup": "popup/pwgen.html" + }, + "permissions": [ + "clipboardWrite", + "storage" + ] +} diff --git a/popup/pwgen.css b/popup/pwgen.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/popup/pwgen.css @@ -0,0 +1 @@ + diff --git a/popup/pwgen.html b/popup/pwgen.html new file mode 100644 index 0000000..d20db4b --- /dev/null +++ b/popup/pwgen.html @@ -0,0 +1,26 @@ + + + + + + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + diff --git a/popup/pwgen.js b/popup/pwgen.js new file mode 100644 index 0000000..036976d --- /dev/null +++ b/popup/pwgen.js @@ -0,0 +1,48 @@ +function randPassword(length, includeSpecial) { + let pwdChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; + if (includeSpecial) { + pwdChars += '°^!"§$%&/()=?`´\}][{²³€|<>-.,;:*+_'; + } + let randPassword = Array(length).fill(pwdChars).map(function(x) { + return x[Math.floor(Math.random() * x.length)] + }).join(''); + return randPassword; +} + +function getParams() { + return { + length: parseInt(document.getElementById('length').value), + special: document.getElementById('special').checked + } +} + +function loadOptions() { + return browser.storage.local.get({ + length: 14, + special: true + }); +} + +function saveOptions(options) { + return browser.storage.local.set(options); +} + +document.getElementById('new').addEventListener('click', (ev) => { + ev.preventDefault(); + var params = getParams(); + document.getElementById('pw').value = randPassword(params.length, params.special); + saveOptions(params); +}); + +document.getElementById('copy').addEventListener('click', (ev) => { + ev.preventDefault(); + var copyText = document.getElementById('pw'); + copyText.select(); + document.execCommand('copy'); +}); + +loadOptions().then((options) => { + document.getElementById('length').value = options.length; + document.getElementById('special').checked = options.special; + document.getElementById('pw').value = randPassword(getParams().length, getParams().special); +});