UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

71 lines (70 loc) 3.02 kB
import { AuthenticationError } from "../../exceptions/runtime.exceptions.js"; import { BaseService } from "./base.service.js"; import { RefreshToken } from "../../entities/refresh-token.entity.js"; import { AppConstants } from "../../server.constants.js"; import { AUTH_ERROR_REASON } from "../../constants/authorization.constants.js"; import "../../entities/index.js"; import { RefreshTokenDto } from "../interfaces/refresh-token.dto.js"; import { LessThan } from "typeorm"; import { v4 } from "uuid"; //#region src/services/orm/refresh-token.service.ts var RefreshTokenService = class RefreshTokenService extends BaseService(RefreshToken, RefreshTokenDto) { logger; constructor(settingsStore, loggerFactory, typeormService) { super(typeormService); this.settingsStore = settingsStore; this.logger = loggerFactory(RefreshTokenService.name); } toDto(entity) { return { id: entity.id, userId: entity.userId, expiresAt: entity.expiresAt, refreshAttemptsUsed: entity.refreshAttemptsUsed }; } async getRefreshToken(refreshToken) { const entity = await this.repository.findOneBy({ refreshToken }); if (!entity) throw new AuthenticationError(`The entity ${RefreshToken.name} by provided refresh token is not found`, AUTH_ERROR_REASON.InvalidOrExpiredRefreshToken); return entity; } async createRefreshTokenForUserId(userId) { const { refreshTokenExpiry } = await this.settingsStore.getCredentialSettings(); const refreshToken = v4(); const timespan = refreshTokenExpiry ?? AppConstants.DEFAULT_REFRESH_TOKEN_EXPIRY; if (!refreshTokenExpiry) this.logger.warn("Refresh token expiry not set in Settings:credentials, using default value"); await this.create({ userId, expiresAt: Date.now() + timespan * 1e3, refreshToken, refreshAttemptsUsed: 0 }); return refreshToken; } async updateRefreshTokenAttempts(refreshToken, refreshAttemptsUsed) { await this.getRefreshToken(refreshToken); await this.repository.update({ refreshToken }, { refreshAttemptsUsed }); } async purgeAllOutdatedRefreshTokens() { const result = await this.repository.delete({ expiresAt: LessThan(Date.now()) }); if (result.affected) this.logger.debug(`Removed ${result.affected} outdated refresh tokens`); } async deleteRefreshTokenByUserId(userId) { const result = await this.repository.delete({ userId }); if (result.affected) this.logger.debug(`Removed ${result.affected} login refresh tokens for user`); } async deleteRefreshToken(refreshToken) { const result = await this.repository.delete({ refreshToken }); if (result.affected) this.logger.debug(`Removed ${result.affected} login refresh tokens`); } async purgeOutdatedRefreshTokensByUserId(userId) { const result = await this.repository.delete({ userId, expiresAt: LessThan(Date.now()) }); if (result.affected) this.logger.debug(`Removed ${result.affected} outdated login refresh tokens for user`); } }; //#endregion export { RefreshTokenService }; //# sourceMappingURL=refresh-token.service.js.map