mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-08 23:19:26 +08:00
* fix: add license code * fix: bug * fix: bug * fix: upgrade * fix: improve * chore: add copyright information to the file header * fix: d.ts bug * fix: bug * fix: e2e bug * fix: merge main --------- Co-authored-by: chenos <chenlinxh@gmail.com>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
/**
|
|
* This file is part of the NocoBase (R) project.
|
|
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
|
|
* Authors: NocoBase Team.
|
|
*
|
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
*/
|
|
|
|
export const generatePassword = (length = 10) => {
|
|
const uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
const lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz';
|
|
const numbers = '0123456789';
|
|
const specialCharacters = '!#$%^&*-_+=';
|
|
|
|
// Combine all character sets
|
|
const allCharacters = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
|
|
|
|
const passwordArray = new Uint32Array(length);
|
|
crypto.getRandomValues(passwordArray);
|
|
|
|
// Ensure at least one character from each character set
|
|
let password = '';
|
|
password += uppercaseLetters.charAt(passwordArray[0] % uppercaseLetters.length);
|
|
password += lowercaseLetters.charAt(passwordArray[1] % lowercaseLetters.length);
|
|
password += numbers.charAt(passwordArray[2] % numbers.length);
|
|
password += specialCharacters.charAt(passwordArray[3] % specialCharacters.length);
|
|
|
|
// Fill the rest of the password with random characters
|
|
for (let i = 4; i < length; i++) {
|
|
const randomIndex = passwordArray[i] % allCharacters.length;
|
|
password += allCharacters.charAt(randomIndex);
|
|
}
|
|
|
|
// Shuffle the password characters to ensure randomness
|
|
password =
|
|
password[0] +
|
|
password
|
|
.slice(1)
|
|
.split('')
|
|
.sort(() => Math.random() - 0.5)
|
|
.join('');
|
|
|
|
return password;
|
|
};
|