mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
34 lines
1,009 B
TypeScript
34 lines
1,009 B
TypeScript
|
|
import { generateRandomString } from "oslo/crypto";
|
||
|
|
import { TimeSpan, createDate, type TimeSpanUnit } from 'oslo';
|
||
|
|
import { HashingService } from "./hashing.service";
|
||
|
|
|
||
|
|
export class TokensService {
|
||
|
|
private readonly hashingService = new 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 verifyHashedToken(hashedToken: string, token: string) {
|
||
|
|
return this.hashingService.verify(hashedToken, token)
|
||
|
|
}
|
||
|
|
}
|