-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate_admin.js
executable file
·90 lines (78 loc) · 3.11 KB
/
create_admin.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
#!/usr/bin/env node
/*************************************************************************
* Copyright (c) 2019 - 2019 Yichao Yu <[email protected]> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. If not, *
* see <http://www.gnu.org/licenses/>. *
*************************************************************************/
"use strict";
const prompt = require('prompt');
const path = require('path');
process.env.NODE_ENV = 'production';
process.env.NEXT_DIST_DIR = 'exec';
process.env.NODE_CONFIG_DIR = 'conf';
process.env.LABCTRL_LIB_DIR = path.resolve(__dirname, 'addon');
process.chdir(__dirname);
const account = require('./lib/account');
const User = require('./server/user');
async function create_admin() {
await User.init();
prompt.start();
let result = await new Promise((resolve, reject) => {
prompt.get([{
name: 'email',
required: true,
conform: function (value) {
return account.validate_email(value);
}
}, {
name: 'password',
required: true,
hidden: true,
conform: function (value) {
return account.validate_password(value) === true;
}
}, {
name: 'repeat_password',
required: true,
hidden: true,
conform: function (value) {
return account.validate_password(value) === true;
}
}], function (err, result) {
if (err) {
reject(err);
return;
}
resolve(result);
});
});
if (result.password != result.repeat_password) {
console.error("Password mismatch.");
return;
}
if (await User.find_user(result.email)) {
console.error(`User ${result.email} already exists`);
return;
}
console.log(`Creating admin user ${result.email}`);
let admin_user = await User.signup(result.email, result.password);
await admin_user.verify();
await admin_user.set_admin(true);
console.log(await User.find_user(result.email));
}
create_admin().catch((err) => {
console.log(err);
process.exit(1);
});