From 5f751d927b2e97e8be3e231a473e10156712295e Mon Sep 17 00:00:00 2001 From: Christoph Wiechert Date: Tue, 9 May 2017 01:16:14 +0200 Subject: [PATCH] Add maxAge to expire obsolete one-time downloads --- config.js | 4 +++- lib/db.js | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/config.js b/config.js index cb1f8fd..4e090b8 100644 --- a/config.js +++ b/config.js @@ -10,7 +10,7 @@ const config = { "port": 3000, "iface": '0.0.0.0', // retention options in seconds:label - retentions: { + "retentions": { "one-time": "one time download", "3600": "1 Hour", "21600": "6 Hours", @@ -22,6 +22,8 @@ const config = { "4838400": "8 Weeks" }, "defaultRetention": 604800, + // expire every file after maxAge (eg never downloaded one-time files) + "maxAge": 3600*24*75, // 75 days // maximum file-size for previews in byte "maxPreviewSize": Math.pow(2,20) * 2, // 2MB "mailTemplate": 'mailto:?subject=File Transfer&body=You can download the files here: %%URL%%', diff --git a/lib/db.js b/lib/db.js index 2f9453e..ec2552d 100644 --- a/lib/db.js +++ b/lib/db.js @@ -2,6 +2,7 @@ const fsp = require('fs-promise'); const path = require('path'); const debug = require('debug')('psitransfer:db'); +const config = require('../config'); module.exports = class DB { @@ -18,10 +19,14 @@ module.exports = class DB { let sid,f,expires; for (sid of Object.keys(this.db)) { for (f of this.db[sid]) { - // no removal of one-time downloads - if(!Number.isInteger(+f.metadata.retention)) return; + // expire on maxAge + expires = (+f.metadata.createdAt) + (config.maxAge * 1000) - Date.now(); + + // respect one-time downloads + if(expires > 0 && Number.isInteger(+f.metadata.retention)) { + expires = (+f.metadata.createdAt) + (+f.metadata.retention * 1000) - Date.now(); + } - expires = (+f.metadata.createdAt) + (+f.metadata.retention * 1000) - Date.now(); if(expires <= 0) { debug(`Expired ${sid}++${f.key}`); this.remove(sid, f.key).catch(e => console.error(e));