-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdeleteAllUserObjects.js
More file actions
102 lines (89 loc) · 2.52 KB
/
deleteAllUserObjects.js
File metadata and controls
102 lines (89 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
Given a file of users in jsonl format, delete the following objects: user, perms/users, request prefs.
NOTE: should also check for loans and accounts also.
*/
const fs = require('fs');
const superagent = require('superagent');
const readline = require('readline');
const { getAuthToken } = require('./lib/login');
const inFile = process.argv[2];
const debug = process.env.DEBUG;
const wait = (ms) => {
console.log(`(Waiting ${ms} ms...)`);
return new Promise((resolve) => setTimeout(resolve, ms));
};
const epMap = {
'perms/users': 'permissionUsers',
'request-preference-storage/request-preference': 'requestPreferences'
}
const getId = async (config, uid, ep, prop) => {
let q = `query=userId==${uid}`;
let url = `${config.okapi}/${ep}?${q}`;
console.log(`GET ${url}`);
let id;
try {
res = await superagent
.get(url)
.set('User-Agent', config.agent)
.set('cookie', config.cookie)
.set('x-okapi-tenant', config.tenant)
.set('x-okapi-token', config.token)
let arr = res.body[prop];
if (arr && arr[0]) {
id = arr[0].id;
}
} catch (e) {
console.log(`${e}`);
}
return id;
}
const delId = async (config, id, ep) => {
let url = `${config.okapi}/${ep}/${id}`;
console.log(`DELETE ${url}`);
let out;
try {
res = await superagent
.delete(url)
.set('User-Agent', config.agent)
.set('cookie', config.cookie)
.set('x-okapi-tenant', config.tenant)
.set('x-okapi-token', config.token)
out = res.body
} catch (e) {
console.log(`${e}`);
}
}
(async () => {
try {
if (!inFile) {
throw ('Usage: node deleteAllUserObjects.js <users_jsonl_files>');
}
let start = new Date().valueOf();
let config = await getAuthToken(superagent);
const fileStream = fs.createReadStream(inFile);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
let c = 0;
for await (const line of rl) {
c++
console.log(`-------------------- [${c}] --------------------`)
let user = JSON.parse(line);
await delId(config, user.id, 'users');
for (let ep in epMap) {
let prop = epMap[ep];
let id = await getId(config, user.id, ep, prop);
if (id) await delId(config, id, ep);
}
}
let end = new Date().valueOf();
let tt = (end - start)/1000;
console.log('Done!');
console.log('Users deleted:', c);
console.log('Time:', tt);
} catch (e) {
let msg = (debug) ? e : `${e}`;
console.log(msg);
}
})();