@nocobase/plugin-users 0.9.1-alpha.1 → 0.9.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/actions/users.js +11 -67
- package/lib/authenticators/index.js +6 -24
- package/lib/authenticators/password.js +3 -14
- package/lib/collections/users.js +9 -2
- package/lib/index.js +0 -4
- package/lib/jwt-service.js +0 -12
- package/lib/locale/index.d.ts +1 -0
- package/lib/locale/index.js +7 -3
- package/lib/locale/pt-BR.d.ts +9 -0
- package/lib/locale/pt-BR.js +15 -0
- package/lib/middlewares/check.js +0 -7
- package/lib/middlewares/index.js +0 -2
- package/lib/middlewares/parseToken.js +5 -28
- package/lib/migrations/20220818072639-add-users-phone.js +0 -14
- package/lib/server.js +35 -132
- package/package.json +8 -8
package/lib/actions/users.js
CHANGED
|
@@ -12,53 +12,34 @@ exports.signin = signin;
|
|
|
12
12
|
exports.signout = signout;
|
|
13
13
|
exports.signup = signup;
|
|
14
14
|
exports.updateProfile = updateProfile;
|
|
15
|
-
|
|
16
15
|
function _resourcer() {
|
|
17
16
|
const data = require("@nocobase/resourcer");
|
|
18
|
-
|
|
19
17
|
_resourcer = function _resourcer() {
|
|
20
18
|
return data;
|
|
21
19
|
};
|
|
22
|
-
|
|
23
20
|
return data;
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
function _crypto() {
|
|
27
23
|
const data = _interopRequireDefault(require("crypto"));
|
|
28
|
-
|
|
29
24
|
_crypto = function _crypto() {
|
|
30
25
|
return data;
|
|
31
26
|
};
|
|
32
|
-
|
|
33
27
|
return data;
|
|
34
28
|
}
|
|
35
|
-
|
|
36
29
|
var _ = require("../");
|
|
37
|
-
|
|
38
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
|
-
|
|
40
31
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
41
|
-
|
|
42
32
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
43
|
-
|
|
44
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
45
|
-
|
|
33
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
46
34
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
47
|
-
|
|
48
35
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
49
|
-
|
|
50
36
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
51
|
-
|
|
52
37
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
53
|
-
|
|
54
38
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
55
|
-
|
|
56
39
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
57
|
-
|
|
58
40
|
function check(_x, _x2) {
|
|
59
41
|
return _check.apply(this, arguments);
|
|
60
42
|
}
|
|
61
|
-
|
|
62
43
|
function _check() {
|
|
63
44
|
_check = _asyncToGenerator(function* (ctx, next) {
|
|
64
45
|
if (ctx.state.currentUser) {
|
|
@@ -67,33 +48,26 @@ function _check() {
|
|
|
67
48
|
} else {
|
|
68
49
|
ctx.body = {};
|
|
69
50
|
}
|
|
70
|
-
|
|
71
51
|
yield next();
|
|
72
52
|
});
|
|
73
53
|
return _check.apply(this, arguments);
|
|
74
54
|
}
|
|
75
|
-
|
|
76
55
|
function signin(_x3, _x4) {
|
|
77
56
|
return _signin.apply(this, arguments);
|
|
78
57
|
}
|
|
79
|
-
|
|
80
58
|
function _signin() {
|
|
81
59
|
_signin = _asyncToGenerator(function* (ctx, next) {
|
|
82
60
|
const _ctx$app$getPlugin = ctx.app.getPlugin('users'),
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
61
|
+
authenticators = _ctx$app$getPlugin.authenticators,
|
|
62
|
+
jwtService = _ctx$app$getPlugin.jwtService;
|
|
86
63
|
const branches = {};
|
|
87
|
-
|
|
88
64
|
var _iterator = _createForOfIteratorHelper(authenticators.getEntities()),
|
|
89
|
-
|
|
90
|
-
|
|
65
|
+
_step;
|
|
91
66
|
try {
|
|
92
67
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
93
68
|
const _step$value = _slicedToArray(_step.value, 2),
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
69
|
+
name = _step$value[0],
|
|
70
|
+
authenticator = _step$value[1];
|
|
97
71
|
branches[name] = authenticator;
|
|
98
72
|
}
|
|
99
73
|
} catch (err) {
|
|
@@ -101,10 +75,8 @@ function _signin() {
|
|
|
101
75
|
} finally {
|
|
102
76
|
_iterator.f();
|
|
103
77
|
}
|
|
104
|
-
|
|
105
78
|
return (0, _resourcer().branch)(branches, context => {
|
|
106
79
|
var _context$action$param;
|
|
107
|
-
|
|
108
80
|
return (_context$action$param = context.action.params.authenticator) !== null && _context$action$param !== void 0 ? _context$action$param : 'password';
|
|
109
81
|
})(ctx, () => {
|
|
110
82
|
const user = ctx.state.currentUser.toJSON();
|
|
@@ -120,11 +92,9 @@ function _signin() {
|
|
|
120
92
|
});
|
|
121
93
|
return _signin.apply(this, arguments);
|
|
122
94
|
}
|
|
123
|
-
|
|
124
95
|
function signout(_x5, _x6) {
|
|
125
96
|
return _signout.apply(this, arguments);
|
|
126
97
|
}
|
|
127
|
-
|
|
128
98
|
function _signout() {
|
|
129
99
|
_signout = _asyncToGenerator(function* (ctx, next) {
|
|
130
100
|
ctx.body = ctx.state.currentUser;
|
|
@@ -132,11 +102,9 @@ function _signout() {
|
|
|
132
102
|
});
|
|
133
103
|
return _signout.apply(this, arguments);
|
|
134
104
|
}
|
|
135
|
-
|
|
136
105
|
function signup(_x7, _x8) {
|
|
137
106
|
return _signup.apply(this, arguments);
|
|
138
107
|
}
|
|
139
|
-
|
|
140
108
|
function _signup() {
|
|
141
109
|
_signup = _asyncToGenerator(function* (ctx, next) {
|
|
142
110
|
const User = ctx.db.getRepository('users');
|
|
@@ -149,15 +117,12 @@ function _signup() {
|
|
|
149
117
|
});
|
|
150
118
|
return _signup.apply(this, arguments);
|
|
151
119
|
}
|
|
152
|
-
|
|
153
120
|
function lostpassword(_x9, _x10) {
|
|
154
121
|
return _lostpassword.apply(this, arguments);
|
|
155
122
|
}
|
|
156
|
-
|
|
157
123
|
function _lostpassword() {
|
|
158
124
|
_lostpassword = _asyncToGenerator(function* (ctx, next) {
|
|
159
125
|
const email = ctx.action.params.values.email;
|
|
160
|
-
|
|
161
126
|
if (!email) {
|
|
162
127
|
ctx.throw(400, {
|
|
163
128
|
code: 'InvalidUserData',
|
|
@@ -166,14 +131,12 @@ function _lostpassword() {
|
|
|
166
131
|
})
|
|
167
132
|
});
|
|
168
133
|
}
|
|
169
|
-
|
|
170
134
|
const User = ctx.db.getCollection('users');
|
|
171
135
|
const user = yield User.model.findOne({
|
|
172
136
|
where: {
|
|
173
137
|
email
|
|
174
138
|
}
|
|
175
139
|
});
|
|
176
|
-
|
|
177
140
|
if (!user) {
|
|
178
141
|
ctx.throw(404, {
|
|
179
142
|
code: 'InvalidUserData',
|
|
@@ -182,7 +145,6 @@ function _lostpassword() {
|
|
|
182
145
|
})
|
|
183
146
|
});
|
|
184
147
|
}
|
|
185
|
-
|
|
186
148
|
user.resetToken = _crypto().default.randomBytes(20).toString('hex');
|
|
187
149
|
yield user.save();
|
|
188
150
|
ctx.body = user;
|
|
@@ -190,17 +152,15 @@ function _lostpassword() {
|
|
|
190
152
|
});
|
|
191
153
|
return _lostpassword.apply(this, arguments);
|
|
192
154
|
}
|
|
193
|
-
|
|
194
155
|
function resetpassword(_x11, _x12) {
|
|
195
156
|
return _resetpassword.apply(this, arguments);
|
|
196
157
|
}
|
|
197
|
-
|
|
198
158
|
function _resetpassword() {
|
|
199
159
|
_resetpassword = _asyncToGenerator(function* (ctx, next) {
|
|
200
160
|
const _ctx$action$params$va = ctx.action.params.values,
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
161
|
+
email = _ctx$action$params$va.email,
|
|
162
|
+
password = _ctx$action$params$va.password,
|
|
163
|
+
resetToken = _ctx$action$params$va.resetToken;
|
|
204
164
|
const User = ctx.db.getCollection('users');
|
|
205
165
|
const user = yield User.model.findOne({
|
|
206
166
|
where: {
|
|
@@ -208,11 +168,9 @@ function _resetpassword() {
|
|
|
208
168
|
resetToken
|
|
209
169
|
}
|
|
210
170
|
});
|
|
211
|
-
|
|
212
171
|
if (!user) {
|
|
213
172
|
ctx.throw(404);
|
|
214
173
|
}
|
|
215
|
-
|
|
216
174
|
user.token = null;
|
|
217
175
|
user.resetToken = null;
|
|
218
176
|
user.password = password;
|
|
@@ -222,11 +180,9 @@ function _resetpassword() {
|
|
|
222
180
|
});
|
|
223
181
|
return _resetpassword.apply(this, arguments);
|
|
224
182
|
}
|
|
225
|
-
|
|
226
183
|
function getUserByResetToken(_x13, _x14) {
|
|
227
184
|
return _getUserByResetToken.apply(this, arguments);
|
|
228
185
|
}
|
|
229
|
-
|
|
230
186
|
function _getUserByResetToken() {
|
|
231
187
|
_getUserByResetToken = _asyncToGenerator(function* (ctx, next) {
|
|
232
188
|
const token = ctx.action.params.token;
|
|
@@ -236,30 +192,24 @@ function _getUserByResetToken() {
|
|
|
236
192
|
resetToken: token
|
|
237
193
|
}
|
|
238
194
|
});
|
|
239
|
-
|
|
240
195
|
if (!user) {
|
|
241
196
|
ctx.throw(401);
|
|
242
197
|
}
|
|
243
|
-
|
|
244
198
|
ctx.body = user;
|
|
245
199
|
yield next();
|
|
246
200
|
});
|
|
247
201
|
return _getUserByResetToken.apply(this, arguments);
|
|
248
202
|
}
|
|
249
|
-
|
|
250
203
|
function updateProfile(_x15, _x16) {
|
|
251
204
|
return _updateProfile.apply(this, arguments);
|
|
252
205
|
}
|
|
253
|
-
|
|
254
206
|
function _updateProfile() {
|
|
255
207
|
_updateProfile = _asyncToGenerator(function* (ctx, next) {
|
|
256
208
|
const values = ctx.action.params.values;
|
|
257
209
|
const currentUser = ctx.state.currentUser;
|
|
258
|
-
|
|
259
210
|
if (!currentUser) {
|
|
260
211
|
ctx.throw(401);
|
|
261
212
|
}
|
|
262
|
-
|
|
263
213
|
const UserRepo = ctx.db.getRepository('users');
|
|
264
214
|
const result = yield UserRepo.update({
|
|
265
215
|
filterByTk: currentUser.id,
|
|
@@ -270,21 +220,17 @@ function _updateProfile() {
|
|
|
270
220
|
});
|
|
271
221
|
return _updateProfile.apply(this, arguments);
|
|
272
222
|
}
|
|
273
|
-
|
|
274
223
|
function changePassword(_x17, _x18) {
|
|
275
224
|
return _changePassword.apply(this, arguments);
|
|
276
225
|
}
|
|
277
|
-
|
|
278
226
|
function _changePassword() {
|
|
279
227
|
_changePassword = _asyncToGenerator(function* (ctx, next) {
|
|
280
228
|
const _ctx$action$params$va2 = ctx.action.params.values,
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
229
|
+
oldPassword = _ctx$action$params$va2.oldPassword,
|
|
230
|
+
newPassword = _ctx$action$params$va2.newPassword;
|
|
284
231
|
if (!ctx.state.currentUser) {
|
|
285
232
|
ctx.throw(401);
|
|
286
233
|
}
|
|
287
|
-
|
|
288
234
|
const User = ctx.db.getCollection('users');
|
|
289
235
|
const user = yield User.model.findOne({
|
|
290
236
|
where: {
|
|
@@ -293,13 +239,11 @@ function _changePassword() {
|
|
|
293
239
|
});
|
|
294
240
|
const pwd = User.getField('password');
|
|
295
241
|
const isValid = yield pwd.verify(oldPassword, user.password);
|
|
296
|
-
|
|
297
242
|
if (!isValid) {
|
|
298
243
|
ctx.throw(401, ctx.t('The password is incorrect, please re-enter', {
|
|
299
244
|
ns: _.namespace
|
|
300
245
|
}));
|
|
301
246
|
}
|
|
302
|
-
|
|
303
247
|
user.password = newPassword;
|
|
304
248
|
user.save();
|
|
305
249
|
ctx.body = ctx.state.currentUser.toJSON();
|
|
@@ -4,60 +4,42 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
|
-
|
|
8
7
|
function _path() {
|
|
9
8
|
const data = _interopRequireDefault(require("path"));
|
|
10
|
-
|
|
11
9
|
_path = function _path() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
function _utils() {
|
|
19
15
|
const data = require("@nocobase/utils");
|
|
20
|
-
|
|
21
16
|
_utils = function _utils() {
|
|
22
17
|
return data;
|
|
23
18
|
};
|
|
24
|
-
|
|
25
19
|
return data;
|
|
26
20
|
}
|
|
27
|
-
|
|
28
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
30
22
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
31
|
-
|
|
32
23
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
|
-
|
|
34
24
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
35
|
-
|
|
36
25
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
37
|
-
|
|
38
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
39
|
-
|
|
26
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
40
27
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
41
|
-
|
|
42
28
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
43
|
-
|
|
44
29
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
45
|
-
|
|
46
|
-
function
|
|
47
|
-
|
|
30
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
31
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
32
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
48
33
|
;
|
|
49
|
-
|
|
50
34
|
function _default(plugin, more = {}) {
|
|
51
35
|
const authenticators = plugin.authenticators;
|
|
52
36
|
const natives = ['password'].reduce((result, key) => Object.assign(result, {
|
|
53
37
|
[key]: (0, _utils().requireModule)(_path().default.isAbsolute(key) ? key : _path().default.join(__dirname, key))
|
|
54
38
|
}), {});
|
|
55
|
-
|
|
56
39
|
for (var _i = 0, _Object$entries = Object.entries(_objectSpread(_objectSpread({}, more), natives)); _i < _Object$entries.length; _i++) {
|
|
57
40
|
const _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
41
|
+
name = _Object$entries$_i[0],
|
|
42
|
+
authenticator = _Object$entries$_i[1];
|
|
61
43
|
authenticators.register(name, authenticator);
|
|
62
44
|
}
|
|
63
45
|
}
|
|
@@ -4,24 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = _default;
|
|
7
|
-
|
|
8
7
|
var _ = require("..");
|
|
9
|
-
|
|
10
8
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
11
|
-
|
|
12
9
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
13
|
-
|
|
14
10
|
function _default(_x, _x2) {
|
|
15
11
|
return _ref.apply(this, arguments);
|
|
16
12
|
}
|
|
17
|
-
|
|
18
13
|
function _ref() {
|
|
19
14
|
_ref = _asyncToGenerator(function* (ctx, next) {
|
|
20
15
|
const _ctx$action$params = ctx.action.params,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
_ctx$action$params$un = _ctx$action$params.uniqueField,
|
|
17
|
+
uniqueField = _ctx$action$params$un === void 0 ? 'email' : _ctx$action$params$un,
|
|
18
|
+
values = _ctx$action$params.values;
|
|
25
19
|
if (!values[uniqueField]) {
|
|
26
20
|
return ctx.throw(400, {
|
|
27
21
|
code: 'InvalidUserData',
|
|
@@ -30,29 +24,24 @@ function _ref() {
|
|
|
30
24
|
})
|
|
31
25
|
});
|
|
32
26
|
}
|
|
33
|
-
|
|
34
27
|
const User = ctx.db.getCollection('users');
|
|
35
28
|
const user = yield User.model.findOne({
|
|
36
29
|
where: {
|
|
37
30
|
[uniqueField]: values[uniqueField]
|
|
38
31
|
}
|
|
39
32
|
});
|
|
40
|
-
|
|
41
33
|
if (!user) {
|
|
42
34
|
return ctx.throw(404, ctx.t('The email is incorrect, please re-enter', {
|
|
43
35
|
ns: _.namespace
|
|
44
36
|
}));
|
|
45
37
|
}
|
|
46
|
-
|
|
47
38
|
const field = User.getField('password');
|
|
48
39
|
const valid = yield field.verify(values.password, user.password);
|
|
49
|
-
|
|
50
40
|
if (!valid) {
|
|
51
41
|
return ctx.throw(404, ctx.t('The password is incorrect, please re-enter', {
|
|
52
42
|
ns: _.namespace
|
|
53
43
|
}));
|
|
54
44
|
}
|
|
55
|
-
|
|
56
45
|
ctx.state.currentUser = user;
|
|
57
46
|
return next();
|
|
58
47
|
});
|
package/lib/collections/users.js
CHANGED
|
@@ -5,8 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _default = {
|
|
8
|
-
namespace: 'users',
|
|
9
|
-
duplicator:
|
|
8
|
+
namespace: 'users.users',
|
|
9
|
+
duplicator: {
|
|
10
|
+
dumpable: 'optional',
|
|
11
|
+
with: 'rolesUsers'
|
|
12
|
+
},
|
|
10
13
|
name: 'users',
|
|
11
14
|
title: '{{t("Users")}}',
|
|
12
15
|
sortable: 'sort',
|
|
@@ -78,6 +81,10 @@ var _default = {
|
|
|
78
81
|
name: 'resetToken',
|
|
79
82
|
unique: true,
|
|
80
83
|
hidden: true
|
|
84
|
+
}, {
|
|
85
|
+
type: 'json',
|
|
86
|
+
name: 'systemSettings',
|
|
87
|
+
defaultValue: {}
|
|
81
88
|
}]
|
|
82
89
|
};
|
|
83
90
|
exports.default = _default;
|
package/lib/index.js
CHANGED
|
@@ -10,11 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.namespace = void 0;
|
|
13
|
-
|
|
14
13
|
var _server = _interopRequireDefault(require("./server"));
|
|
15
|
-
|
|
16
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
18
15
|
const namespace = require('../package.json').name;
|
|
19
|
-
|
|
20
16
|
exports.namespace = namespace;
|
package/lib/jwt-service.js
CHANGED
|
@@ -4,51 +4,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.JwtService = void 0;
|
|
7
|
-
|
|
8
7
|
function _jsonwebtoken() {
|
|
9
8
|
const data = _interopRequireDefault(require("jsonwebtoken"));
|
|
10
|
-
|
|
11
9
|
_jsonwebtoken = function _jsonwebtoken() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
20
15
|
class JwtService {
|
|
21
16
|
constructor(options) {
|
|
22
17
|
this.options = void 0;
|
|
23
18
|
this.options = options;
|
|
24
19
|
}
|
|
25
|
-
|
|
26
20
|
expiresIn() {
|
|
27
21
|
return this.options.expiresIn || process.env.JWT_EXPIRES_IN || '7d';
|
|
28
22
|
}
|
|
29
|
-
|
|
30
23
|
secret() {
|
|
31
24
|
return this.options.secret || process.env.APP_KEY;
|
|
32
25
|
}
|
|
33
|
-
|
|
34
26
|
sign(payload) {
|
|
35
27
|
return _jsonwebtoken().default.sign(payload, this.secret(), {
|
|
36
28
|
expiresIn: this.expiresIn()
|
|
37
29
|
});
|
|
38
30
|
}
|
|
39
|
-
|
|
40
31
|
decode(token) {
|
|
41
32
|
return new Promise((resolve, reject) => {
|
|
42
33
|
_jsonwebtoken().default.verify(token, this.secret(), (err, decoded) => {
|
|
43
34
|
if (err) {
|
|
44
35
|
return reject(err);
|
|
45
36
|
}
|
|
46
|
-
|
|
47
37
|
resolve(decoded);
|
|
48
38
|
});
|
|
49
39
|
});
|
|
50
40
|
}
|
|
51
|
-
|
|
52
41
|
}
|
|
53
|
-
|
|
54
42
|
exports.JwtService = JwtService;
|
package/lib/locale/index.d.ts
CHANGED
package/lib/locale/index.js
CHANGED
|
@@ -9,15 +9,19 @@ Object.defineProperty(exports, "enUS", {
|
|
|
9
9
|
return _enUS.default;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "ptBR", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _ptBR.default;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "zhCN", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function get() {
|
|
15
21
|
return _zhCN.default;
|
|
16
22
|
}
|
|
17
23
|
});
|
|
18
|
-
|
|
19
24
|
var _enUS = _interopRequireDefault(require("./en-US"));
|
|
20
|
-
|
|
21
25
|
var _zhCN = _interopRequireDefault(require("./zh-CN"));
|
|
22
|
-
|
|
26
|
+
var _ptBR = _interopRequireDefault(require("./pt-BR"));
|
|
23
27
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
"The email is incorrect, please re-enter": string;
|
|
3
|
+
"Please fill in your email address": string;
|
|
4
|
+
"The password is incorrect, please re-enter": string;
|
|
5
|
+
"Not a valid cellphone number, please re-enter": string;
|
|
6
|
+
"The phone number has been registered, please login directly": string;
|
|
7
|
+
"The phone number is not registered, please register first": string;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
"The email is incorrect, please re-enter": "O e-mail está incorreto, por favor, digite novamente",
|
|
9
|
+
"Please fill in your email address": "Por favor, preencha o seu endereço de e-mail",
|
|
10
|
+
"The password is incorrect, please re-enter": "A senha está incorreta, por favor, digite novamente",
|
|
11
|
+
"Not a valid cellphone number, please re-enter": "Número de celular inválido, por favor, digite novamente",
|
|
12
|
+
"The phone number has been registered, please login directly": "O número de celular já está registrado, por favor, faça login diretamente",
|
|
13
|
+
"The phone number is not registered, please register first": "O número de celular não está registrado, por favor, registre-se primeiro"
|
|
14
|
+
};
|
|
15
|
+
exports.default = _default;
|
package/lib/middlewares/check.js
CHANGED
|
@@ -4,28 +4,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.check = check;
|
|
7
|
-
|
|
8
7
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
9
|
-
|
|
10
8
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
11
|
-
|
|
12
9
|
// TODO(usage): 拦截用户的处理暂时作为一个中间件导出,应用需要的时候可以直接使用这个中间件
|
|
13
10
|
function check(options) {
|
|
14
11
|
return /*#__PURE__*/function () {
|
|
15
12
|
var _check = _asyncToGenerator(function* (ctx, next) {
|
|
16
13
|
const currentUser = ctx.state.currentUser;
|
|
17
|
-
|
|
18
14
|
if (!currentUser) {
|
|
19
15
|
return ctx.throw(401, 'Unauthorized');
|
|
20
16
|
}
|
|
21
|
-
|
|
22
17
|
return next();
|
|
23
18
|
});
|
|
24
|
-
|
|
25
19
|
function check(_x, _x2) {
|
|
26
20
|
return _check.apply(this, arguments);
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
return check;
|
|
30
23
|
}();
|
|
31
24
|
}
|
package/lib/middlewares/index.js
CHANGED
|
@@ -4,72 +4,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseToken = parseToken;
|
|
7
|
-
|
|
8
7
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
-
|
|
10
8
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
-
|
|
12
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
13
|
-
|
|
9
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
14
10
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
15
|
-
|
|
16
11
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
17
|
-
|
|
18
12
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
19
|
-
|
|
20
13
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
21
|
-
|
|
22
14
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
23
|
-
|
|
24
15
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
25
|
-
|
|
26
16
|
function parseToken(_x, _x2) {
|
|
27
17
|
return _parseToken.apply(this, arguments);
|
|
28
18
|
}
|
|
29
|
-
|
|
30
19
|
function _parseToken() {
|
|
31
20
|
_parseToken = _asyncToGenerator(function* (ctx, next) {
|
|
32
21
|
const user = yield findUserByToken(ctx);
|
|
33
|
-
|
|
34
22
|
if (user) {
|
|
35
23
|
ctx.state.currentUser = user;
|
|
36
24
|
}
|
|
37
|
-
|
|
38
25
|
return next();
|
|
39
26
|
});
|
|
40
27
|
return _parseToken.apply(this, arguments);
|
|
41
28
|
}
|
|
42
|
-
|
|
43
29
|
function findUserByToken(_x3) {
|
|
44
30
|
return _findUserByToken.apply(this, arguments);
|
|
45
31
|
}
|
|
46
|
-
|
|
47
32
|
function _findUserByToken() {
|
|
48
33
|
_findUserByToken = _asyncToGenerator(function* (ctx) {
|
|
49
34
|
const token = ctx.getBearerToken();
|
|
50
|
-
|
|
51
35
|
if (!token) {
|
|
52
36
|
return null;
|
|
53
37
|
}
|
|
54
|
-
|
|
55
38
|
const _ctx$app$getPlugin = ctx.app.getPlugin('users'),
|
|
56
|
-
|
|
57
|
-
|
|
39
|
+
jwtService = _ctx$app$getPlugin.jwtService;
|
|
58
40
|
try {
|
|
59
41
|
const _yield$jwtService$dec = yield jwtService.decode(token),
|
|
60
|
-
|
|
61
|
-
|
|
42
|
+
userId = _yield$jwtService$dec.userId;
|
|
62
43
|
const collection = ctx.db.getCollection('users');
|
|
63
44
|
ctx.state.currentUserAppends = ctx.state.currentUserAppends || [];
|
|
64
|
-
|
|
65
45
|
var _iterator = _createForOfIteratorHelper(collection.fields),
|
|
66
|
-
|
|
67
|
-
|
|
46
|
+
_step;
|
|
68
47
|
try {
|
|
69
48
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
70
49
|
const _step$value = _slicedToArray(_step.value, 2),
|
|
71
|
-
|
|
72
|
-
|
|
50
|
+
field = _step$value[1];
|
|
73
51
|
if (field.type === 'belongsTo') {
|
|
74
52
|
ctx.state.currentUserAppends.push(field.name);
|
|
75
53
|
}
|
|
@@ -79,7 +57,6 @@ function _findUserByToken() {
|
|
|
79
57
|
} finally {
|
|
80
58
|
_iterator.f();
|
|
81
59
|
}
|
|
82
|
-
|
|
83
60
|
const user = yield ctx.db.getRepository('users').findOne({
|
|
84
61
|
appends: ctx.state.currentUserAppends,
|
|
85
62
|
filter: {
|
|
@@ -4,41 +4,30 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
function _server() {
|
|
9
8
|
const data = require("@nocobase/server");
|
|
10
|
-
|
|
11
9
|
_server = function _server() {
|
|
12
10
|
return data;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
12
|
return data;
|
|
16
13
|
}
|
|
17
|
-
|
|
18
14
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
19
|
-
|
|
20
15
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
21
|
-
|
|
22
16
|
class AddUsersPhoneMigration extends _server().Migration {
|
|
23
17
|
up() {
|
|
24
18
|
var _this = this;
|
|
25
|
-
|
|
26
19
|
return _asyncToGenerator(function* () {
|
|
27
20
|
const match = yield _this.app.version.satisfies('<=0.7.4-alpha.7');
|
|
28
|
-
|
|
29
21
|
if (!match) {
|
|
30
22
|
return;
|
|
31
23
|
}
|
|
32
|
-
|
|
33
24
|
const Field = _this.context.db.getRepository('fields');
|
|
34
|
-
|
|
35
25
|
const existed = yield Field.count({
|
|
36
26
|
filter: {
|
|
37
27
|
name: 'phone',
|
|
38
28
|
collectionName: 'users'
|
|
39
29
|
}
|
|
40
30
|
});
|
|
41
|
-
|
|
42
31
|
if (!existed) {
|
|
43
32
|
yield Field.create({
|
|
44
33
|
values: {
|
|
@@ -61,11 +50,8 @@ class AddUsersPhoneMigration extends _server().Migration {
|
|
|
61
50
|
}
|
|
62
51
|
})();
|
|
63
52
|
}
|
|
64
|
-
|
|
65
53
|
down() {
|
|
66
54
|
return _asyncToGenerator(function* () {})();
|
|
67
55
|
}
|
|
68
|
-
|
|
69
56
|
}
|
|
70
|
-
|
|
71
57
|
exports.default = AddUsersPhoneMigration;
|
package/lib/server.js
CHANGED
|
@@ -4,91 +4,58 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
function _jsonTemplates() {
|
|
9
|
-
const data = _interopRequireDefault(require("json-templates"));
|
|
10
|
-
|
|
11
|
-
_jsonTemplates = function _jsonTemplates() {
|
|
12
|
-
return data;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
return data;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function _path() {
|
|
19
|
-
const data = require("path");
|
|
20
|
-
|
|
21
|
-
_path = function _path() {
|
|
22
|
-
return data;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
return data;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
7
|
function _database() {
|
|
29
8
|
const data = require("@nocobase/database");
|
|
30
|
-
|
|
31
9
|
_database = function _database() {
|
|
32
10
|
return data;
|
|
33
11
|
};
|
|
34
|
-
|
|
35
12
|
return data;
|
|
36
13
|
}
|
|
37
|
-
|
|
38
14
|
function _server() {
|
|
39
15
|
const data = require("@nocobase/server");
|
|
40
|
-
|
|
41
16
|
_server = function _server() {
|
|
42
17
|
return data;
|
|
43
18
|
};
|
|
44
|
-
|
|
45
19
|
return data;
|
|
46
20
|
}
|
|
47
|
-
|
|
48
21
|
function _utils() {
|
|
49
22
|
const data = require("@nocobase/utils");
|
|
50
|
-
|
|
51
23
|
_utils = function _utils() {
|
|
52
24
|
return data;
|
|
53
25
|
};
|
|
54
|
-
|
|
55
26
|
return data;
|
|
56
27
|
}
|
|
57
|
-
|
|
28
|
+
function _jsonTemplates() {
|
|
29
|
+
const data = _interopRequireDefault(require("json-templates"));
|
|
30
|
+
_jsonTemplates = function _jsonTemplates() {
|
|
31
|
+
return data;
|
|
32
|
+
};
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
35
|
+
function _path() {
|
|
36
|
+
const data = require("path");
|
|
37
|
+
_path = function _path() {
|
|
38
|
+
return data;
|
|
39
|
+
};
|
|
40
|
+
return data;
|
|
41
|
+
}
|
|
58
42
|
var _2 = require("./");
|
|
59
|
-
|
|
60
43
|
var actions = _interopRequireWildcard(require("./actions/users"));
|
|
61
|
-
|
|
62
44
|
var _authenticators = _interopRequireDefault(require("./authenticators"));
|
|
63
|
-
|
|
64
45
|
var _jwtService = require("./jwt-service");
|
|
65
|
-
|
|
66
46
|
var _locale = require("./locale");
|
|
67
|
-
|
|
68
47
|
var _middlewares = require("./middlewares");
|
|
69
|
-
|
|
70
48
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
71
|
-
|
|
72
49
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
73
|
-
|
|
74
50
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
75
|
-
|
|
76
51
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
77
|
-
|
|
78
52
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
79
|
-
|
|
80
53
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
81
|
-
|
|
82
54
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
83
|
-
|
|
84
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
85
|
-
|
|
55
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
86
56
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
87
|
-
|
|
88
57
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
89
|
-
|
|
90
58
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
91
|
-
|
|
92
59
|
class UsersPlugin extends _server().Plugin {
|
|
93
60
|
constructor(app, options) {
|
|
94
61
|
super(app, options);
|
|
@@ -96,43 +63,32 @@ class UsersPlugin extends _server().Plugin {
|
|
|
96
63
|
this.authenticators = new (_utils().Registry)();
|
|
97
64
|
this.jwtService = new _jwtService.JwtService((options === null || options === void 0 ? void 0 : options.jwt) || {});
|
|
98
65
|
}
|
|
99
|
-
|
|
100
66
|
beforeLoad() {
|
|
101
67
|
var _this = this;
|
|
102
|
-
|
|
103
68
|
return _asyncToGenerator(function* () {
|
|
104
69
|
_this.app.i18n.addResources('zh-CN', _2.namespace, _locale.zhCN);
|
|
105
|
-
|
|
106
70
|
_this.app.i18n.addResources('en-US', _2.namespace, _locale.enUS);
|
|
107
|
-
|
|
108
71
|
const cmd = _this.app.findCommand('install');
|
|
109
|
-
|
|
110
72
|
if (cmd) {
|
|
111
73
|
cmd.requiredOption('-e, --root-email <rootEmail>', '', process.env.INIT_ROOT_EMAIL);
|
|
112
74
|
cmd.requiredOption('-p, --root-password <rootPassword>', '', process.env.INIT_ROOT_PASSWORD);
|
|
113
75
|
cmd.option('-n, --root-nickname <rootNickname>');
|
|
114
76
|
}
|
|
115
|
-
|
|
116
77
|
_this.db.registerOperators({
|
|
117
78
|
$isCurrentUser(_, ctx) {
|
|
118
79
|
var _ctx$app, _ctx$app$ctx, _ctx$app$ctx$state, _ctx$app$ctx$state$cu;
|
|
119
|
-
|
|
120
80
|
return {
|
|
121
81
|
[_database().Op.eq]: (ctx === null || ctx === void 0 ? void 0 : (_ctx$app = ctx.app) === null || _ctx$app === void 0 ? void 0 : (_ctx$app$ctx = _ctx$app.ctx) === null || _ctx$app$ctx === void 0 ? void 0 : (_ctx$app$ctx$state = _ctx$app$ctx.state) === null || _ctx$app$ctx$state === void 0 ? void 0 : (_ctx$app$ctx$state$cu = _ctx$app$ctx$state.currentUser) === null || _ctx$app$ctx$state$cu === void 0 ? void 0 : _ctx$app$ctx$state$cu.id) || -1
|
|
122
82
|
};
|
|
123
83
|
},
|
|
124
|
-
|
|
125
84
|
$isNotCurrentUser(_, ctx) {
|
|
126
85
|
var _ctx$app2, _ctx$app2$ctx, _ctx$app2$ctx$state, _ctx$app2$ctx$state$c;
|
|
127
|
-
|
|
128
86
|
return {
|
|
129
87
|
[_database().Op.ne]: (ctx === null || ctx === void 0 ? void 0 : (_ctx$app2 = ctx.app) === null || _ctx$app2 === void 0 ? void 0 : (_ctx$app2$ctx = _ctx$app2.ctx) === null || _ctx$app2$ctx === void 0 ? void 0 : (_ctx$app2$ctx$state = _ctx$app2$ctx.state) === null || _ctx$app2$ctx$state === void 0 ? void 0 : (_ctx$app2$ctx$state$c = _ctx$app2$ctx$state.currentUser) === null || _ctx$app2$ctx$state$c === void 0 ? void 0 : _ctx$app2$ctx$state$c.id) || -1
|
|
130
88
|
};
|
|
131
89
|
},
|
|
132
|
-
|
|
133
90
|
$isVar(val, ctx) {
|
|
134
91
|
var _ctx$app3, _ctx$app3$ctx;
|
|
135
|
-
|
|
136
92
|
const obj = (0, _jsonTemplates().default)({
|
|
137
93
|
val: `{{${val}}}`
|
|
138
94
|
})(JSON.parse(JSON.stringify(ctx === null || ctx === void 0 ? void 0 : (_ctx$app3 = ctx.app) === null || _ctx$app3 === void 0 ? void 0 : (_ctx$app3$ctx = _ctx$app3.ctx) === null || _ctx$app3$ctx === void 0 ? void 0 : _ctx$app3$ctx.state)));
|
|
@@ -140,14 +96,11 @@ class UsersPlugin extends _server().Plugin {
|
|
|
140
96
|
[_database().Op.eq]: obj.val
|
|
141
97
|
};
|
|
142
98
|
}
|
|
143
|
-
|
|
144
99
|
});
|
|
145
|
-
|
|
146
100
|
_this.db.on('afterDefineCollection', collection => {
|
|
147
101
|
let _collection$options = collection.options,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
102
|
+
createdBy = _collection$options.createdBy,
|
|
103
|
+
updatedBy = _collection$options.updatedBy;
|
|
151
104
|
if (createdBy === true) {
|
|
152
105
|
collection.setField('createdById', {
|
|
153
106
|
type: 'context',
|
|
@@ -164,7 +117,6 @@ class UsersPlugin extends _server().Plugin {
|
|
|
164
117
|
targetKey: 'id'
|
|
165
118
|
});
|
|
166
119
|
}
|
|
167
|
-
|
|
168
120
|
if (updatedBy === true) {
|
|
169
121
|
collection.setField('updatedById', {
|
|
170
122
|
type: 'context',
|
|
@@ -181,19 +133,15 @@ class UsersPlugin extends _server().Plugin {
|
|
|
181
133
|
});
|
|
182
134
|
}
|
|
183
135
|
});
|
|
184
|
-
|
|
185
136
|
for (var _i = 0, _Object$entries = Object.entries(actions); _i < _Object$entries.length; _i++) {
|
|
186
137
|
const _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
138
|
+
key = _Object$entries$_i[0],
|
|
139
|
+
action = _Object$entries$_i[1];
|
|
190
140
|
_this.app.resourcer.registerActionHandler(`users:${key}`, action);
|
|
191
141
|
}
|
|
192
|
-
|
|
193
142
|
_this.app.resourcer.use(_middlewares.parseToken, {
|
|
194
143
|
tag: 'parseToken'
|
|
195
144
|
});
|
|
196
|
-
|
|
197
145
|
_this.app.acl.addFixedParams('users', 'destroy', () => {
|
|
198
146
|
return {
|
|
199
147
|
filter: {
|
|
@@ -201,7 +149,6 @@ class UsersPlugin extends _server().Plugin {
|
|
|
201
149
|
}
|
|
202
150
|
};
|
|
203
151
|
});
|
|
204
|
-
|
|
205
152
|
_this.app.acl.addFixedParams('collections', 'destroy', () => {
|
|
206
153
|
return {
|
|
207
154
|
filter: {
|
|
@@ -209,24 +156,19 @@ class UsersPlugin extends _server().Plugin {
|
|
|
209
156
|
}
|
|
210
157
|
};
|
|
211
158
|
});
|
|
212
|
-
|
|
213
159
|
const publicActions = ['check', 'signin', 'signup', 'lostpassword', 'resetpassword', 'getUserByResetToken'];
|
|
214
160
|
const loggedInActions = ['signout', 'updateProfile', 'changePassword'];
|
|
215
161
|
publicActions.forEach(action => _this.app.acl.allow('users', action));
|
|
216
162
|
loggedInActions.forEach(action => _this.app.acl.allow('users', action, 'loggedIn'));
|
|
217
|
-
|
|
218
163
|
_this.app.on('beforeStart', () => _this.initVerification());
|
|
219
164
|
})();
|
|
220
165
|
}
|
|
221
|
-
|
|
222
166
|
load() {
|
|
223
167
|
var _this2 = this;
|
|
224
|
-
|
|
225
168
|
return _asyncToGenerator(function* () {
|
|
226
169
|
yield _this2.db.import({
|
|
227
170
|
directory: (0, _path().resolve)(__dirname, 'collections')
|
|
228
171
|
});
|
|
229
|
-
|
|
230
172
|
_this2.db.addMigrations({
|
|
231
173
|
namespace: 'users',
|
|
232
174
|
directory: (0, _path().resolve)(__dirname, 'migrations'),
|
|
@@ -234,45 +176,36 @@ class UsersPlugin extends _server().Plugin {
|
|
|
234
176
|
plugin: _this2
|
|
235
177
|
}
|
|
236
178
|
});
|
|
237
|
-
|
|
238
179
|
(0, _authenticators.default)(_this2);
|
|
239
180
|
})();
|
|
240
181
|
}
|
|
241
|
-
|
|
242
182
|
getInstallingData(options = {}) {
|
|
243
183
|
var _options$cliArgs;
|
|
244
|
-
|
|
245
184
|
const _process$env = process.env,
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
185
|
+
INIT_ROOT_NICKNAME = _process$env.INIT_ROOT_NICKNAME,
|
|
186
|
+
INIT_ROOT_PASSWORD = _process$env.INIT_ROOT_PASSWORD,
|
|
187
|
+
INIT_ROOT_EMAIL = _process$env.INIT_ROOT_EMAIL;
|
|
250
188
|
const _ref = options.users || (options === null || options === void 0 ? void 0 : (_options$cliArgs = options.cliArgs) === null || _options$cliArgs === void 0 ? void 0 : _options$cliArgs[0]) || {},
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
189
|
+
_ref$rootEmail = _ref.rootEmail,
|
|
190
|
+
rootEmail = _ref$rootEmail === void 0 ? INIT_ROOT_EMAIL : _ref$rootEmail,
|
|
191
|
+
_ref$rootPassword = _ref.rootPassword,
|
|
192
|
+
rootPassword = _ref$rootPassword === void 0 ? INIT_ROOT_PASSWORD : _ref$rootPassword,
|
|
193
|
+
_ref$rootNickname = _ref.rootNickname,
|
|
194
|
+
rootNickname = _ref$rootNickname === void 0 ? INIT_ROOT_NICKNAME || 'Super Admin' : _ref$rootNickname;
|
|
258
195
|
return {
|
|
259
196
|
rootEmail,
|
|
260
197
|
rootPassword,
|
|
261
198
|
rootNickname
|
|
262
199
|
};
|
|
263
200
|
}
|
|
264
|
-
|
|
265
201
|
install(options) {
|
|
266
202
|
var _this3 = this;
|
|
267
|
-
|
|
268
203
|
return _asyncToGenerator(function* () {
|
|
269
204
|
const _this3$getInstallingD = _this3.getInstallingData(options),
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
205
|
+
rootNickname = _this3$getInstallingD.rootNickname,
|
|
206
|
+
rootPassword = _this3$getInstallingD.rootPassword,
|
|
207
|
+
rootEmail = _this3$getInstallingD.rootEmail;
|
|
274
208
|
const User = _this3.db.getCollection('users');
|
|
275
|
-
|
|
276
209
|
if (yield User.repository.findOne({
|
|
277
210
|
filter: {
|
|
278
211
|
email: rootEmail
|
|
@@ -280,7 +213,6 @@ class UsersPlugin extends _server().Plugin {
|
|
|
280
213
|
})) {
|
|
281
214
|
return;
|
|
282
215
|
}
|
|
283
|
-
|
|
284
216
|
const user = yield User.repository.create({
|
|
285
217
|
values: {
|
|
286
218
|
email: rootEmail,
|
|
@@ -288,69 +220,52 @@ class UsersPlugin extends _server().Plugin {
|
|
|
288
220
|
nickname: rootNickname
|
|
289
221
|
}
|
|
290
222
|
});
|
|
291
|
-
|
|
292
223
|
const repo = _this3.db.getRepository('collections');
|
|
293
|
-
|
|
294
224
|
if (repo) {
|
|
295
225
|
yield repo.db2cm('users');
|
|
296
226
|
}
|
|
297
227
|
})();
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
|
|
228
|
+
}
|
|
229
|
+
// TODO(module): should move to preset or dynamic configuration panel
|
|
301
230
|
initVerification() {
|
|
302
231
|
var _this4 = this;
|
|
303
|
-
|
|
304
232
|
return _asyncToGenerator(function* () {
|
|
305
233
|
const verificationPlugin = _this4.app.getPlugin('verification');
|
|
306
|
-
|
|
307
234
|
if (!verificationPlugin) {
|
|
308
235
|
return;
|
|
309
236
|
}
|
|
310
|
-
|
|
311
237
|
const systemSettingsRepo = _this4.db.getRepository('systemSettings');
|
|
312
|
-
|
|
313
238
|
const settings = yield systemSettingsRepo.findOne();
|
|
314
|
-
|
|
315
239
|
if (!settings.smsAuthEnabled) {
|
|
316
240
|
return;
|
|
317
241
|
}
|
|
318
|
-
|
|
319
242
|
verificationPlugin.interceptors.register('users:signin', {
|
|
320
243
|
manual: true,
|
|
321
|
-
|
|
322
244
|
getReceiver(ctx) {
|
|
323
245
|
return ctx.action.params.values.phone;
|
|
324
246
|
},
|
|
325
|
-
|
|
326
247
|
expiresIn: 120,
|
|
327
248
|
validate: function () {
|
|
328
249
|
var _validate = _asyncToGenerator(function* (ctx, phone) {
|
|
329
250
|
if (!phone) {
|
|
330
251
|
throw new Error(ctx.t('Not a valid cellphone number, please re-enter'));
|
|
331
252
|
}
|
|
332
|
-
|
|
333
253
|
const User = _this4.db.getCollection('users');
|
|
334
|
-
|
|
335
254
|
const exists = yield User.model.count({
|
|
336
255
|
where: {
|
|
337
256
|
phone
|
|
338
257
|
}
|
|
339
258
|
});
|
|
340
|
-
|
|
341
259
|
if (!exists) {
|
|
342
260
|
throw new Error(ctx.t('The phone number is not registered, please register first', {
|
|
343
261
|
ns: _2.namespace
|
|
344
262
|
}));
|
|
345
263
|
}
|
|
346
|
-
|
|
347
264
|
return true;
|
|
348
265
|
});
|
|
349
|
-
|
|
350
|
-
function validate(_x, _x2) {
|
|
266
|
+
function validate(_x2, _x3) {
|
|
351
267
|
return _validate.apply(this, arguments);
|
|
352
268
|
}
|
|
353
|
-
|
|
354
269
|
return validate;
|
|
355
270
|
}()
|
|
356
271
|
});
|
|
@@ -358,7 +273,6 @@ class UsersPlugin extends _server().Plugin {
|
|
|
358
273
|
getReceiver(ctx) {
|
|
359
274
|
return ctx.action.params.values.phone;
|
|
360
275
|
},
|
|
361
|
-
|
|
362
276
|
expiresIn: 120,
|
|
363
277
|
validate: function () {
|
|
364
278
|
var _validate2 = _asyncToGenerator(function* (ctx, phone) {
|
|
@@ -367,32 +281,25 @@ class UsersPlugin extends _server().Plugin {
|
|
|
367
281
|
ns: _2.namespace
|
|
368
282
|
}));
|
|
369
283
|
}
|
|
370
|
-
|
|
371
284
|
const User = _this4.db.getCollection('users');
|
|
372
|
-
|
|
373
285
|
const exists = yield User.model.count({
|
|
374
286
|
where: {
|
|
375
287
|
phone
|
|
376
288
|
}
|
|
377
289
|
});
|
|
378
|
-
|
|
379
290
|
if (exists) {
|
|
380
291
|
throw new Error(ctx.t('The phone number has been registered, please login directly', {
|
|
381
292
|
ns: _2.namespace
|
|
382
293
|
}));
|
|
383
294
|
}
|
|
384
|
-
|
|
385
295
|
return true;
|
|
386
296
|
});
|
|
387
|
-
|
|
388
|
-
function validate(_x3, _x4) {
|
|
297
|
+
function validate(_x4, _x5) {
|
|
389
298
|
return _validate2.apply(this, arguments);
|
|
390
299
|
}
|
|
391
|
-
|
|
392
300
|
return validate;
|
|
393
301
|
}()
|
|
394
302
|
});
|
|
395
|
-
|
|
396
303
|
_this4.authenticators.register('sms', (ctx, next) => verificationPlugin.intercept(ctx, /*#__PURE__*/_asyncToGenerator(function* () {
|
|
397
304
|
const values = ctx.action.params.values;
|
|
398
305
|
const User = ctx.db.getCollection('users');
|
|
@@ -401,19 +308,15 @@ class UsersPlugin extends _server().Plugin {
|
|
|
401
308
|
phone: values.phone
|
|
402
309
|
}
|
|
403
310
|
});
|
|
404
|
-
|
|
405
311
|
if (!user) {
|
|
406
312
|
return ctx.throw(404, ctx.t('The phone number is incorrect, please re-enter', {
|
|
407
313
|
ns: _2.namespace
|
|
408
314
|
}));
|
|
409
315
|
}
|
|
410
|
-
|
|
411
316
|
ctx.state.currentUser = user;
|
|
412
317
|
return next();
|
|
413
318
|
})));
|
|
414
319
|
})();
|
|
415
320
|
}
|
|
416
|
-
|
|
417
321
|
}
|
|
418
|
-
|
|
419
322
|
exports.default = UsersPlugin;
|
package/package.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/plugin-users",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2-alpha.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "AGPL-3.0",
|
|
6
6
|
"main": "./lib/index.js",
|
|
7
7
|
"types": "./lib/index.d.ts",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@nocobase/actions": "0.9.
|
|
10
|
-
"@nocobase/database": "0.9.
|
|
11
|
-
"@nocobase/resourcer": "0.9.
|
|
12
|
-
"@nocobase/server": "0.9.
|
|
13
|
-
"@nocobase/utils": "0.9.
|
|
9
|
+
"@nocobase/actions": "0.9.2-alpha.1",
|
|
10
|
+
"@nocobase/database": "0.9.2-alpha.1",
|
|
11
|
+
"@nocobase/resourcer": "0.9.2-alpha.1",
|
|
12
|
+
"@nocobase/server": "0.9.2-alpha.1",
|
|
13
|
+
"@nocobase/utils": "0.9.2-alpha.1",
|
|
14
14
|
"json-templates": "^4.2.0",
|
|
15
15
|
"jsonwebtoken": "^8.5.1"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@nocobase/test": "0.9.
|
|
18
|
+
"@nocobase/test": "0.9.2-alpha.1",
|
|
19
19
|
"@types/jsonwebtoken": "^8.5.8"
|
|
20
20
|
},
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "a4f103eb0144f07205aff7b2a6be8ea6aa1330df"
|
|
22
22
|
}
|