Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ <h1 class="text-3xl font-bold text-white text-center mb-6">
<span class="text-white">Symbols</span>
</label>
</div>
<div>
<input type="checkbox" id="non-ambiguous" />
<label for="non-ambiguous">
<span class="text-white">Non-ambiguous characters</span>
</label>
</div>
</div>
<button
id="generate"
Expand Down
32 changes: 24 additions & 8 deletions script.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ var lowerCase = "abcdefghijklmnopqrstuvwxyz";
var upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numbers = "0123456789";
var symbols = "!@#$%^&*()_+-=";
var ambiguousChars = "0Oo1lI";
function fallbackCopyTextToClipboard(text) {
var textArea = document.createElement("textarea");
textArea.value = text;
Expand Down Expand Up @@ -43,6 +44,7 @@ function generatePassword(params) {
upper: true,
numbers: true,
symbols: false,
nonAmbiguous: false,
mode: "standard",
};

Expand All @@ -58,23 +60,31 @@ function generatePassword(params) {
}

// Standard password generation
var filterAmbiguous = function(chars) {
if (!params.nonAmbiguous) return chars;
return chars.split("").filter(function(c) { return ambiguousChars.indexOf(c) === -1; }).join("");
};
var chars = "";
var generatedPassword = "";
if (params.lower) {
chars += lowerCase;
generatedPassword += generatePasswordFrom(lowerCase, Math.min(1, params.length - generatedPassword.length));
var lower = filterAmbiguous(lowerCase);
chars += lower;
generatedPassword += generatePasswordFrom(lower, Math.min(1, params.length - generatedPassword.length));
}
if (params.upper) {
chars += upperCase;
generatedPassword += generatePasswordFrom(upperCase, Math.min(1, params.length - generatedPassword.length));
var upper = filterAmbiguous(upperCase);
chars += upper;
generatedPassword += generatePasswordFrom(upper, Math.min(1, params.length - generatedPassword.length));
}
if (params.numbers) {
chars += numbers;
generatedPassword += generatePasswordFrom(numbers, Math.min(1, params.length - generatedPassword.length));
var nums = filterAmbiguous(numbers);
chars += nums;
generatedPassword += generatePasswordFrom(nums, Math.min(1, params.length - generatedPassword.length));
}
if (params.symbols) {
chars += symbols;
generatedPassword += generatePasswordFrom(symbols, Math.min(1, params.length - generatedPassword.length));
var syms = filterAmbiguous(symbols);
chars += syms;
generatedPassword += generatePasswordFrom(syms, Math.min(1, params.length - generatedPassword.length));
}
generatedPassword += generatePasswordFrom(chars, params.length - generatedPassword.length);
return generatedPassword.split("").sort(() => Math.random() - 0.5).join("");
Expand Down Expand Up @@ -129,13 +139,15 @@ var params = {
upper: true,
numbers: true,
symbols: false,
nonAmbiguous: false,
mode: "standard",
};
var length = document.getElementById("length");
var lowerCheckbox = document.getElementById("lower");
var upperCheckbox = document.getElementById("upper");
var digitsCheckbox = document.getElementById("digits");
var symbolsCheckbox = document.getElementById("symbols");
var nonAmbiguousCheckbox = document.getElementById("non-ambiguous");
var modeStandard = document.getElementById("mode-standard");
var modeHex = document.getElementById("mode-hex");
var modeBase64 = document.getElementById("mode-base64");
Expand Down Expand Up @@ -163,6 +175,10 @@ symbolsCheckbox.addEventListener("input", function () {
params.symbols = symbolsCheckbox.checked;
password.value = generatePassword(params);
});
nonAmbiguousCheckbox.addEventListener("input", function () {
params.nonAmbiguous = nonAmbiguousCheckbox.checked;
password.value = generatePassword(params);
});
generate.addEventListener("click", function () {
password.value = generatePassword(params);
});
Expand Down