Skip to content

Commit 9557c32

Browse files
committed
feat: delete inactivated users
* fs.promises use * delete token array reassignment fix * doc update
1 parent 0ad48fa commit 9557c32

4 files changed

Lines changed: 11 additions & 13 deletions

File tree

rfcs/inactive_users_cleanup.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ Function rendering `deleteInactivatedUsers.lua.hbs` and evals resulting script i
5454
The Script using a dozen constants, keys, and templates, so all these values rendered inside of the template using template context.
5555
Returns list of deleted users.
5656

57+
*NOTE*: Using experimental `fs.promises.readFile` API function. On `node` 10.x it's an experimental feature,
58+
on `node` >= 11.x function becomes stable without any changes in API.
59+
5760
#### deleteInactivatedUsers `USERS_ACTIVATED` `TTL` as seconds
5861
##### Script paramerters:
5962
1. KEYS[1] Sorted Set name containing the list of users that didn't pass activation.

src/users.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const RedisCluster = require('ioredis').Cluster;
99
const Flakeless = require('ms-flakeless');
1010
const conf = require('./config');
1111
const get = require('./utils/get-value');
12+
const inactiveUsers = require('./utils/inactiveUsers');
1213

1314
/**
1415
* @namespace Users
@@ -71,13 +72,13 @@ module.exports = class Users extends Microfleet {
7172
});
7273

7374
this.on(`plugin:connect:${this.redisType}`, (redis) => {
74-
const inactiveUsers = require('./utils/inactiveUsers');
7575
fsort.attach(redis, 'fsort');
7676

7777
// init token manager
7878
const tokenManagerOpts = { backend: { connection: redis } };
7979
this.tokenManager = new TokenManager(merge({}, config.tokenManager, tokenManagerOpts));
8080

81+
// load deleteInactivatedUsers script from template and assign listener
8182
inactiveUsers.defineCommand(redis, config.redis);
8283
this.on('users:cleanup', inactiveUsers.cleanUsers);
8384
});
@@ -100,7 +101,7 @@ module.exports = class Users extends Microfleet {
100101
this.on(`plugin:close:${this.redisType}`, () => {
101102
this.dlock = null;
102103
this.tokenManager = null;
103-
this.removeListener('users:cleanup');
104+
this.removeListener('users:cleanup', inactiveUsers.cleanUsers);
104105
});
105106

106107
// add migration connector

src/utils/inactiveUsers/defineCommand.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
const Promise = require('bluebird');
21
const hbs = require('handlebars');
32
const path = require('path');
4-
const fs = require('fs');
3+
const fs = require('fs').promises;
54

65
const key = require('../key');
76
const {
@@ -57,10 +56,6 @@ const fields = {
5756
USERS_USERNAME_FIELD,
5857
};
5958

60-
const readFile = f => Promise.fromCallback((cb) => {
61-
return fs.readFile(f, 'utf-8', cb);
62-
});
63-
6459
const prefixify = (prefix, obj) => {
6560
if (prefix !== '') {
6661
const objEntries = Object.entries(obj);
@@ -79,7 +74,7 @@ const prefixify = (prefix, obj) => {
7974
* @returns {Promise<void>}
8075
*/
8176
async function compileTemplate(file, templateCtx) {
82-
const contents = await readFile(file);
77+
const contents = await fs.readFile(file, { encoding: 'utf-8' });
8378
const scriptTemplate = await hbs.compile(contents);
8479
const name = path.basename(file, '.lua.hbs');
8580

src/utils/inactiveUsers/index.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,13 @@ function cleanTokens(userIds) {
4343
USERS_ACTION_ORGANIZATION_INVITE, USERS_ACTION_ORGANIZATION_REGISTER,
4444
];
4545

46-
const work = userIds.reduce((prev, id) => {
47-
const delTokenActions = [];
46+
const work = userIds.reduce((accum, id) => {
4847
for (const action of actions) {
49-
delTokenActions.push(
48+
accum.push(
5049
this.tokenManager.remove({ id, action })
5150
);
5251
}
53-
return [...prev, ...delTokenActions];
52+
return accum;
5453
}, []);
5554

5655
return Promise.all(work);

0 commit comments

Comments
 (0)