refactor: Password generation (#1847)

* refactor: Password generation

* Update main.js

* Update usercp_register.tpl

* Update main.js

* Updated

* Update main.js
This commit is contained in:
Roman Kelesidis 2025-03-11 22:14:28 +07:00 committed by GitHub
commit af2403f191
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 13 deletions

View file

@ -460,19 +460,33 @@ $(document).ready(function () {
/**
* Autocomplete password
**/
var array_for_rand_pass = ["a", "A", "b", "B", "c", "C", "d", "D", "e", "E", "f", "F", "g", "G", "h", "H", "i", "I", "j", "J", "k", "K", "l", "L", "m", "M", "n", "N", "o", "O", "p", "P", "q", "Q", "r", "R", "s", "S", "t", "T", "u", "U", "v", "V", "w", "W", "x", "X", "y", "Y", "z", "Z", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var array_rand = function (array) {
var array_length = array.length;
var result = Math.random() * array_length;
return Math.floor(result);
};
function generatePassword(length) {
const lowercaseChars = "abcdefghijklmnopqrstuvwxyz";
const uppercaseChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const numberChars = "0123456789";
const specialChars = "!@#$%^&*()_+~`|}{[]:;?><,./-=";
var autocomplete = function (noCenter) {
var string_result = ""; // Empty string
for (var i = 1; i <= 8; i++) {
string_result += array_for_rand_pass[array_rand(array_for_rand_pass)];
let password = [
getRandomChar(lowercaseChars),
getRandomChar(uppercaseChars),
getRandomChar(numberChars),
getRandomChar(specialChars)
];
for (let i = 4; i < length; i++) {
password.push(getRandomChar(lowercaseChars));
}
password = password.sort(() => Math.random() - 0.5);
return password.slice(0, length).join("");
}
function getRandomChar(charSet) {
return charSet[Math.floor(Math.random() * charSet.length)];
}
var autocomplete = function (noCenter = false, passwordLength = 10) {
let string_result = generatePassword(passwordLength);
var _popup_left = (Math.ceil(window.screen.availWidth / 2) - 150);
var _popup_top = (Math.ceil(window.screen.availHeight / 2) - 50);
@ -491,7 +505,7 @@ var autocomplete = function (noCenter) {
$(document).ready(function () {
$("span#autocomplete").click(function () {
autocomplete();
autocomplete(false, $(this).data('password-length'));
});
var _X, _Y;

View file

@ -41,7 +41,7 @@
<div class="title">{L_YOUR_NEW_PASSWORD}</div>
<div>
<input value="" autocomplete="off" type="text"/>
<span class="regenerate" title="{L_REGENERATE}" onclick="autocomplete(true);"></span>
<span class="regenerate" title="{L_REGENERATE}" onclick="autocomplete(true, {#PASSWORD_MIN_LENGTH#});"></span>
</div>
</div>
</div>
@ -85,7 +85,7 @@
<tr>
<td class="prof-title"><!-- IF EDIT_PROFILE -->{L_NEW_PASSWORD}: * <br/><h6>{L_PASSWORD_IF_CHANGED}</h6><!-- ELSE -->{L_PASSWORD}: *<!-- ENDIF --></td>
<td>
<input id="pass" type="<!-- IF SHOW_PASS -->text<!-- ELSE -->password<!-- ENDIF -->" name="new_pass" size="35" maxlength="32" value=""/>&nbsp;<span id="autocomplete" title="{L_AUTOCOMPLETE}">&#9668;</span>&nbsp;<i class="med">{PASSWORD_LONG}</i>
<input id="pass" type="<!-- IF SHOW_PASS -->text<!-- ELSE -->password<!-- ENDIF -->" name="new_pass" size="35" maxlength="32" value=""/>&nbsp;<span id="autocomplete" data-password-length="{#PASSWORD_MIN_LENGTH#}" title="{L_AUTOCOMPLETE}">&#9668;</span>&nbsp;<i class="med">{PASSWORD_LONG}</i>
</td>
</tr>
<tr>