164 lines
6.3 KiB
JavaScript
164 lines
6.3 KiB
JavaScript
/**
|
|
* function determines if it's time to start
|
|
* automatic cleanup
|
|
*/
|
|
|
|
function autoCleanUp() {
|
|
if (root.sys_enableAutoCleanup) {
|
|
var startAtHour = root.sys_startAtHour;
|
|
var nextCleanup = new Date();
|
|
nextCleanup.setDate(nextCleanup.getDate() + 1);
|
|
nextCleanup.setHours((!isNaN(startAtHour) ? startAtHour : 0),0,0,0);
|
|
// check if it's time to run autocleanup
|
|
if (!app.data.nextCleanup) {
|
|
app.data.nextCleanup = nextCleanup;
|
|
this.add (new syslog("system",null,"next cleanup scheduled for " + app.data.nextCleanup.format("EEEE, dd.MM.yyyy HH:mm"),null));
|
|
} else if (new Date() >= app.data.nextCleanup) {
|
|
this.syslogs.add (new syslog("system",null,"starting automatic cleanup ...",null));
|
|
app.data.nextCleanup = nextCleanup;
|
|
// now start the auto-cleanup-functions
|
|
this.blockPrivateSites();
|
|
// this.deleteInactiveSites();
|
|
this.add (new syslog("system",null,"next cleanup scheduled for " + app.data.nextCleanup.format("EEEE, dd.MM.yyyy HH:mm"),null));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* function blocks private sites that are offline for too long
|
|
* if enabled and configured properly in app.properties
|
|
*/
|
|
|
|
function blockPrivateSites() {
|
|
var enable = root.sys_blockPrivateSites;
|
|
var blockWarningAfter = root.sys_blockWarningAfter;
|
|
var blockAfterWarning = root.sys_blockAfterWarning;
|
|
if (!enable) {
|
|
// blocking of private sites is disabled
|
|
return;
|
|
} else if (!blockWarningAfter || !blockAfterWarning) {
|
|
// something is fishy with blocking properties
|
|
this.syslogs.add (new syslog("system",null,"blocking of private sites cancelled",null));
|
|
return;
|
|
}
|
|
var size = this.privateSites.size();
|
|
this.syslogs.add (new syslog("system",null,"checking " + size + " private site(s) ...",null));
|
|
|
|
// get thresholds in millis
|
|
warnThreshold = blockWarningAfter*1000*60*60*24;
|
|
blockThreshold = blockAfterWarning*1000*60*60*24;
|
|
|
|
for (var i=0;i<size;i++) {
|
|
var site = this.privateSites.get(i);
|
|
// if site is trusted, we do nothing
|
|
if (site.isTrusted())
|
|
continue;
|
|
|
|
var privateFor = new Date() - site.lastoffline;
|
|
var timeSinceWarning = new Date() - site.lastblockwarn;
|
|
if (privateFor >= warnThreshold) {
|
|
// check if site-admins have been warned already
|
|
var alreadyWarned = false;
|
|
if (site.lastblockwarn > site.lastoffline)
|
|
alreadyWarned = true;
|
|
// check whether warn admins or block site
|
|
if (!alreadyWarned) {
|
|
// admins of site haven't been warned about upcoming block, so do it now
|
|
var warning = new Mail;
|
|
var recipient = site.email ? site.email : site.creator.email;
|
|
warning.addTo(recipient);
|
|
warning.setFrom(root.sys_email);
|
|
warning.setSubject(getMsg("mailsubject","blockWarning",site.title));
|
|
var sp = new Object();
|
|
sp.site = site.alias;
|
|
sp.url = site.href();
|
|
sp.privatetime = blockWarningAfter;
|
|
sp.daysleft = blockAfterWarning;
|
|
sp.contact = root.sys_email;
|
|
warning.addText(this.renderSkinAsString("blockwarnmail",sp));
|
|
warning.send();
|
|
this.syslogs.add (new syslog("site",site.alias,"site is private for more than " + blockWarningAfter + " days, sent warning to " + recipient,null));
|
|
site.lastblockwarn = new Date();
|
|
} else if (timeSinceWarning >= blockThreshold) {
|
|
// site is offline for too long, so block it
|
|
site.blocked = 1;
|
|
this.syslogs.add (new syslog("site",site.alias,"blocked site",null));
|
|
}
|
|
} else
|
|
break;
|
|
}
|
|
this.syslogs.add (new syslog("system",null,"finished checking for private sites",null));
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* function disposes sites that are inactive for too long
|
|
* FUNCTION DISABLED!
|
|
*/
|
|
|
|
function deleteInactiveSites() {
|
|
|
|
return;
|
|
|
|
var enable = root.sys_deleteInactiveSites;
|
|
var delWarningAfter = root.sys_deleteWarningAfter;
|
|
var delAfterWarning = root.sys_deleteAfterWarning;
|
|
if (!enable) {
|
|
// blocking of private sites is disabled
|
|
return;
|
|
} else if (!delWarningAfter || !delAfterWarning) {
|
|
// something is fishy with properties
|
|
this.syslogs.add (new syslog("system",null,"cleanup of sites cancelled",null));
|
|
return;
|
|
}
|
|
var size = root.size();
|
|
this.syslogs.add (new syslog("system",null,"checking " + size + " sites for inactivity ...",null));
|
|
|
|
// get thresholds in millis
|
|
warnThreshold = delWarningAfter*1000*60*60*24;
|
|
delThreshold = delAfterWarning*1000*60*60*24;
|
|
|
|
for (var i=size;i>0;i--) {
|
|
var site = root.get(i-1);
|
|
// if site is trusted, we do nothing
|
|
if (site.isTrusted())
|
|
continue;
|
|
|
|
var idleFor = new Date() - site.lastupdate;
|
|
var timeSinceWarning = new Date() - site.lastdelwarn;
|
|
if (idleFor >= warnThreshold) {
|
|
// check if site-admins have been warned already
|
|
var alreadyWarned = false;
|
|
if (site.lastdelwarn > site.lastupdate)
|
|
alreadyWarned = true;
|
|
// check whether warn admins or block site
|
|
if (!alreadyWarned) {
|
|
// admins of site haven't been warned about upcoming block, so do it now
|
|
var warning = new Mail();
|
|
var recipient = site.email ? site.email : site.creator.email;
|
|
warning.addTo(recipient);
|
|
warning.setFrom(root.sys_email);
|
|
warning.setSubject(getMsg("mailsubject","deleteWarning",site.title));
|
|
var sp = new Object();
|
|
sp.site = site.alias;
|
|
sp.url = site.href();
|
|
sp.inactivity = delWarningAfter;
|
|
sp.daysleft = delAfterWarning;
|
|
sp.contact = root.sys_email;
|
|
warning.addText(this.renderSkinAsString("deletewarnmail",sp));
|
|
warning.send();
|
|
this.syslogs.add (new syslog("site",site.alias,"site was inactive for more than " + delWarningAfter + " days, sent warning to " + recipient,null));
|
|
site.lastdelwarn = new Date();
|
|
} else if (timeSinceWarning >= blockThreshold) {
|
|
// site is inactive for too long, so delete it
|
|
root.deleteSite(site);
|
|
}
|
|
} else
|
|
break;
|
|
}
|
|
this.syslogs.add (new syslog("system",null,"finished checking for inactive sites",null));
|
|
return true;
|
|
}
|
|
|