89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
const nocodbService = require('./nocodb');
|
|
const logger = require('../utils/logger');
|
|
const config = require('../config');
|
|
|
|
class AccountExpirationService {
|
|
constructor() {
|
|
this.checkInterval = null;
|
|
}
|
|
|
|
// Start the expiration check service
|
|
start() {
|
|
// Run check every hour
|
|
this.checkInterval = setInterval(() => {
|
|
this.checkExpiredAccounts();
|
|
}, 60 * 60 * 1000); // 1 hour
|
|
|
|
// Also run immediately on start
|
|
this.checkExpiredAccounts();
|
|
|
|
logger.info('Account expiration service started');
|
|
}
|
|
|
|
// Stop the service
|
|
stop() {
|
|
if (this.checkInterval) {
|
|
clearInterval(this.checkInterval);
|
|
this.checkInterval = null;
|
|
}
|
|
}
|
|
|
|
// Check and handle expired accounts
|
|
async checkExpiredAccounts() {
|
|
try {
|
|
// Get all users
|
|
const users = await nocodbService.getLoginRecords();
|
|
|
|
const now = new Date();
|
|
const expiredUsers = [];
|
|
|
|
for (const user of users) {
|
|
if (user.ExpiresAt && new Date(user.ExpiresAt) < now) {
|
|
expiredUsers.push(user);
|
|
}
|
|
}
|
|
|
|
// Delete expired accounts
|
|
for (const user of expiredUsers) {
|
|
await this.deleteExpiredAccount(user);
|
|
}
|
|
|
|
if (expiredUsers.length > 0) {
|
|
logger.info(`Deleted ${expiredUsers.length} expired temp accounts`);
|
|
}
|
|
|
|
} catch (error) {
|
|
logger.error('Error checking expired accounts:', error);
|
|
}
|
|
}
|
|
|
|
// Delete a single expired account
|
|
async deleteExpiredAccount(user) {
|
|
try {
|
|
await nocodbService.deleteRecord(
|
|
config.nocodb.loginSheetId,
|
|
user.Id
|
|
);
|
|
|
|
logger.info(`Deleted expired temp account: ${user.Email}`);
|
|
|
|
// Optional: Send notification email before deletion
|
|
// await emailService.sendAccountExpirationNotice(user.Email);
|
|
|
|
} catch (error) {
|
|
logger.error(`Failed to delete expired account ${user.Email}:`, error);
|
|
}
|
|
}
|
|
|
|
// Calculate expiration date based on admin settings
|
|
static calculateExpirationDate(expireDays) {
|
|
if (!expireDays || expireDays <= 0) return null;
|
|
|
|
const expirationDate = new Date();
|
|
expirationDate.setDate(expirationDate.getDate() + expireDays);
|
|
return expirationDate;
|
|
}
|
|
}
|
|
|
|
module.exports = new AccountExpirationService();
|