Skip to content

Commit

Permalink
ci(core): Avoid slow bcrypt calls in tests (no-changelog) (#8570)
Browse files Browse the repository at this point in the history
  • Loading branch information
netroy authored and OlegIvaniv committed Feb 12, 2024
1 parent 69eaba8 commit af54047
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
9 changes: 4 additions & 5 deletions packages/cli/src/services/password.utility.ts
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/test/integration/ldap/ldap.api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
7 changes: 5 additions & 2 deletions packages/cli/test/integration/shared/db/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@ 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`.
*/
export async function createUser(attributes: Partial<User> = {}): Promise<User> {
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',
Expand Down Expand Up @@ -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',
Expand Down

0 comments on commit af54047

Please sign in to comment.