-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathcreate-admin.js
134 lines (114 loc) · 3.8 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
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 prompts = require('prompts');
module.exports = {
friendlyName: 'Create Admin User',
description: 'Create an admin user.',
inputs: {
// email: {
// type: 'string',
// isEmail: true,
// required: true
// },
//
// password: {
// type: 'string',
// required: true
// },
//
// firstName: {
// type: 'string',
// required: true
// },
//
// lastName: {
// type: 'string',
// required: true
// }
},
exits: {
success: {
description: 'Success. Admin user was created!'
},
userExists: {
description: 'Email is already in-use.'
},
canNotBeUsed: {
description: 'An active admin account already exists. Must use API to create new users.'
}
},
fn: async (inputs, exits) => {
const foundUsers = await sails.models.user.count({role: 'admin', deletedAt: null});
if (foundUsers) {
return exits.canNotBeUsed();
}
const answers = await prompts([
{
message: 'Email Address',
name: 'email',
type: 'text',
validate: (val) => {
if (!val || !val.length || !/.+?@.+?\..+?/.test(val)) {
return 'This is required.';
}
return true;
}
}, {
message: 'Password',
name: 'password',
type: 'password',
validate: async (val) => {
if (!val || !val.length) {
return 'This is required.';
}
let passwordErrors = await sails.helpers.isPasswordValid(val, true);
if (passwordErrors !== true) {
return passwordErrors.join(' ');
}
// This time, let's check with PwnedPasswords.com API.
passwordErrors = await sails.helpers.isPasswordValid(val, false);
if (passwordErrors !== true) {
return passwordErrors[0];
}
return true;
}
}, {
message: 'First Name',
name: 'firstName',
type: 'text',
validate: (val) => {
if (!val || !val.length) {
return 'This is required.';
}
return true;
}
}, {
message: 'Last Name',
name: 'lastName',
type: 'text',
validate: (val) => {
if (!val || !val.length) {
return 'This is required.';
}
return true;
}
}
], {
onCancel: () => {
console.error('Canceled admin creation.');
return process.exit(1);
}
});
const foundUser = await sails.models.user.findOne({email: answers.email, deletedAt: null});
if (foundUser) {
return exits.userExists(foundUser.toJSON());
}
const newUser = await sails.models.user.create({
id: 'c', // required, but auto-generated
email: answers.email,
password: answers.password,
firstName: answers.firstName,
lastName: answers.lastName,
role: 'admin'
}).fetch();
return exits.success(`\nAdmin user ${answers.firstName} ${answers.lastName} (${answers.email}) created!\nID: ${newUser.id}\n`);
}
};