2024-11-08 21:57:13 +00:00
|
|
|
import {inject, injectable} from "tsyringe";
|
|
|
|
|
import {generateRandomString} from "oslo/crypto";
|
|
|
|
|
import {createDate, TimeSpan, type TimeSpanUnit} from 'oslo';
|
|
|
|
|
import {HashingService} from "./hashing.service";
|
2024-07-29 01:39:42 +00:00
|
|
|
|
2024-07-31 01:50:46 +00:00
|
|
|
@injectable()
|
2024-07-29 01:39:42 +00:00
|
|
|
export class TokensService {
|
2024-07-31 01:50:46 +00:00
|
|
|
constructor(@inject(HashingService) private readonly hashingService: HashingService) { }
|
2024-07-29 01:39:42 +00:00
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-10 17:03:30 +00:00
|
|
|
async createHashedToken(token: string) {
|
|
|
|
|
return this.hashingService.hash(token)
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-29 01:39:42 +00:00
|
|
|
async verifyHashedToken(hashedToken: string, token: string) {
|
|
|
|
|
return this.hashingService.verify(hashedToken, token)
|
|
|
|
|
}
|
|
|
|
|
}
|