diff --git a/packages/cli/src/services/password.utility.ts b/packages/cli/src/services/password.utility.ts index 314a3fef71..8c8c3aaf19 100644 --- a/packages/cli/src/services/password.utility.ts +++ b/packages/cli/src/services/password.utility.ts @@ -1,18 +1,17 @@ import { BadRequestError } from '@/errors/response-errors/bad-request.error'; import { Service as Utility } from 'typedi'; -import { compare, genSaltSync, hash } from 'bcryptjs'; +import { compare, hash } from 'bcryptjs'; import { MAX_PASSWORD_CHAR_LENGTH as maxLength, MIN_PASSWORD_CHAR_LENGTH as minLength, } from '@/constants'; +const SALT_ROUNDS = 10; + @Utility() export class PasswordUtility { async hash(plaintext: string) { - const SALT_ROUNDS = 10; - const salt = genSaltSync(SALT_ROUNDS); - - return await hash(plaintext, salt); + return await hash(plaintext, SALT_ROUNDS); } async compare(plaintext: string, hashed: string) { diff --git a/packages/cli/test/integration/ldap/ldap.api.test.ts b/packages/cli/test/integration/ldap/ldap.api.test.ts index 5969fa4b7f..d60e515956 100644 --- a/packages/cli/test/integration/ldap/ldap.api.test.ts +++ b/packages/cli/test/integration/ldap/ldap.api.test.ts @@ -47,7 +47,7 @@ const testServer = utils.setupTestServer({ }); beforeAll(async () => { - owner = await createUser({ role: 'global:owner', password: 'password' }); + owner = await createUser({ role: 'global:owner' }); authOwnerAgent = testServer.authAgentFor(owner); defaultLdapConfig.bindingAdminPassword = Container.get(Cipher).encrypt( diff --git a/packages/cli/test/integration/shared/db/users.ts b/packages/cli/test/integration/shared/db/users.ts index 27defb2184..2ee01524bf 100644 --- a/packages/cli/test/integration/shared/db/users.ts +++ b/packages/cli/test/integration/shared/db/users.ts @@ -9,6 +9,9 @@ import { MfaService } from '@/Mfa/mfa.service'; import { randomApiKey, randomEmail, randomName, randomValidPassword } from '../random'; +// pre-computed bcrypt hash for the string 'password', using `await hash('password', 10)` +const passwordHash = '$2a$10$njedH7S6V5898mj6p0Jr..IGY9Ms.qNwR7RbSzzX9yubJocKfvGGK'; + /** * Store a user in the DB, defaulting to a `member`. */ @@ -16,7 +19,7 @@ export async function createUser(attributes: Partial = {}): Promise const { email, password, firstName, lastName, role, ...rest } = attributes; const user = Container.get(UserRepository).create({ email: email ?? randomEmail(), - password: await hash(password ?? randomValidPassword(), 10), + password: password ? await hash(password, 1) : passwordHash, firstName: firstName ?? randomName(), lastName: lastName ?? randomName(), role: role ?? 'global:member', @@ -101,7 +104,7 @@ export async function createManyUsers( [...Array(amount)].map(async () => Container.get(UserRepository).create({ email: email ?? randomEmail(), - password: await hash(password ?? randomValidPassword(), 10), + password: password ? await hash(password, 1) : passwordHash, firstName: firstName ?? randomName(), lastName: lastName ?? randomName(), role: role ?? 'global:member',