UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.

101 lines (100 loc) 3.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "RefreshTokenService", { enumerable: true, get: function() { return RefreshTokenService; } }); const _baseservice = require("./base.service"); const _entities = require("../../entities"); const _refreshtokendto = require("../interfaces/refresh-token.dto"); const _runtimeexceptions = require("../../exceptions/runtime.exceptions"); const _uuid = require("uuid"); const _serverconstants = require("../../server.constants"); const _typeorm = require("typeorm"); const _authorizationconstants = require("../../constants/authorization.constants"); class RefreshTokenService extends (0, _baseservice.BaseService)(_entities.RefreshToken, _refreshtokendto.RefreshTokenDto) { settingsStore; 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 _runtimeexceptions.AuthenticationError(`The entity ${_entities.RefreshToken.name} by provided refresh token is not found`, _authorizationconstants.AUTH_ERROR_REASON.InvalidOrExpiredRefreshToken); } return entity; } async createRefreshTokenForUserId(userId) { const { refreshTokenExpiry } = await this.settingsStore.getCredentialSettings(); const refreshToken = (0, _uuid.v4)(); const timespan = refreshTokenExpiry ?? _serverconstants.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 * 1000, 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: (0, _typeorm.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: (0, _typeorm.LessThan)(Date.now()) }); if (result.affected) { this.logger.debug(`Removed ${result.affected} outdated login refresh tokens for user`); } } } //# sourceMappingURL=refresh-token.service.js.map