jack zhang 62b2b5c68b
chore: add copyright information to the file header (#4028)
* 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>
2024-04-30 15:51:31 +08:00

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;
};