diff --git a/config.template.yaml b/config.template.yaml index 6d492f81..0b3855de 100644 --- a/config.template.yaml +++ b/config.template.yaml @@ -56,8 +56,13 @@ http: - '127.0.0.1' # Use express-minify to minify CSS and Javascript minify: false - # Static content cache (in seconds) - cache-ttl: 0 + # Max-Age for caching. Value should be an integer in milliseconds or a string accepted by + # the `ms` module. Set to 0 to disable caching. + max-age: '7d' + # Set to false to disable gzip compression + gzip: true + # Customize the threshold byte size for applying gzip + gzip-threshold: 1024 # HTTPS server details https: diff --git a/lib/config.js b/lib/config.js index cdd300c5..94bb7987 100644 --- a/lib/config.js +++ b/lib/config.js @@ -41,7 +41,9 @@ var defaults = { "root-domain": "localhost", "alt-domains": ["127.0.0.1"], minify: false, - "cache-ttl": 0 + "max-age": "7d", + gzip: true, + "gzip-threshold": 1024 }, https: { enabled: false, diff --git a/lib/server.js b/lib/server.js index 4fcfd29e..8e4080c2 100644 --- a/lib/server.js +++ b/lib/server.js @@ -9,7 +9,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -const VERSION = "3.5.0"; +const VERSION = "3.6.0"; var singleton = null; var Config = require("./config"); diff --git a/lib/web/webserver.js b/lib/web/webserver.js index fc7831c2..34623db2 100644 --- a/lib/web/webserver.js +++ b/lib/web/webserver.js @@ -211,13 +211,18 @@ module.exports = { app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(morgan(LOG_FORMAT, { - stream: require("fs").createWriteStream(path.join(__dirname, "..", "..", + stream: require("fs").createWriteStream(path.join(__dirname, "..", "..", "http.log"), { flags: "a", encoding: "utf-8" }) })); + if (Config.get("http.gzip")) { + app.use(require("compression")({ threshold: Config.get("http.gzip-threshold") })); + Logger.syslog.log("Enabled gzip compression"); + } + if (Config.get("http.minify")) { var cache = path.join(__dirname, "..", "..", "www", "cache") if (!fs.existsSync(cache)) { @@ -237,7 +242,9 @@ module.exports = { require("./auth").init(app); require("./account").init(app); require("./acp").init(app); - app.use(static(path.join(__dirname, "..", "..", "www"))); + app.use(static(path.join(__dirname, "..", "..", "www"), { + maxAge: Config.get("http.max-age") || Config.get("http.cache-ttl") + })); app.use(function (err, req, res, next) { if (err) { if (err.message && err.message.match(/failed to decode param/i)) { diff --git a/package.json b/package.json index 60e2e597..adfe2de9 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,14 @@ "author": "Calvin Montgomery", "name": "CyTube", "description": "Online media synchronizer and chat", - "version": "3.5.0", + "version": "3.6.0", "repository": { "url": "http://github.com/calzoneman/sync" }, "dependencies": { "bcrypt": "^0.8.0", "body-parser": "^1.6.5", + "compression": "^1.2.0", "cookie-parser": "^1.3.2", "express": "^4.8.5", "express-minify": "0.0.11",