86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
const admin = require("firebase-admin");
|
|
|
|
const timeDiff = (ds1, ds2) => {
|
|
const d1 = new Date(ds1);
|
|
const d2 = new Date(ds2);
|
|
var diff = (d2.getTime() - d1.getTime()) / 1000;
|
|
diff /= 60 * 60;
|
|
return Math.abs(Math.round(diff));
|
|
};
|
|
|
|
const cleanUser = async (pT, sT) => {
|
|
var usersToDelete = [];
|
|
await admin
|
|
.auth()
|
|
.listUsers(1000, pT)
|
|
.then(async (listUsersResult) => {
|
|
listUsersResult.users.forEach((userRecord) => {
|
|
if (
|
|
userRecord.uid !== "PTjxbs2rAxMvCD6Pj5P6Z2U6d5A3" &&
|
|
timeDiff(userRecord.metadata.lastRefreshTime, sT) >= 24
|
|
) {
|
|
usersToDelete.push(userRecord.uid);
|
|
}
|
|
});
|
|
if (listUsersResult.pageToken) {
|
|
const uD = await cleanUser(listUsersResult.pageToken, sT);
|
|
usersToDelete.push(...uD);
|
|
}
|
|
return;
|
|
})
|
|
.catch((error) => {
|
|
console.log("Error listing users:", error);
|
|
});
|
|
return usersToDelete;
|
|
};
|
|
|
|
const batchDeleteUser = async (userList, totalNumber) => {
|
|
setTimeout(async () => {
|
|
const uTDSplice = userList.splice(0, 100);
|
|
if (uTDSplice.length > 0) {
|
|
await admin
|
|
.auth()
|
|
.deleteUsers(uTDSplice)
|
|
.catch((err) =>
|
|
console.error(
|
|
`[ERROR]\tWEBHOOKS/User Clean Up\t# OF USERS ${userList.length} REMAINING,\tERROR:${err}`
|
|
)
|
|
);
|
|
console.info(
|
|
`[DONE]\tWEBHOOKS/User Clean Up\t# OF USERS ${uTDSplice.length}/${userList.length}`
|
|
);
|
|
batchDeleteUser(userList, totalNumber);
|
|
} else {
|
|
console.info(
|
|
`[DONE]\tWEBHOOKS/User Clean Up\tDeleted all ${totalNumber} stale users`
|
|
);
|
|
}
|
|
}, 3000);
|
|
};
|
|
|
|
module.exports = async (req, res) => {
|
|
console.info(`[START]\tWEBHOOKS/User Clean Up`);
|
|
const startedTime = new Date();
|
|
try {
|
|
const usersToDelete = await cleanUser(undefined, startedTime);
|
|
const totalNumber = usersToDelete.length;
|
|
console.info(
|
|
`[PROGRESS]\tWEBHOOKS/User Clean Up\t# OF USERS ${totalNumber}`
|
|
);
|
|
await batchDeleteUser(usersToDelete, totalNumber);
|
|
res.status(200).send({
|
|
message: `[${new Date().toLocaleString("en-US", {
|
|
timeZone: "America/New_York",
|
|
})}] [DONE] WEBHOOKS User Clean Up Deleted all ${totalNumber} stale users`,
|
|
});
|
|
} catch (err) {
|
|
res.status(400).send({
|
|
message: `[${new Date().toLocaleString("en-US", {
|
|
timeZone: "America/New_York",
|
|
})}] [ERROR] WEBHOOKS User Clean Up Error trying to delete users - ${JSON.stringify(
|
|
err
|
|
)}`,
|
|
});
|
|
}
|
|
};
|