forked from danny-avila/LibreChat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate-user.js
134 lines (115 loc) · 4.08 KB
/
create-user.js
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
const path = require('path');
require('module-alias')({ base: path.resolve(__dirname, '..', 'api') });
const { registerUser } = require('~/server/services/AuthService');
const { askQuestion, silentExit } = require('./helpers');
const User = require('~/models/User');
const connect = require('./connect');
(async () => {
await connect();
console.purple('--------------------------');
console.purple('Create a new user account!');
console.purple('--------------------------');
if (process.argv.length < 5) {
console.orange('Usage: npm run create-user <email> <name> <username> [--email-verified=false]');
console.orange('Note: if you do not pass in the arguments, you will be prompted for them.');
console.orange(
'If you really need to pass in the password, you can do so as the 4th argument (not recommended for security).',
);
console.orange('Use --email-verified=false to set emailVerified to false. Default is true.');
console.purple('--------------------------');
}
let email = '';
let password = '';
let name = '';
let username = '';
let emailVerified = true;
// Parse command line arguments
for (let i = 2; i < process.argv.length; i++) {
if (process.argv[i].startsWith('--email-verified=')) {
emailVerified = process.argv[i].split('=')[1].toLowerCase() !== 'false';
continue;
}
if (!email) {
email = process.argv[i];
} else if (!name) {
name = process.argv[i];
} else if (!username) {
username = process.argv[i];
} else if (!password) {
console.red('Warning: password passed in as argument, this is not secure!');
password = process.argv[i];
}
}
if (!email) {
email = await askQuestion('Email:');
}
if (!email.includes('@')) {
console.red('Error: Invalid email address!');
silentExit(1);
}
const defaultName = email.split('@')[0];
if (!name) {
name = await askQuestion('Name: (default is: ' + defaultName + ')');
if (!name) {
name = defaultName;
}
}
if (!username) {
username = await askQuestion('Username: (default is: ' + defaultName + ')');
if (!username) {
username = defaultName;
}
}
if (!password) {
password = await askQuestion('Password: (leave blank, to generate one)');
if (!password) {
password = Math.random().toString(36).slice(-18);
console.orange('Your password is: ' + password);
}
}
// Only prompt for emailVerified if it wasn't set via CLI
if (!process.argv.some((arg) => arg.startsWith('--email-verified='))) {
const emailVerifiedInput = await askQuestion(`Email verified? (Y/n, default is Y):
If \`y\`, the user's email will be considered verified.
If \`n\`, and email service is configured, the user will be sent a verification email.
If \`n\`, and email service is not configured, you must have the \`ALLOW_UNVERIFIED_EMAIL_LOGIN\` .env variable set to true,
or the user will need to attempt logging in to have a verification link sent to them.`);
if (emailVerifiedInput.toLowerCase() === 'n') {
emailVerified = false;
}
}
const userExists = await User.findOne({ $or: [{ email }, { username }] });
if (userExists) {
console.red('Error: A user with that email or username already exists!');
silentExit(1);
}
const user = { email, password, name, username, confirm_password: password };
let result;
try {
result = await registerUser(user, { emailVerified });
} catch (error) {
console.red('Error: ' + error.message);
silentExit(1);
}
if (result.status !== 200) {
console.red('Error: ' + result.message);
silentExit(1);
}
const userCreated = await User.findOne({ $or: [{ email }, { username }] });
if (userCreated) {
console.green('User created successfully!');
console.green(`Email verified: ${userCreated.emailVerified}`);
silentExit(0);
}
})();
process.on('uncaughtException', (err) => {
if (!err.message.includes('fetch failed')) {
console.error('There was an uncaught error:');
console.error(err);
}
if (err.message.includes('fetch failed')) {
return;
} else {
process.exit(1);
}
});