diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index e67f75f6c..d7f22825d 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -175,6 +175,42 @@ var restoreArchivedDocument = function (Env, Server, cb) { cb("NOT_IMPLEMENTED"); }; +// CryptPad_AsyncStore.rpc.send('ADMIN', ['CLEAR_CACHED_CHANNEL_INDEX', documentID], console.log) +var clearChannelIndex = function (Env, Server, cb, data) { + var id = Array.isArray(data) && data[1]; + if (typeof(id) !== 'string' || id.length < 32) { return void cb("EINVAL"); } + delete Env.channel_cache[id]; + cb(); +}; + +// CryptPad_AsyncStore.rpc.send('ADMIN', ['GET_CACHED_CHANNEL_INDEX', documentID], console.log) +var getChannelIndex = function (Env, Server, cb, data) { + var id = Array.isArray(data) && data[1]; + if (typeof(id) !== 'string' || id.length < 32) { return void cb("EINVAL"); } + + var index = Util.find(Env, ['channel_cache', id]); + if (!index) { return void cb("ENOENT"); } + cb(void 0, index); +}; + +// CryptPad_AsyncStore.rpc.send('ADMIN', ['CLEAR_CACHED_CHANNEL_METADATA', documentID], console.log) +var clearChannelMetadata = function (Env, Server, cb, data) { + var id = Array.isArray(data) && data[1]; + if (typeof(id) !== 'string' || id.length < 32) { return void cb("EINVAL"); } + delete Env.metadata_cache[id]; + cb(); +}; + +// CryptPad_AsyncStore.rpc.send('ADMIN', ['GET_CACHED_CHANNEL_METADATA', documentID], console.log) +var getChannelMetadata = function (Env, Server, cb, data) { + var id = Array.isArray(data) && data[1]; + if (typeof(id) !== 'string' || id.length < 32) { return void cb("EINVAL"); } + + var index = Util.find(Env, ['metadata_cache', id]); + if (!index) { return void cb("ENOENT"); } + cb(void 0, index); +}; + // CryptPad_AsyncStore.rpc.send('ADMIN', [ 'ADMIN_DECREE', ['RESTRICT_REGISTRATION', [true]]], console.log) var adminDecree = function (Env, Server, cb, data, unsafeKey) { var value = data[1]; @@ -269,6 +305,12 @@ var commands = { ARCHIVE_DOCUMENT: archiveDocument, RESTORE_ARCHIVED_DOCUMENT: restoreArchivedDocument, + CLEAR_CACHED_CHANNEL_INDEX: clearChannelIndex, + GET_CACHED_CHANNEL_INDEX: getChannelIndex, + + CLEAR_CACHED_CHANNEL_METADATA: clearChannelMetadata, + GET_CACHED_CHANNEL_METADATA: getChannelMetadata, + ADMIN_DECREE: adminDecree, INSTANCE_STATUS: instanceStatus, GET_LIMITS: getLimits, diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index df05d8a3e..e849ce20d 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -256,7 +256,7 @@ define([ Store.getPinnedUsage = function (clientId, data, cb) { var s = getStore(data && data.teamId); - if (!s.rpc) { return void cb({error: 'RPC_NOT_READY'}); } + if (!s || !s.rpc) { return void cb({error: 'RPC_NOT_READY'}); } s.rpc.getFileListSize(function (err, bytes) { if (!s.id && typeof(bytes) === 'number') {