fix: update 2fa enabled appropriately & delete files (#315)

* fix: update 2fa enabled appropriately

* fix: a proper delete

---------

Co-authored-by: dicedtomato <35403473+diced@users.noreply.github.com>
This commit is contained in:
Jayvin Hernandez 2023-03-04 22:07:29 -08:00 committed by GitHub
parent a16b516163
commit 656b900256
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 19 deletions

View file

@ -348,7 +348,7 @@ export default function Manage({ oauth_registration, oauth_providers: raw_oauth_
useEffect(() => {
getExports();
interval.start();
}, []);
}, [totpEnabled]);
return (
<>

View file

@ -21,22 +21,23 @@ async function handler(req: NextApiReq, res: NextApiRes, user: UserExtended) {
if (req.method === 'DELETE') {
if (target.id === user.id) return res.badRequest("you can't delete your own account");
if (target.administrator && !user.superAdmin) return res.forbidden('cannot delete administrator');
let promises = [];
const newTarget = await prisma.user.delete({
where: { id: target.id },
});
logger.debug(`deleted user ${JSON.stringify(newTarget)}`);
promises.push(
prisma.user.delete({
where: { id: target.id },
})
);
if (req.body.delete_files) {
logger.debug(`attempting to delete ${newTarget.id}'s files`);
const files = await prisma.file.findMany({
where: {
userId: newTarget.id,
userId: target.id,
},
});
logger.debug(`attempting to delete ${target.id}'s files`);
for (let i = 0; i !== files.length; ++i) {
try {
await datasource.delete(files[i].name);
@ -45,21 +46,31 @@ async function handler(req: NextApiReq, res: NextApiRes, user: UserExtended) {
}
}
const { count } = await prisma.file.deleteMany({
where: {
userId: newTarget.id,
},
});
Logger.get('users').info(
`User ${user.username} (${user.id}) deleted ${count} files of user ${newTarget.username} (${newTarget.id})`
promises.unshift(
prisma.file.deleteMany({
where: {
userId: target.id,
},
})
);
}
Promise.all(promises).then((promised) => {
const newTarget = promised[1];
const { count } = promised[0];
logger.debug(`deleted user ${JSON.stringify(newTarget)}`);
logger.info(`User ${user.username} (${user.id}) deleted user ${newTarget.username} (${newTarget.id})`);
req.body.delete_files
? logger.info(
`User ${user.username} (${user.id}) deleted ${count} files of user ${newTarget.username} (${newTarget.id})`
)
: logger.info(
`User ${user.username} (${user.id}) deleted user ${newTarget.username} (${newTarget.id})`
);
delete newTarget.password;
delete newTarget.password;
return res.json(newTarget);
return res.json(newTarget);
});
} else if (req.method === 'PATCH') {
if (target.administrator && !user.superAdmin) return res.forbidden('cannot modify administrator');