@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
JavaScript
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