diff --git a/lib/commands/quota.js b/lib/commands/quota.js index b74195821..95656223a 100644 --- a/lib/commands/quota.js +++ b/lib/commands/quota.js @@ -35,25 +35,12 @@ Quota.applyCustomLimits = function (Env) { }); }; -// The limits object contains storage limits for all the publicKey that have paid -// To each key is associated an object containing the 'limit' value and a 'note' explaining that limit -// XXX maybe the use case with a publicKey should be a different command that calls this? -Quota.updateLimits = function (Env, publicKey, cb) { // FIXME BATCH?S - +Quota.updateCachedLimits = function (Env, cb) { if (Env.adminEmail === false) { Quota.applyCustomLimits(Env); if (Env.allowSubscriptions === false) { return; } throw new Error("allowSubscriptions must be false if adminEmail is false"); } - if (typeof cb !== "function") { cb = function () {}; } - - var defaultLimit = typeof(Env.defaultStorageLimit) === 'number'? - Env.defaultStorageLimit: Core.DEFAULT_LIMIT; - - var userId; - if (publicKey) { - userId = Util.unescapeKeyCharacters(publicKey); - } var body = JSON.stringify({ domain: Env.myDomain, @@ -86,14 +73,7 @@ Quota.updateLimits = function (Env, publicKey, cb) { // FIXME BATCH?S var json = JSON.parse(str); Env.limits = json; Quota.applyCustomLimits(Env); - - var l; - if (userId) { - var limit = Env.limits[userId]; - l = limit && typeof limit.limit === "number" ? - [limit.limit, limit.plan, limit.note] : [defaultLimit, '', '']; - } - cb(void 0, l); + cb(void 0); } catch (e) { cb(e); } @@ -109,4 +89,19 @@ Quota.updateLimits = function (Env, publicKey, cb) { // FIXME BATCH?S req.end(body); }; +// The limits object contains storage limits for all the publicKey that have paid +// To each key is associated an object containing the 'limit' value and a 'note' explaining that limit +Quota.getUpdatedLimit = function (Env, safeKey, cb) { // FIXME BATCH?S + Quota.updateCachedLimits(Env, function (err) { + if (err) { return void cb(err); } + + var limit = Env.limits[safeKey]; + + if (limit && typeof(limit.limit) === 'number') { + return void cb(void 0, [limit.limit, limit.plan, limit.note]); + } + + return void cb(void 0, [Env.defaultStorageLimit, '', '']); + }); +}; diff --git a/lib/rpc.js b/lib/rpc.js index c8b6b56a9..e7a8242d3 100644 --- a/lib/rpc.js +++ b/lib/rpc.js @@ -64,7 +64,7 @@ const AUTHENTICATED_USER_TARGETED = { const AUTHENTICATED_USER_SCOPED = { GET_HASH: Pinning.getHash, GET_TOTAL_SIZE: Pinning.getTotalSize, - UPDATE_LIMITS: Quota.updateLimits, + UPDATE_LIMITS: Quota.getUpdatedLimit, GET_LIMIT: Pinning.getLimit, EXPIRE_SESSION: Core.expireSessionAsync, REMOVE_PINS: Pinning.removePins, @@ -214,7 +214,6 @@ RPC.create = function (config, cb) { var Env = { historyKeeper: config.historyKeeper, intervals: config.intervals || {}, - defaultStorageLimit: config.defaultStorageLimit, maxUploadSize: config.maxUploadSize || (20 * 1024 * 1024), Sessions: {}, paths: {}, @@ -235,6 +234,10 @@ RPC.create = function (config, cb) { domain: config.domain // XXX }; + Env.defaultStorageLimit = typeof(config.defaultStorageLimit) === 'number' && config.defaultStorageLimit > 0? + config.defaultStorageLimit: + Core.DEFAULT_LIMIT; + try { Env.admins = (config.adminKeys || []).map(function (k) { k = k.replace(/\/+$/, ''); @@ -254,7 +257,7 @@ RPC.create = function (config, cb) { paths.blob = keyOrDefaultString('blobPath', './blob'); var updateLimitDaily = function () { - Quota.updateLimits(Env, undefined, function (e) { + Quota.updateCachedLimits(Env, function (e) { if (e) { WARN('limitUpdate', e); }