From e2259ae737e6e2ee9a4ca19f21b84c3741a5d114 Mon Sep 17 00:00:00 2001 From: Danny Coates Date: Mon, 24 Sep 2018 15:08:39 -0700 Subject: [PATCH] made download count and expiry options server configurable --- app/templates/expireInfo/index.js | 5 +++-- package.json | 1 + server/config.js | 15 +++++---------- server/routes/jsconfig.js | 2 ++ server/storage/index.js | 13 +++++-------- test/backend/storage-tests.js | 14 ++++++-------- 6 files changed, 22 insertions(+), 28 deletions(-) diff --git a/app/templates/expireInfo/index.js b/app/templates/expireInfo/index.js index 08e96a55..e4840425 100644 --- a/app/templates/expireInfo/index.js +++ b/app/templates/expireInfo/index.js @@ -1,3 +1,4 @@ +/* globals DEFAULTS */ const html = require('choo/html'); const raw = require('choo/html/raw'); const selectbox = require('../selectbox'); @@ -17,7 +18,7 @@ module.exports = function(state, emit) { return el; } - const counts = [1, 2, 3, 4, 5, 20, 50, 100, 200].filter( + const counts = DEFAULTS.DOWNLOAD_COUNTS.filter( i => state.capabilities.account || i <= state.user.maxDownloads ); @@ -40,7 +41,7 @@ module.exports = function(state, emit) { dlCountSelect ); - const expires = [300, 3600, 86400, 604800].filter( + const expires = DEFAULTS.EXPIRE_TIMES_SECONDS.filter( i => state.capabilities.account || i <= state.user.maxExpireSeconds ); diff --git a/package.json b/package.json index 24c965bf..52a77ebc 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "test-integration": "docker-compose up --abort-on-container-exit --exit-code-from integration-tests --build --remove-orphans --quiet-pull && docker-compose down", "test-integration-stage": "cross-env BASE_URL=https://send.stage.mozaws.net npm run test-integration", "start": "npm run clean && cross-env NODE_ENV=development FXA_CLIENT_ID=fced6b5e3f4c66b9 BASE_URL=http://localhost:8080 webpack-dev-server --mode=development", + "android": "cross-env ANDROID=1 npm start", "prod": "node server/bin/prod.js" }, "lint-staged": { diff --git a/server/config.js b/server/config.js index 5455b61d..3bc369cf 100644 --- a/server/config.js +++ b/server/config.js @@ -9,16 +9,6 @@ const conf = convict({ default: '', env: 'S3_BUCKET' }, - num_of_prefixes: { - format: Number, - default: 5, - env: 'NUM_OF_PREFIXES' - }, - expire_prefixes: { - format: Array, - default: ['5minutes', '1hour', '1day', '1week', '2weeks'], - env: 'EXPIRE_PREFIXES' - }, expire_times_seconds: { format: Array, default: [300, 3600, 86400, 604800], @@ -39,6 +29,11 @@ const conf = convict({ default: 86400, env: 'ANON_MAX_EXPIRE_SECONDS' }, + download_counts: { + format: Array, + default: [1, 2, 3, 4, 5, 20, 50, 100, 200], + env: 'DOWNLOAD_COUNTS' + }, max_downloads: { format: Number, default: 200, diff --git a/server/routes/jsconfig.js b/server/routes/jsconfig.js index 52c58fe0..6531e42d 100644 --- a/server/routes/jsconfig.js +++ b/server/routes/jsconfig.js @@ -55,6 +55,8 @@ module.exports = async function(req, res) { MAX_ARCHIVES_PER_USER: ${config.max_archives_per_user} }; var DEFAULTS = { + DOWNLOAD_COUNTS: ${JSON.stringify(config.download_counts)}, + EXPIRE_TIMES_SECONDS: ${JSON.stringify(config.expire_times_seconds)}, EXPIRE_SECONDS: ${config.default_expire_seconds} }; ${authConfig}; diff --git a/server/storage/index.js b/server/storage/index.js index d3c6c866..729577b8 100644 --- a/server/storage/index.js +++ b/server/storage/index.js @@ -3,6 +3,10 @@ const Metadata = require('../metadata'); const mozlog = require('../log'); const createRedisClient = require('./redis'); +function getPrefix(seconds) { + return Math.max(Math.floor(seconds / 86400), 1); +} + class DB { constructor(config) { const Storage = config.s3_bucket ? require('./s3') : require('./fs'); @@ -37,14 +41,7 @@ class DB { } async set(id, file, meta, expireSeconds = config.default_expire_seconds) { - const expireTimes = config.expire_times_seconds; - let i; - for (i = 0; i < expireTimes.length - 1; i++) { - if (expireSeconds <= expireTimes[i]) { - break; - } - } - const prefix = config.expire_prefixes[i]; + const prefix = getPrefix(expireSeconds); const filePath = `${prefix}-${id}`; await this.storage.set(filePath, file); this.redis.hset(id, 'prefix', prefix); diff --git a/test/backend/storage-tests.js b/test/backend/storage-tests.js index d7bfbb76..9f8408cf 100644 --- a/test/backend/storage-tests.js +++ b/test/backend/storage-tests.js @@ -23,8 +23,6 @@ class MockStorage { const config = { s3_bucket: 'foo', default_expire_seconds: 20, - num_of_prefixes: 3, - expire_prefixes: ['ten', 'twenty', 'thirty'], expire_times_seconds: [10, 20, 30], env: 'development', redis_host: 'localhost' @@ -71,19 +69,19 @@ describe('Storage', function() { }); it('adds right prefix based on expire time', async function() { - await storage.set('x', null, { foo: 'bar' }, 10); + await storage.set('x', null, { foo: 'bar' }, 300); const path_x = await storage.getPrefixedId('x'); - assert.equal(path_x, 'ten-x'); + assert.equal(path_x, '1-x'); await storage.del('x'); - await storage.set('y', null, { foo: 'bar' }, 11); + await storage.set('y', null, { foo: 'bar' }, 86400); const path_y = await storage.getPrefixedId('y'); - assert.equal(path_y, 'twenty-y'); + assert.equal(path_y, '1-y'); await storage.del('y'); - await storage.set('z', null, { foo: 'bar' }, 33); + await storage.set('z', null, { foo: 'bar' }, 86400 * 7); const path_z = await storage.getPrefixedId('z'); - assert.equal(path_z, 'thirty-z'); + assert.equal(path_z, '7-z'); await storage.del('z'); });