mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { inject, injectable } from '@needle-di/core';
|
|
import { TimeSpan, type TimeSpanUnit, createDate } from 'oslo';
|
|
import { generateRandomString } from 'oslo/crypto';
|
|
import { HashingService } from '../common/services/hashing.service';
|
|
|
|
@injectable()
|
|
export class TokensService {
|
|
constructor(private hashingService = inject(HashingService)) {}
|
|
|
|
generateToken() {
|
|
const alphabet = '23456789ACDEFGHJKLMNPQRSTUVWXYZ'; // alphabet with removed look-alike characters (0, 1, O, I)
|
|
return generateRandomString(6, alphabet);
|
|
}
|
|
|
|
generateTokenWithExpiry(number: number, lifespan: TimeSpanUnit) {
|
|
return {
|
|
token: this.generateToken(),
|
|
expiry: createDate(new TimeSpan(number, lifespan)),
|
|
};
|
|
}
|
|
|
|
async generateTokenWithExpiryAndHash(number: number, lifespan: TimeSpanUnit) {
|
|
const token = this.generateToken();
|
|
const hashedToken = await this.hashingService.hash(token);
|
|
return {
|
|
token,
|
|
hashedToken,
|
|
expiry: createDate(new TimeSpan(number, lifespan)),
|
|
};
|
|
}
|
|
|
|
async createHashedToken(token: string) {
|
|
return this.hashingService.hash(token);
|
|
}
|
|
|
|
async verifyHashedToken(hashedToken: string, token: string) {
|
|
return this.hashingService.verify(hashedToken, token);
|
|
}
|
|
}
|