Files
yinxin630--fiora/packages/bin/scripts/register.ts
T
2026-07-13 12:27:50 +08:00

81 lines
2.1 KiB
TypeScript

/**
* Register
*/
import bcrypt from 'bcryptjs';
import chalk from 'chalk';
import initMongoDB from '@fiora/database/mongoose/initMongoDB';
import User, { UserDocument } from '../../database/mongoose/models/user';
import Group from '../../database/mongoose/models/group';
import { SALT_ROUNDS } from '../../utils/const';
import getRandomAvatar from '../../utils/getRandomAvatar';
export async function register(username: string, password: string) {
if (!username) {
console.log(chalk.red('Wrong command, [username] is missing.'));
return;
}
if (!password) {
console.log(chalk.red('Wrong command, [password] is missing.'));
return;
}
await initMongoDB();
const user = await User.findOne({ username });
if (user) {
console.log(chalk.red('The username already exists'));
return;
}
const defaultGroup = await Group.findOne({ isDefault: true });
if (!defaultGroup) {
console.log(chalk.red('Default group does not exist'));
return;
}
const salt = await bcrypt.genSalt(SALT_ROUNDS);
const hash = await bcrypt.hash(password, salt);
let newUser = null;
try {
newUser = await User.create({
username,
salt,
password: hash,
avatar: getRandomAvatar(),
} as UserDocument);
} catch (createError) {
if (createError.name === 'ValidationError') {
console.log(
chalk.red(
'Username contains unsupported characters or the length exceeds the limit',
),
);
return;
}
console.log(chalk.red('Error:'), createError);
return;
}
if (!defaultGroup.creator) {
defaultGroup.creator = newUser._id;
}
if (newUser) {
defaultGroup.members.push(newUser._id);
}
await defaultGroup.save();
console.log(chalk.green(`Successfully created user [${username}]`));
}
async function run() {
const username = process.argv[3];
const password = process.argv[4];
await register(username, password);
process.exit(0);
}
export default run;