1
0
mirror of https://github.com/XFox111/PasswordGeneratorExtension.git synced 2026-07-02 19:52:43 +03:00

Compare commits

...

3 Commits

Author SHA1 Message Date
Michael Gordeev 8a1a2bc009 Minor 1.3 (#6)
- Added more special characters for password
- Increased minimal password length to 6 characters
- Fixed "Do not repeat characters" option
- Now passwords always include all types of characters
2021-03-06 12:16:00 +03:00
Michael Gordeev 5dd5b8876b Updated CI config 2021-03-03 16:52:28 +03:00
Michael Gordeev f142d8c3a6 Minor 1.2 (#5)
- Added option "Do not repeat characters"
- Updated GitHub release template
- Updated CI config
2021-03-03 16:44:06 +03:00
8 changed files with 92 additions and 20 deletions
+10 -1
View File
@@ -1,6 +1,15 @@
## What's new
-
## How to install
## Installation
### From extension webstore (recommended)
- [Google Chrome Webstore](https://chrome.google.com/webstore/detail/jnjobgjobffgmgfnkpkjfjkkfhfikmfl)
- [Microsoft Edge Add-ons Webstore](https://microsoftedge.microsoft.com/addons/detail/manimdhobjbkfpeeehlhhneookiokpbj)
- [Firefox Add-ons](https://addons.mozilla.org/en-US/firefox/addon/easy-password-generator/)
- [GitHub Releases](https://github.com/xfox111/PasswordGeneratorExtension/releases/latest)
Note that version published on these webstores can differ from this release
### Sideloading (for testing purposes only)
1. Download attached archive and unpack it
2. Enable Developers mode on your browser extensions page
3. Click "Load unpacked" button and navigate to the extension root folder (contains `manifest.json`)
+12 -7
View File
@@ -1,12 +1,8 @@
name: CI
on:
workflow_dispatch:
push:
branches: [ master ]
paths:
# Trigger deploy on manifest change
- 'manifest.json'
release:
types: [published]
jobs:
Firefox:
@@ -35,7 +31,7 @@ jobs:
uses: actions/upload-artifact@v2
with:
name: 'Firefox Artefacts'
path: ${{ steps.web-ext-sign.outputs.target }}
path: ${{ steps.web-ext-build.outputs.target }}
Chrome:
runs-on: ubuntu-latest
@@ -58,6 +54,15 @@ jobs:
client-secret: ${{ secrets.CHROME_CLIENT_SECRET }}
refresh-token: ${{ secrets.CHROME_REFRESH_TOKEN }}
- name: Upload artifact
uses: xresloader/upload-to-github-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
file: ./PasswordGenerator.zip
tags: true
draft: false
- name: Drop artifacts
uses: actions/upload-artifact@v2
with:
+10
View File
@@ -29,6 +29,11 @@
"message": "Invalid generator settings. No password was generated",
"description": "Message which is shown after a creation of password failed"
},
"notEnoughChars":
{
"message": "With your current settings, your password length should not exceed %MIN_CHARS% characters",
"description": "Message which is shown if there's no enough characters to create a password"
},
"lengthPrompt":
{
"message": "Set password length. Press OK to use default password length (%LEN% characters)",
@@ -80,6 +85,11 @@
"message": "Exclude ambiguous characters (e.g.",
"description": "Option checkbox label"
},
"dontRepeatChars":
{
"message": "Do not repeat characters",
"description": "Option checkbox label"
},
"extOptions":
{
+10
View File
@@ -29,6 +29,11 @@
"message": "Установлены неправильные настройки генератора. Ничего не было сгенерировано",
"description": "Message which is shown after a creation of password failed"
},
"notEnoughChars":
{
"message": "При текущих параметрах длина создаваемого пароля должна быть не больше %MIN_CHARS% знаков",
"description": "Message which is shown if there's no enough characters to create a password"
},
"lengthPrompt":
{
"message": "Укажите длину пароля. Нажмите ОК чтобы использовать длину по умолчанию (%LEN% символов)",
@@ -80,6 +85,11 @@
"message": "Исключить специальные символы (например:",
"description": "Option checkbox label"
},
"dontRepeatChars":
{
"message": "Не повторять символы",
"description": "Option checkbox label"
},
"extOptions":
{
+9 -4
View File
@@ -10,6 +10,7 @@ chrome.storage.sync.get(
includeUppercase: true,
excludeSimilar: true,
excludeSpecial: true,
dontRepeatChars: false,
// Extension settings
showButton: true,
@@ -32,6 +33,7 @@ chrome.storage.sync.get(
"includeUppercase",
"excludeSimilar",
"excludeSpecial",
"dontRepeatChars",
"showButton",
"showContext",
@@ -47,8 +49,11 @@ chrome.storage.sync.get(
function SetupEventHandlers()
{
document.querySelectorAll("input").forEach(i =>
i.addEventListener("input",
() => chrome.storage.sync.set(JSON.parse("{ \"" + i.id + "\": " + (i.type == "checkbox" ? i.checked : i.value) + " }"))));
i.addEventListener(
"input",
() => chrome.storage.sync.set(JSON.parse("{ \"" + i.id + "\": " + (i.type == "checkbox" ? i.checked : i.value) + " }"))
)
);
document.querySelector("#generate").addEventListener("click", () => GeneratePassword(null, true));
document.querySelector("#more").addEventListener("click", (s) =>
@@ -57,12 +62,12 @@ function SetupEventHandlers()
if (group.hasAttribute("hidden"))
{
group.removeAttribute("hidden");
s.currentTarget.querySelector("i").textContent = "";
s.currentTarget.querySelector("i").textContent = "\uE010";
}
else
{
group.setAttribute("hidden", "");
s.currentTarget.querySelector("i").textContent = "";
s.currentTarget.querySelector("i").textContent = "\uE011";
}
});
}
+34 -6
View File
@@ -2,7 +2,7 @@
const upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lowerCase = upperCase.toLowerCase();
const numbers = "1234567890";
const specialCharacters = "@#$%";
const specialCharacters = "!#$%&*+-=?@^_";
const ambiguousCharacters = "{}[]()/\\'\"`~,;:.<>";
const similarCharacters = "il1Lo0O";
@@ -49,7 +49,8 @@ function GeneratePassword(e, useDefaultLength = false)
excludeSimilar: true,
excludeSpecial: true,
hideAlert: false,
promptForLength: false
promptForLength: false,
dontRepeatChars: false,
},
(settings) =>
{
@@ -73,7 +74,6 @@ function GeneratePassword(e, useDefaultLength = false)
return;
}
let password = "";
var pwdLength = settings.length;
if (settings.promptForLength && !useDefaultLength)
while(true)
@@ -82,7 +82,7 @@ function GeneratePassword(e, useDefaultLength = false)
if (response === null) // If user clicked 'Cancel'
return;
if (parseInt(response))
if (parseInt(response) && response >= 6)
{
pwdLength = response;
break;
@@ -91,8 +91,27 @@ function GeneratePassword(e, useDefaultLength = false)
break;
}
for (k = 0; k < pwdLength; k++)
password += availableCharacters[GetRandomInt(0, availableCharacters.length)]; // Picking random characters
if (settings.dontRepeatChars && availableCharacters.length < pwdLength)
{
alert(chrome.i18n.getMessage("notEnoughChars").replace("%MIN_CHARS%", availableCharacters.length));
return;
}
do
{
var password = "";
var leftCharacters = availableCharacters;
for (k = 0; k < pwdLength; k++)
{
password += leftCharacters[GetRandomInt(0, leftCharacters.length)]; // Picking random characters
if (settings.dontRepeatChars)
leftCharacters = leftCharacters.replace(password[k], "");
}
}
while (!((!settings.includeSymbols || ContainsAny(password, specialCharacters)) &&
(!settings.includeNumbers || ContainsAny(password, numbers)) &&
(!settings.includeLowercase || ContainsAny(password, lowerCase)) &&
(!settings.includeUppercase || ContainsAny(password, upperCase))));
let field = e?.target.previousElementSibling;
// Creating a hidden field if called as standalone
@@ -125,4 +144,13 @@ function GeneratePassword(e, useDefaultLength = false)
function GetRandomInt(min, max)
{
return Math.floor(Math.random() * (max - min)) + min;
}
function ContainsAny(array1, array2)
{
for(var k = 0; k < array2.length; k++)
if (array1.includes(array2[k]))
return true;
return false;
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "__MSG_name__",
"version": "1.1",
"version": "1.3",
"manifest_version": 2,
"description": "__MSG_description__",
"author": "__MSG_author__",
+6 -1
View File
@@ -20,7 +20,7 @@
<h2 loc="generatorOptions">Generator options</h2>
<div class="group">
<label for="length" style="margin: 5px 0px;"><b loc="length">Password length</b></label>
<input id="length" type="number" />
<input id="length" type="number" min="6"/>
<label><span loc="hint">Reccommended password length:</span> <b>16-32</b></label>
</div>
<div class="group">
@@ -54,6 +54,11 @@
<span class="mark"></span>
<span><span loc="excludeSpecial">Exclude ambiguous characters (e.g.</span> { } [ ] ( ) / \ ' " ` ~ , ; : . &lt; &gt;)</span>
</label>
<label class="checkbox control">
<input id="dontRepeatChars" type="checkbox" />
<span class="mark"></span>
<span><span loc="dontRepeatChars">Do not repeat characters</span>
</label>
</div>
<h2 loc="extOptions">Extension options</h2>