|
|
|
|
@ -2,10 +2,11 @@ const { BeanModel } = require("redbean-node/dist/bean-model");
|
|
|
|
|
const { R } = require("redbean-node");
|
|
|
|
|
const { log, TYPES_WITH_DOMAIN_EXPIRY_SUPPORT_VIA_FIELD } = require("../../src/util");
|
|
|
|
|
const { parse: parseTld } = require("tldts");
|
|
|
|
|
const { getDaysRemaining, getDaysBetween, setting, setSetting } = require("../util-server");
|
|
|
|
|
const { setting, setSetting } = require("../util-server");
|
|
|
|
|
const { Notification } = require("../notification");
|
|
|
|
|
const { default: NodeFetchCache, MemoryCache } = require("node-fetch-cache");
|
|
|
|
|
const TranslatableError = require("../translatable-error");
|
|
|
|
|
const dayjs = require("dayjs");
|
|
|
|
|
|
|
|
|
|
const cachedFetch = process.env.NODE_ENV
|
|
|
|
|
? NodeFetchCache.create({
|
|
|
|
|
@ -199,18 +200,18 @@ class DomainExpiry extends BeanModel {
|
|
|
|
|
* @returns {Promise<DomainExpiry>} Domain expiry bean
|
|
|
|
|
*/
|
|
|
|
|
static async findByDomainNameOrCreate(domainName) {
|
|
|
|
|
const existing = await DomainExpiry.findByName(domainName);
|
|
|
|
|
if (existing) {
|
|
|
|
|
return existing;
|
|
|
|
|
let domain = await DomainExpiry.findByName(domainName);
|
|
|
|
|
if (!domain && domainName) {
|
|
|
|
|
domain = await DomainExpiry.createByName(domainName);
|
|
|
|
|
}
|
|
|
|
|
return DomainExpiry.createByName(domainName);
|
|
|
|
|
return domain;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @returns {number} number of days remaining before expiry
|
|
|
|
|
*/
|
|
|
|
|
get daysRemaining() {
|
|
|
|
|
return getDaysRemaining(new Date(), new Date(this.expiry));
|
|
|
|
|
return dayjs.utc(this.expiry).diff(dayjs.utc(), "day");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -227,20 +228,20 @@ class DomainExpiry extends BeanModel {
|
|
|
|
|
*/
|
|
|
|
|
static async checkExpiry(domainName) {
|
|
|
|
|
let bean = await DomainExpiry.findByDomainNameOrCreate(domainName);
|
|
|
|
|
|
|
|
|
|
let expiryDate;
|
|
|
|
|
if (bean?.lastCheck && getDaysBetween(new Date(bean.lastCheck), new Date()) < 1) {
|
|
|
|
|
|
|
|
|
|
if (bean?.lastCheck && dayjs.utc(bean.lastCheck).diff(dayjs.utc(), "day") < 1) {
|
|
|
|
|
log.debug("domain_expiry", `Domain expiry already checked recently for ${bean.domain}, won't re-check.`);
|
|
|
|
|
return bean.expiry;
|
|
|
|
|
} else if (bean) {
|
|
|
|
|
expiryDate = await bean.getExpiryDate();
|
|
|
|
|
|
|
|
|
|
if (new Date(expiryDate) > new Date(bean.expiry)) {
|
|
|
|
|
if (dayjs.utc(expiryDate).isAfter(dayjs.utc(bean.expiry))) {
|
|
|
|
|
bean.lastExpiryNotificationSent = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bean.expiry = expiryDate;
|
|
|
|
|
bean.lastCheck = new Date();
|
|
|
|
|
bean.expiry = R.isoDateTimeMillis(expiryDate);
|
|
|
|
|
bean.lastCheck = R.isoDateTimeMillis(dayjs.utc());
|
|
|
|
|
await R.store(bean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -272,7 +273,7 @@ class DomainExpiry extends BeanModel {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const daysRemaining = getDaysRemaining(new Date(), domain.expiry);
|
|
|
|
|
const daysRemaining = domain.daysRemaining;
|
|
|
|
|
const lastSent = domain.lastExpiryNotificationSent;
|
|
|
|
|
log.debug("domain_expiry", `${domainName} expires in ${daysRemaining} days`);
|
|
|
|
|
|
|
|
|
|
|