Files
zipline/src/scripts/set-user.ts
Jayvin Hernandez 226d946ec8 fix: stuff (#423)
* fix: copying and opening another user's upload url

* fix: delete thumbnails too

* fix: return target after removing files from output

* fix: add width to fix diced/zipline#419 (can't test)

* Minor script tune-ups.

* Remove the catcher for when upload has been offloaded to chunk
2023-06-18 19:28:20 -07:00

81 lines
1.7 KiB
TypeScript

import { PrismaClient } from '@prisma/client';
import { hash } from 'argon2';
import config from 'lib/config';
import { migrations } from 'server/util';
const SUPPORTED_FIELDS = [
'username',
'password',
'administrator',
'avatar',
'token',
'superAdmin',
'systemTheme',
'embed',
'ratelimit',
'domains',
];
async function main() {
const args = process.argv.slice(2);
if (!args[0]) return console.error('no user id specified (run list-users script to see all user ids)');
if (!args[1]) return console.error('no property specified');
if (!args[2]) return console.error('no value specified');
if (!SUPPORTED_FIELDS.includes(args[1])) return console.error(`property ${args[1]} is not supported`);
process.env.DATABASE_URL = config.core.database_url;
await migrations();
const prisma = new PrismaClient();
const user = await prisma.user.findFirst({
where: {
id: Number(args[0]),
},
});
if (!user) return console.error('user not found');
let parsed;
if (args[2] === 'true') parsed = true;
if (args[2] === 'false') parsed = false;
if (args[1] === 'password') {
parsed = await hash(args[2]);
}
if (args[1] === 'domains') {
parsed = args[2].split(',');
}
if (args[1] === 'ratelimit') {
const try_date = new Date(args[2]);
if (isNaN(try_date.getTime())) return console.error('invalid date');
parsed = try_date;
}
const data = {
[args[1]]: parsed,
};
await prisma.user.update({
where: {
id: user.id,
},
data,
});
await prisma.$disconnect();
if (args[1] === 'password') {
parsed = '***';
}
console.log(`Updated user ${user.id} with ${args[1]} = ${parsed}`);
process.exit(0);
}
main();