diff --git a/src/errors/errors.ts b/src/errors/errors.ts index a436c6b80..9052a8c44 100644 --- a/src/errors/errors.ts +++ b/src/errors/errors.ts @@ -15,7 +15,3 @@ export class ClientError extends Error { export class PermissionError extends Error { name = 'PermissionError'; } - -export class RandomnessError extends Error { - name = 'RandomnessError'; -} diff --git a/src/users/auth-token.entity.ts b/src/users/auth-token.entity.ts index e49516f7a..2497957e1 100644 --- a/src/users/auth-token.entity.ts +++ b/src/users/auth-token.entity.ts @@ -22,7 +22,7 @@ export class AuthToken { @CreateDateColumn() createdAt: Date; - @Column() + @Column({ unique: true }) accessToken: string; public static create( diff --git a/src/users/users.service.ts b/src/users/users.service.ts index db2ee724e..e27f453e4 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -7,7 +7,7 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { NotInDBError, RandomnessError } from '../errors/errors'; +import { NotInDBError } from '../errors/errors'; import { ConsoleLoggerService } from '../logger/console-logger.service'; import { UserInfoDto } from './user-info.dto'; import { User } from './user.entity'; @@ -38,26 +38,14 @@ export class UsersService { identifier: string, ): Promise { const user = await this.getUserByUsername(userName); - let accessToken = ''; - let randomString = ''; - for (let i = 0; i < 100; i++) { - try { - randomString = crypt.randomBytes(64).toString("base64"); - accessToken = await this.hashPassword(randomString); - await this.getUserByAuthToken(accessToken); - } catch (NotInDBError) { - const token = AuthToken.create(user, identifier, accessToken); - const createdToken = this.authTokenRepository.save(token); - return { - accessToken: randomString, - ...createdToken - } - } - } - // This should never happen - throw new RandomnessError( - 'Your machine is not able to generate not-in-use tokens. This should never happen.', - ); + const randomString = crypt.randomBytes(64).toString('base64'); + const accessToken = await this.hashPassword(randomString); + const token = AuthToken.create(user, identifier, accessToken); + const createdToken = this.authTokenRepository.save(token); + return { + accessToken: randomString, + ...createdToken, + }; } async deleteUser(userName: string) {