payload 1.8.4 → 1.8.6
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/dist/admin/components/elements/DraggableSortable/index.js +1 -2
- package/dist/admin/components/elements/DraggableSortable/index.js.map +1 -1
- package/dist/admin/components/forms/field-types/ConfirmPassword/index.d.ts +2 -1
- package/dist/admin/components/forms/field-types/ConfirmPassword/index.js +3 -2
- package/dist/admin/components/forms/field-types/ConfirmPassword/index.js.map +1 -1
- package/dist/admin/components/forms/field-types/ConfirmPassword/types.d.ts +3 -0
- package/dist/admin/components/forms/field-types/ConfirmPassword/types.js +3 -0
- package/dist/admin/components/forms/field-types/ConfirmPassword/types.js.map +1 -0
- package/dist/admin/components/forms/field-types/Password/index.js +2 -2
- package/dist/admin/components/forms/field-types/Password/index.js.map +1 -1
- package/dist/admin/components/forms/field-types/Password/types.d.ts +1 -0
- package/dist/admin/components/forms/field-types/Relationship/index.js +12 -15
- package/dist/admin/components/forms/field-types/Relationship/index.js.map +1 -1
- package/dist/admin/components/forms/field-types/Relationship/types.d.ts +0 -1
- package/dist/admin/components/views/Account/Default.js +1 -1
- package/dist/admin/components/views/Account/Default.js.map +1 -1
- package/dist/admin/components/views/collections/Edit/Auth/APIKey.d.ts +3 -1
- package/dist/admin/components/views/collections/Edit/Auth/APIKey.js +2 -2
- package/dist/admin/components/views/collections/Edit/Auth/APIKey.js.map +1 -1
- package/dist/admin/components/views/collections/Edit/Auth/index.js +10 -10
- package/dist/admin/components/views/collections/Edit/Auth/index.js.map +1 -1
- package/dist/admin/components/views/collections/Edit/Auth/types.d.ts +1 -0
- package/dist/admin/components/views/collections/Edit/Default.js +1 -1
- package/dist/admin/components/views/collections/Edit/Default.js.map +1 -1
- package/dist/admin/components/views/collections/List/SelectionProvider/index.js +4 -1
- package/dist/admin/components/views/collections/List/SelectionProvider/index.js.map +1 -1
- package/dist/auth/baseFields/auth.d.ts +2 -2
- package/dist/auth/baseFields/auth.js +12 -1
- package/dist/auth/baseFields/auth.js.map +1 -1
- package/dist/auth/operations/login.js +14 -8
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/resetPassword.js +12 -5
- package/dist/auth/operations/resetPassword.js.map +1 -1
- package/dist/auth/operations/unlock.js +6 -1
- package/dist/auth/operations/unlock.js.map +1 -1
- package/dist/auth/strategies/local/authenticate.d.ts +8 -0
- package/dist/auth/strategies/local/authenticate.js +35 -0
- package/dist/auth/strategies/local/authenticate.js.map +1 -0
- package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +8 -0
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +34 -0
- package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -0
- package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +9 -0
- package/dist/auth/strategies/local/incrementLoginAttempts.js +36 -0
- package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -0
- package/dist/auth/strategies/local/register.d.ts +10 -0
- package/dist/auth/strategies/local/register.js +28 -0
- package/dist/auth/strategies/local/register.js.map +1 -0
- package/dist/auth/strategies/local/resetLoginAttempts.d.ts +9 -0
- package/dist/auth/strategies/local/resetLoginAttempts.js +15 -0
- package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -0
- package/dist/collections/initLocal.js +0 -35
- package/dist/collections/initLocal.js.map +1 -1
- package/dist/collections/operations/create.js +7 -10
- package/dist/collections/operations/create.js.map +1 -1
- package/dist/collections/operations/updateByID.js +7 -4
- package/dist/collections/operations/updateByID.js.map +1 -1
- package/dist/fields/validations.js +1 -1
- package/dist/fields/validations.js.map +1 -1
- package/dist/globals/initLocal.js +1 -0
- package/dist/globals/initLocal.js.map +1 -1
- package/dist/globals/operations/update.js +1 -1
- package/dist/globals/operations/update.js.map +1 -1
- package/dist/graphql/schema/recursivelyBuildNestedPaths.js +4 -1
- package/dist/graphql/schema/recursivelyBuildNestedPaths.js.map +1 -1
- package/dist/mongoose/buildSchema.js +3 -0
- package/dist/mongoose/buildSchema.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/entityToJSONSchema.js +1 -1
- package/dist/utilities/entityToJSONSchema.js.map +1 -1
- package/docs/queries/overview.mdx +64 -58
- package/package.json +2 -2
|
@@ -11,6 +11,8 @@ const sanitizeInternalFields_1 = __importDefault(require("../../utilities/saniti
|
|
|
11
11
|
const types_1 = require("../../fields/config/types");
|
|
12
12
|
const afterRead_1 = require("../../fields/hooks/afterRead");
|
|
13
13
|
const unlock_1 = __importDefault(require("./unlock"));
|
|
14
|
+
const incrementLoginAttempts_1 = require("../strategies/local/incrementLoginAttempts");
|
|
15
|
+
const authenticate_1 = require("../strategies/local/authenticate");
|
|
14
16
|
async function login(incomingArgs) {
|
|
15
17
|
let args = incomingArgs;
|
|
16
18
|
// /////////////////////////////////////
|
|
@@ -31,18 +33,25 @@ async function login(incomingArgs) {
|
|
|
31
33
|
const email = unsanitizedEmail ? unsanitizedEmail.toLowerCase().trim() : null;
|
|
32
34
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
33
35
|
// @ts-ignore Improper typing in library, additional args should be optional
|
|
34
|
-
const userDoc = await Model.
|
|
36
|
+
const userDoc = await Model.findOne({ email }).lean();
|
|
37
|
+
let user = JSON.parse(JSON.stringify(userDoc));
|
|
35
38
|
if (!userDoc || (args.collection.config.auth.verify && userDoc._verified === false)) {
|
|
36
39
|
throw new errors_1.AuthenticationError(req.t);
|
|
37
40
|
}
|
|
38
41
|
if (userDoc && (0, isLocked_1.default)(userDoc.lockUntil)) {
|
|
39
42
|
throw new errors_1.LockedAuth(req.t);
|
|
40
43
|
}
|
|
41
|
-
const authResult = await
|
|
44
|
+
const authResult = await (0, authenticate_1.authenticateLocalStrategy)({ password, doc: user });
|
|
45
|
+
user = (0, sanitizeInternalFields_1.default)(user);
|
|
42
46
|
const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0;
|
|
43
|
-
if (!authResult
|
|
44
|
-
if (maxLoginAttemptsEnabled)
|
|
45
|
-
await
|
|
47
|
+
if (!authResult) {
|
|
48
|
+
if (maxLoginAttemptsEnabled) {
|
|
49
|
+
await (0, incrementLoginAttempts_1.incrementLoginAttempts)({
|
|
50
|
+
payload: req.payload,
|
|
51
|
+
doc: user,
|
|
52
|
+
collection: collectionConfig,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
46
55
|
throw new errors_1.AuthenticationError(req.t);
|
|
47
56
|
}
|
|
48
57
|
if (maxLoginAttemptsEnabled) {
|
|
@@ -56,9 +65,6 @@ async function login(incomingArgs) {
|
|
|
56
65
|
overrideAccess: true,
|
|
57
66
|
});
|
|
58
67
|
}
|
|
59
|
-
let user = userDoc.toJSON({ virtuals: true });
|
|
60
|
-
user = JSON.parse(JSON.stringify(user));
|
|
61
|
-
user = (0, sanitizeInternalFields_1.default)(user);
|
|
62
68
|
const fieldsToSign = collectionConfig.fields.reduce((signedFields, field) => {
|
|
63
69
|
const result = {
|
|
64
70
|
...signedFields,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":";;;;;AAAA,gEAA+B;AAG/B,yCAA+D;AAE/D,8FAAsE;AACtE,2DAAmC;AACnC,oGAA4E;AAC5E,qDAAuF;AAGvF,4DAAyD;AACzD,sDAA8B;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
|
7
7
|
const errors_1 = require("../../errors");
|
|
8
8
|
const getCookieExpiration_1 = __importDefault(require("../../utilities/getCookieExpiration"));
|
|
9
9
|
const types_1 = require("../../fields/config/types");
|
|
10
|
+
const authenticate_1 = require("../strategies/local/authenticate");
|
|
11
|
+
const generatePasswordSaltHash_1 = require("../strategies/local/generatePasswordSaltHash");
|
|
10
12
|
async function resetPassword(args) {
|
|
11
13
|
if (!Object.prototype.hasOwnProperty.call(args.data, 'token')
|
|
12
14
|
|| !Object.prototype.hasOwnProperty.call(args.data, 'password')) {
|
|
@@ -16,19 +18,24 @@ async function resetPassword(args) {
|
|
|
16
18
|
// /////////////////////////////////////
|
|
17
19
|
// Reset Password
|
|
18
20
|
// /////////////////////////////////////
|
|
19
|
-
|
|
21
|
+
let user = await Model.findOne({
|
|
20
22
|
resetPasswordToken: data.token,
|
|
21
23
|
resetPasswordExpiration: { $gt: Date.now() },
|
|
22
|
-
});
|
|
24
|
+
}).lean();
|
|
25
|
+
user = JSON.parse(JSON.stringify(user));
|
|
23
26
|
if (!user)
|
|
24
27
|
throw new errors_1.APIError('Token is either invalid or has expired.');
|
|
25
|
-
|
|
28
|
+
// TODO: replace this method
|
|
29
|
+
const { salt, hash } = await (0, generatePasswordSaltHash_1.generatePasswordSaltHash)({ password: data.password });
|
|
30
|
+
user.salt = salt;
|
|
31
|
+
user.hash = hash;
|
|
26
32
|
user.resetPasswordExpiration = Date.now();
|
|
27
33
|
if (collectionConfig.auth.verify) {
|
|
28
34
|
user._verified = true;
|
|
29
35
|
}
|
|
30
|
-
await user.
|
|
31
|
-
|
|
36
|
+
let doc = await Model.findByIdAndUpdate({ _id: user.id }, user, { new: true }).lean();
|
|
37
|
+
doc = JSON.parse(JSON.stringify(doc));
|
|
38
|
+
await (0, authenticate_1.authenticateLocalStrategy)({ password: data.password, doc });
|
|
32
39
|
const fieldsToSign = collectionConfig.fields.reduce((signedFields, field) => {
|
|
33
40
|
if ((0, types_1.fieldAffectsData)(field) && field.saveToJWT) {
|
|
34
41
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resetPassword.js","sourceRoot":"","sources":["../../../src/auth/operations/resetPassword.ts"],"names":[],"mappings":";;;;;AAAA,gEAA+B;AAG/B,yCAAwC;AACxC,8FAAsE;AAEtE,qDAA6D;
|
|
1
|
+
{"version":3,"file":"resetPassword.js","sourceRoot":"","sources":["../../../src/auth/operations/resetPassword.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const errors_1 = require("../../errors");
|
|
7
7
|
const executeAccess_1 = __importDefault(require("../executeAccess"));
|
|
8
|
+
const resetLoginAttempts_1 = require("../strategies/local/resetLoginAttempts");
|
|
8
9
|
async function unlock(args) {
|
|
9
10
|
if (!Object.prototype.hasOwnProperty.call(args.data, 'email')) {
|
|
10
11
|
throw new errors_1.APIError('Missing email.');
|
|
@@ -24,7 +25,11 @@ async function unlock(args) {
|
|
|
24
25
|
const user = await Model.findOne({ email: data.email.toLowerCase() });
|
|
25
26
|
if (!user)
|
|
26
27
|
return null;
|
|
27
|
-
await
|
|
28
|
+
await (0, resetLoginAttempts_1.resetLoginAttempts)({
|
|
29
|
+
payload: req.payload,
|
|
30
|
+
collection: collectionConfig,
|
|
31
|
+
doc: user,
|
|
32
|
+
});
|
|
28
33
|
return true;
|
|
29
34
|
}
|
|
30
35
|
exports.default = unlock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../src/auth/operations/unlock.ts"],"names":[],"mappings":";;;;;AAAA,yCAAwC;AACxC,qEAA6C;
|
|
1
|
+
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../src/auth/operations/unlock.ts"],"names":[],"mappings":";;;;;AAAA,yCAAwC;AACxC,qEAA6C;AAG7C,+EAA4E;AAW5E,KAAK,UAAU,MAAM,CAAC,IAAU;IAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;QAC7D,MAAM,IAAI,iBAAQ,CAAC,gBAAgB,CAAC,CAAC;KACtC;IAED,MAAM,EACJ,UAAU,EAAE,EACV,KAAK,EACL,MAAM,EAAE,gBAAgB,GACzB,EACD,GAAG,EACH,cAAc,GACf,GAAG,IAAI,CAAC;IAET,wCAAwC;IACxC,SAAS;IACT,wCAAwC;IAExC,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAA,uBAAa,EAAC,EAAE,GAAG,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9D;IAED,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,wCAAwC;IACxC,SAAS;IACT,wCAAwC;IAExC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEtE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,IAAA,uCAAkB,EAAC;QACvB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,gBAAgB;QAC5B,GAAG,EAAE,IAAI;KACV,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TypeWithID } from "../../../collections/config/types";
|
|
2
|
+
type Doc = TypeWithID & Record<string, unknown>;
|
|
3
|
+
type Args = {
|
|
4
|
+
doc: Doc;
|
|
5
|
+
password: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const authenticateLocalStrategy: ({ doc, password, }: Args) => Promise<Doc | null>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.authenticateLocalStrategy = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const scmp_1 = __importDefault(require("scmp"));
|
|
9
|
+
const authenticateLocalStrategy = async ({ doc, password, }) => {
|
|
10
|
+
try {
|
|
11
|
+
const salt = doc.salt;
|
|
12
|
+
const hash = doc.hash;
|
|
13
|
+
if (typeof salt === 'string' && typeof hash === 'string') {
|
|
14
|
+
const res = await new Promise((resolve, reject) => {
|
|
15
|
+
crypto_1.default.pbkdf2(password, salt, 25000, 512, 'sha256', (e, hashBuffer) => {
|
|
16
|
+
if (e)
|
|
17
|
+
reject(null);
|
|
18
|
+
if ((0, scmp_1.default)(hashBuffer, Buffer.from(hash, 'hex'))) {
|
|
19
|
+
resolve(doc);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
reject(null);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
return res;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.authenticateLocalStrategy = authenticateLocalStrategy;
|
|
35
|
+
//# sourceMappingURL=authenticate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../../../../src/auth/strategies/local/authenticate.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAC3B,gDAAuB;AAWhB,MAAM,yBAAyB,GAAG,KAAK,EAAE,EAC9C,GAAG,EACH,QAAQ,GACH,EAAuB,EAAE;IAC9B,IAAI;QACF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACrB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QAErB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACxD,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5D,gBAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE;oBACpE,IAAI,CAAC;wBAAE,MAAM,CAAC,IAAI,CAAC,CAAA;oBAEnB,IAAI,IAAA,cAAI,EAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;wBAC9C,OAAO,CAAC,GAAG,CAAC,CAAA;qBACb;yBAAM;wBACL,MAAM,CAAC,IAAI,CAAC,CAAA;qBACb;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAA;YAEF,OAAO,GAAG,CAAA;SACX;QAED,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AA5BY,QAAA,yBAAyB,6BA4BrC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generatePasswordSaltHash = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const errors_1 = require("../../../errors");
|
|
9
|
+
const defaultPasswordValidator = (password) => {
|
|
10
|
+
if (!password)
|
|
11
|
+
return 'No password was given';
|
|
12
|
+
if (password.length < 3)
|
|
13
|
+
return 'Password must be at least 3 characters';
|
|
14
|
+
return true;
|
|
15
|
+
};
|
|
16
|
+
function randomBytes() {
|
|
17
|
+
return new Promise((resolve, reject) => crypto_1.default.randomBytes(32, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))));
|
|
18
|
+
}
|
|
19
|
+
function pbkdf2Promisified(password, salt) {
|
|
20
|
+
return new Promise((resolve, reject) => crypto_1.default.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));
|
|
21
|
+
}
|
|
22
|
+
const generatePasswordSaltHash = async ({ password, }) => {
|
|
23
|
+
const validationResult = defaultPasswordValidator(password);
|
|
24
|
+
if (typeof validationResult === 'string') {
|
|
25
|
+
throw new errors_1.ValidationError([{ message: validationResult, field: 'password' }]);
|
|
26
|
+
}
|
|
27
|
+
const saltBuffer = await randomBytes();
|
|
28
|
+
const salt = saltBuffer.toString('hex');
|
|
29
|
+
const hashRaw = await pbkdf2Promisified(password, salt);
|
|
30
|
+
const hash = hashRaw.toString('hex');
|
|
31
|
+
return { salt, hash };
|
|
32
|
+
};
|
|
33
|
+
exports.generatePasswordSaltHash = generatePasswordSaltHash;
|
|
34
|
+
//# sourceMappingURL=generatePasswordSaltHash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatePasswordSaltHash.js","sourceRoot":"","sources":["../../../../src/auth/strategies/local/generatePasswordSaltHash.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;AAC3B,4CAAiD;AAEjD,MAAM,wBAAwB,GAAG,CAAC,QAAgB,EAAiB,EAAE;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO,uBAAuB,CAAA;IAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,wCAAwC,CAAA;IAExE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAClI,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,IAAY;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACzJ,CAAC;AAMM,MAAM,wBAAwB,GAAG,KAAK,EAAE,EAC7C,QAAQ,GACH,EAA2C,EAAE;IAClD,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IAE3D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;QACxC,MAAM,IAAI,wBAAe,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;KAC9E;IAED,MAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAA;IACtC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEpC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC,CAAA;AAhBY,QAAA,wBAAwB,4BAgBpC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Payload } from "../../..";
|
|
2
|
+
import { SanitizedCollectionConfig, TypeWithID } from "../../../collections/config/types";
|
|
3
|
+
type Args = {
|
|
4
|
+
payload: Payload;
|
|
5
|
+
doc: TypeWithID & Record<string, unknown>;
|
|
6
|
+
collection: SanitizedCollectionConfig;
|
|
7
|
+
};
|
|
8
|
+
export declare const incrementLoginAttempts: ({ payload, doc, collection, }: Args) => Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.incrementLoginAttempts = void 0;
|
|
4
|
+
const incrementLoginAttempts = async ({ payload, doc, collection, }) => {
|
|
5
|
+
const { auth: { maxLoginAttempts, lockTime, } } = collection;
|
|
6
|
+
if ('lockUntil' in doc && typeof doc.lockUntil === 'string') {
|
|
7
|
+
const lockUntil = Math.floor(new Date(doc.lockUntil).getTime() / 1000);
|
|
8
|
+
// Expired lock, restart count at 1
|
|
9
|
+
if (lockUntil < Date.now()) {
|
|
10
|
+
await payload.update({
|
|
11
|
+
collection: collection.slug,
|
|
12
|
+
id: doc.id,
|
|
13
|
+
data: {
|
|
14
|
+
loginAttempts: 1,
|
|
15
|
+
lockUntil: null,
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const data = {
|
|
22
|
+
loginAttempts: Number(doc.loginAttempts) + 1,
|
|
23
|
+
};
|
|
24
|
+
// Lock the account if at max attempts and not already locked
|
|
25
|
+
if (typeof doc.loginAttempts === 'number' && doc.loginAttempts + 1 >= maxLoginAttempts) {
|
|
26
|
+
const lockUntil = new Date((Date.now() + lockTime));
|
|
27
|
+
data.lockUntil = lockUntil;
|
|
28
|
+
}
|
|
29
|
+
await payload.update({
|
|
30
|
+
collection: collection.slug,
|
|
31
|
+
id: doc.id,
|
|
32
|
+
data,
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
exports.incrementLoginAttempts = incrementLoginAttempts;
|
|
36
|
+
//# sourceMappingURL=incrementLoginAttempts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incrementLoginAttempts.js","sourceRoot":"","sources":["../../../../src/auth/strategies/local/incrementLoginAttempts.ts"],"names":[],"mappings":";;;AASO,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,OAAO,EACP,GAAG,EACH,UAAU,GACL,EAAiB,EAAE;IACxB,MAAM,EACJ,IAAI,EAAE,EACJ,gBAAgB,EAChB,QAAQ,GACT,EACF,GAAG,UAAU,CAAA;IAEd,IAAI,WAAW,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,EAAE;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;QAEtE,mCAAmC;QACnC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,MAAM,OAAO,CAAC,MAAM,CAAC;gBACnB,UAAU,EAAE,UAAU,CAAC,IAAI;gBAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE;oBACJ,aAAa,EAAE,CAAC;oBAChB,SAAS,EAAE,IAAI;iBAChB;aACF,CAAC,CAAA;SACH;QAED,OAAM;KACP;IAED,MAAM,IAAI,GAA4B;QACpC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;KAC7C,CAAA;IAED,6DAA6D;IAC7D,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,gBAAgB,EAAE;QACtF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAA;QACnD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;KAC3B;IAGD,MAAM,OAAO,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA;AA9CY,QAAA,sBAAsB,0BA8ClC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Payload } from '../../..';
|
|
2
|
+
import { SanitizedCollectionConfig } from '../../../collections/config/types';
|
|
3
|
+
type Args = {
|
|
4
|
+
collection: SanitizedCollectionConfig;
|
|
5
|
+
doc: Record<string, unknown>;
|
|
6
|
+
password: string;
|
|
7
|
+
payload: Payload;
|
|
8
|
+
};
|
|
9
|
+
export declare const registerLocalStrategy: ({ collection, doc, password, payload, }: Args) => Promise<Record<string, unknown>>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerLocalStrategy = void 0;
|
|
4
|
+
const errors_1 = require("../../../errors");
|
|
5
|
+
const generatePasswordSaltHash_1 = require("./generatePasswordSaltHash");
|
|
6
|
+
const registerLocalStrategy = async ({ collection, doc, password, payload, }) => {
|
|
7
|
+
const existingUser = await payload.find({
|
|
8
|
+
collection: collection.slug,
|
|
9
|
+
depth: 0,
|
|
10
|
+
where: {
|
|
11
|
+
email: {
|
|
12
|
+
equals: doc.email,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
if (existingUser.docs.length > 0) {
|
|
17
|
+
throw new errors_1.ValidationError([{ message: 'A user with the given email is already registered', field: 'email' }]);
|
|
18
|
+
}
|
|
19
|
+
const { salt, hash } = await (0, generatePasswordSaltHash_1.generatePasswordSaltHash)({ password });
|
|
20
|
+
const result = await payload.collections[collection.slug].Model.create({
|
|
21
|
+
...doc,
|
|
22
|
+
salt,
|
|
23
|
+
hash
|
|
24
|
+
});
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
exports.registerLocalStrategy = registerLocalStrategy;
|
|
28
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/auth/strategies/local/register.ts"],"names":[],"mappings":";;;AAAA,4CAAiD;AAGjD,yEAAsE;AAS/D,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAC1C,UAAU,EACV,GAAG,EACH,QAAQ,EACR,OAAO,GACF,EAAoC,EAAE;IAC3C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QACtC,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,KAAK,EAAE,CAAC;QACR,KAAK,EAAE;YACL,KAAK,EAAE;gBACL,MAAM,EAAE,GAAG,CAAC,KAAK;aAClB;SACF;KACF,CAAC,CAAA;IAEF,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAChC,MAAM,IAAI,wBAAe,CAAC,CAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;KAC9G;IAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,mDAAwB,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;IAEnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QACrE,GAAG,GAAG;QACN,IAAI;QACJ,IAAI;KACL,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AA7BY,QAAA,qBAAqB,yBA6BjC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Payload } from "../../..";
|
|
2
|
+
import { SanitizedCollectionConfig, TypeWithID } from "../../../collections/config/types";
|
|
3
|
+
type Args = {
|
|
4
|
+
payload: Payload;
|
|
5
|
+
doc: TypeWithID & Record<string, unknown>;
|
|
6
|
+
collection: SanitizedCollectionConfig;
|
|
7
|
+
};
|
|
8
|
+
export declare const resetLoginAttempts: ({ payload, doc, collection, }: Args) => Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetLoginAttempts = void 0;
|
|
4
|
+
const resetLoginAttempts = async ({ payload, doc, collection, }) => {
|
|
5
|
+
await payload.update({
|
|
6
|
+
collection: collection.slug,
|
|
7
|
+
id: doc.id,
|
|
8
|
+
data: {
|
|
9
|
+
loginAttempts: 0,
|
|
10
|
+
lockUntil: null,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
exports.resetLoginAttempts = resetLoginAttempts;
|
|
15
|
+
//# sourceMappingURL=resetLoginAttempts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resetLoginAttempts.js","sourceRoot":"","sources":["../../../../src/auth/strategies/local/resetLoginAttempts.ts"],"names":[],"mappings":";;;AASO,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACvC,OAAO,EACP,GAAG,EACH,UAAU,GACL,EAAiB,EAAE;IACxB,MAAM,OAAO,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE;YACJ,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,IAAI;SAChB;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAbY,QAAA,kBAAkB,sBAa9B"}
|
|
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const mongoose_1 = __importDefault(require("mongoose"));
|
|
7
7
|
const mongoose_paginate_v2_1 = __importDefault(require("mongoose-paginate-v2"));
|
|
8
|
-
const passport_local_mongoose_1 = __importDefault(require("passport-local-mongoose"));
|
|
9
8
|
const mongoose_aggregate_paginate_v2_1 = __importDefault(require("mongoose-aggregate-paginate-v2"));
|
|
10
9
|
const buildCollectionFields_1 = require("../versions/buildCollectionFields");
|
|
11
10
|
const buildQuery_1 = __importDefault(require("../mongoose/buildQuery"));
|
|
@@ -17,40 +16,6 @@ function initCollectionsLocal(ctx) {
|
|
|
17
16
|
var _a;
|
|
18
17
|
const formattedCollection = collection;
|
|
19
18
|
const schema = (0, buildSchema_1.default)(formattedCollection, ctx.config);
|
|
20
|
-
if (collection.auth && !collection.auth.disableLocalStrategy) {
|
|
21
|
-
schema.plugin(passport_local_mongoose_1.default, {
|
|
22
|
-
usernameField: 'email',
|
|
23
|
-
errorMessages: {
|
|
24
|
-
UserExistsError: 'A user with the given email is already registered',
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
const { maxLoginAttempts, lockTime } = collection.auth;
|
|
28
|
-
if (maxLoginAttempts > 0) {
|
|
29
|
-
// eslint-disable-next-line func-names
|
|
30
|
-
schema.methods.incLoginAttempts = function (cb) {
|
|
31
|
-
// Expired lock, restart count at 1
|
|
32
|
-
if (this.lockUntil && this.lockUntil < Date.now()) {
|
|
33
|
-
return this.updateOne({
|
|
34
|
-
$set: { loginAttempts: 1 },
|
|
35
|
-
$unset: { lockUntil: 1 },
|
|
36
|
-
}, cb);
|
|
37
|
-
}
|
|
38
|
-
const updates = { $inc: { loginAttempts: 1 } };
|
|
39
|
-
// Lock the account if at max attempts and not already locked
|
|
40
|
-
if (this.loginAttempts + 1 >= maxLoginAttempts) {
|
|
41
|
-
updates.$set = { lockUntil: Date.now() + lockTime };
|
|
42
|
-
}
|
|
43
|
-
return this.updateOne(updates, cb);
|
|
44
|
-
};
|
|
45
|
-
// eslint-disable-next-line func-names
|
|
46
|
-
schema.methods.resetLoginAttempts = function (cb) {
|
|
47
|
-
return this.updateOne({
|
|
48
|
-
$set: { loginAttempts: 0 },
|
|
49
|
-
$unset: { lockUntil: 1 },
|
|
50
|
-
}, cb);
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
19
|
if (collection.versions) {
|
|
55
20
|
const versionModelName = (0, getVersionsModelName_1.getVersionsModelName)(collection);
|
|
56
21
|
const versionCollectionFields = (0, buildCollectionFields_1.buildVersionCollectionFields)(collection);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initLocal.js","sourceRoot":"","sources":["../../src/collections/initLocal.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"initLocal.js","sourceRoot":"","sources":["../../src/collections/initLocal.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAChC,gFAA4C;AAC5C,oGAAuE;AACvE,6EAAiF;AACjF,wEAAyD;AACzD,gEAAkD;AAClD,0EAAkD;AAGlD,2EAAwE;AAExE,SAAwB,oBAAoB,CAAC,GAAY;IACvD,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAqC,EAAE,EAAE;;QAC5F,MAAM,mBAAmB,GAAG,UAAU,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAA,qBAAqB,EAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtE,IAAI,UAAU,CAAC,QAAQ,EAAE;YACvB,MAAM,gBAAgB,GAAG,IAAA,2CAAoB,EAAC,UAAU,CAAC,CAAC;YAE1D,MAAM,uBAAuB,GAAG,IAAA,oDAA4B,EAAC,UAAU,CAAC,CAAC;YAEzE,MAAM,aAAa,GAAG,IAAA,qBAAW,EAC/B,GAAG,CAAC,MAAM,EACV,uBAAuB,EACvB;gBACE,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE;oBACP,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,KAAK;iBAChB;aACF,CACF,CAAC;YAEF,IAAI,UAAU,CAAC,OAAO,EAAE;gBACtB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACnC,+CAA+C;oBAC/C,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC5D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBACpD,YAAY,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;oBAChD,CAAC,CAAC,CAAC;oBACH,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;aACJ;YAED,aAAa,CAAC,MAAM,CAAC,8BAAQ,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;iBACxD,MAAM,CAAC,IAAA,oBAAmB,EAAC,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;YAE7G,IAAI,MAAA,UAAU,CAAC,QAAQ,0CAAE,MAAM,EAAE;gBAC/B,aAAa,CAAC,MAAM,CAAC,wCAAyB,CAAC,CAAC;aACjD;YAED,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,kBAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,aAAa,CAAoB,CAAC;SACpG;QAGD,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG;YAC1C,KAAK,EAAE,kBAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAoB;YAC1E,MAAM,EAAE,mBAAmB;SAC5B,CAAC;QAEF,OAAO,mBAAmB,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AArDD,uCAqDC"}
|
|
@@ -19,6 +19,7 @@ const afterRead_1 = require("../../fields/hooks/afterRead");
|
|
|
19
19
|
const generateFileData_1 = require("../../uploads/generateFileData");
|
|
20
20
|
const saveVersion_1 = require("../../versions/saveVersion");
|
|
21
21
|
const mapAsync_1 = require("../../utilities/mapAsync");
|
|
22
|
+
const register_1 = require("../../auth/strategies/local/register");
|
|
22
23
|
const unlinkFile = (0, util_1.promisify)(fs_1.default.unlink);
|
|
23
24
|
async function create(incomingArgs) {
|
|
24
25
|
var _a;
|
|
@@ -127,16 +128,12 @@ async function create(incomingArgs) {
|
|
|
127
128
|
resultWithLocales._verified = Boolean(resultWithLocales._verified) || false;
|
|
128
129
|
resultWithLocales._verificationToken = crypto_1.default.randomBytes(20).toString('hex');
|
|
129
130
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
throw new errors_1.ValidationError([{ message: error.message, field: 'email' }], req.t);
|
|
137
|
-
}
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
131
|
+
doc = await (0, register_1.registerLocalStrategy)({
|
|
132
|
+
collection: collectionConfig,
|
|
133
|
+
doc: resultWithLocales,
|
|
134
|
+
payload: req.payload,
|
|
135
|
+
password: data.password,
|
|
136
|
+
});
|
|
140
137
|
}
|
|
141
138
|
else {
|
|
142
139
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/collections/operations/create.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,+BAAiC;AAEjC,oDAA4B;AAG5B,6EAAqD;AACrD,oGAA4E;AAE5E,yCAA+C;AAE/C,6FAAqE;AAIrE,qDAA6D;AAC7D,2DAAwD;AACxD,kEAA+D;AAC/D,sEAAmE;AACnE,gEAA6D;AAC7D,4DAAyD;AACzD,qEAAkE;AAClE,4DAAyD;AACzD,uDAAoD;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/collections/operations/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ const generateFileData_1 = require("../../uploads/generateFileData");
|
|
|
18
18
|
const getLatestCollectionVersion_1 = require("../../versions/getLatestCollectionVersion");
|
|
19
19
|
const deleteAssociatedFiles_1 = require("../../uploads/deleteAssociatedFiles");
|
|
20
20
|
const unlinkTempFiles_1 = require("../../uploads/unlinkTempFiles");
|
|
21
|
+
const generatePasswordSaltHash_1 = require("../../auth/strategies/local/generatePasswordSaltHash");
|
|
21
22
|
async function updateByID(incomingArgs) {
|
|
22
23
|
let args = incomingArgs;
|
|
23
24
|
// /////////////////////////////////////
|
|
@@ -153,9 +154,11 @@ async function updateByID(incomingArgs) {
|
|
|
153
154
|
// /////////////////////////////////////
|
|
154
155
|
// Handle potential password update
|
|
155
156
|
// /////////////////////////////////////
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
await
|
|
157
|
+
const dataToUpdate = { ...result };
|
|
158
|
+
if (shouldSavePassword && typeof password === 'string') {
|
|
159
|
+
const { hash, salt } = await (0, generatePasswordSaltHash_1.generatePasswordSaltHash)({ password });
|
|
160
|
+
dataToUpdate.salt = salt;
|
|
161
|
+
dataToUpdate.hash = hash;
|
|
159
162
|
delete data.password;
|
|
160
163
|
delete result.password;
|
|
161
164
|
}
|
|
@@ -164,7 +167,7 @@ async function updateByID(incomingArgs) {
|
|
|
164
167
|
// /////////////////////////////////////
|
|
165
168
|
if (!shouldSaveDraft) {
|
|
166
169
|
try {
|
|
167
|
-
result = await Model.findByIdAndUpdate({ _id: id },
|
|
170
|
+
result = await Model.findByIdAndUpdate({ _id: id }, dataToUpdate, { new: true });
|
|
168
171
|
}
|
|
169
172
|
catch (error) {
|
|
170
173
|
// Handle uniqueness error from MongoDB
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateByID.js","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":";;;;;AAAA,8DAAqC;AAKrC,oGAA4E;AAC5E,6EAAqD;AACrD,yCAA8E;AAE9E,4CAAwD;AACxD,4DAAyD;AACzD,2DAAwD;AACxD,kEAA+D;AAC/D,sEAAmE;AACnE,gEAA6D;AAC7D,4DAAyD;AACzD,qEAAkE;AAClE,0FAAuF;AACvF,+EAA4E;AAC5E,mEAAgE;
|
|
1
|
+
{"version":3,"file":"updateByID.js","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"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"}
|