@starklabs/forge 1.3.5 → 1.3.7
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/js/auth/builtin/auth.collection.d.ts.map +1 -1
- package/dist/js/auth/builtin/auth.collection.js +7 -2
- package/dist/js/auth/builtin/auth.collection.js.map +1 -1
- package/dist/js/auth/builtin/getValidations.d.ts.map +1 -1
- package/dist/js/auth/builtin/getValidations.js +40 -24
- package/dist/js/auth/builtin/getValidations.js.map +1 -1
- package/dist/js/auth/forgotPassword.d.ts.map +1 -1
- package/dist/js/auth/forgotPassword.js +9 -5
- package/dist/js/auth/forgotPassword.js.map +1 -1
- package/dist/js/auth/index.d.ts.map +1 -1
- package/dist/js/auth/index.js +2 -0
- package/dist/js/auth/index.js.map +1 -1
- package/dist/js/auth/login.d.ts.map +1 -1
- package/dist/js/auth/login.js +9 -4
- package/dist/js/auth/login.js.map +1 -1
- package/dist/js/auth/refresh.d.ts.map +1 -1
- package/dist/js/auth/refresh.js +4 -11
- package/dist/js/auth/refresh.js.map +1 -1
- package/dist/js/auth/resendOTP.d.ts.map +1 -1
- package/dist/js/auth/resendOTP.js +20 -11
- package/dist/js/auth/resendOTP.js.map +1 -1
- package/dist/js/auth/resetPassword.d.ts.map +1 -1
- package/dist/js/auth/resetPassword.js +21 -13
- package/dist/js/auth/resetPassword.js.map +1 -1
- package/dist/js/auth/signup.d.ts.map +1 -1
- package/dist/js/auth/signup.js +14 -7
- package/dist/js/auth/signup.js.map +1 -1
- package/dist/js/auth/utils/UAParser.d.ts +1 -0
- package/dist/js/auth/utils/UAParser.d.ts.map +1 -1
- package/dist/js/auth/utils/UAParser.js +1 -0
- package/dist/js/auth/utils/UAParser.js.map +1 -1
- package/dist/js/auth/utils/authenticateUser.d.ts.map +1 -1
- package/dist/js/auth/utils/authenticateUser.js +11 -6
- package/dist/js/auth/utils/authenticateUser.js.map +1 -1
- package/dist/js/auth/utils/createOTPModel.d.ts.map +1 -1
- package/dist/js/auth/utils/createOTPModel.js +8 -2
- package/dist/js/auth/utils/createOTPModel.js.map +1 -1
- package/dist/js/auth/utils/createOTPUser.d.ts.map +1 -1
- package/dist/js/auth/utils/createOTPUser.js +19 -10
- package/dist/js/auth/utils/createOTPUser.js.map +1 -1
- package/dist/js/auth/utils/createUser.d.ts.map +1 -1
- package/dist/js/auth/utils/createUser.js +9 -4
- package/dist/js/auth/utils/createUser.js.map +1 -1
- package/dist/js/auth/utils/getOTPUser.d.ts.map +1 -1
- package/dist/js/auth/utils/getOTPUser.js +10 -2
- package/dist/js/auth/utils/getOTPUser.js.map +1 -1
- package/dist/js/auth/utils/getUser.d.ts.map +1 -1
- package/dist/js/auth/utils/getUser.js +12 -3
- package/dist/js/auth/utils/getUser.js.map +1 -1
- package/dist/js/auth/utils/handleGetRefreshToken.d.ts +9 -0
- package/dist/js/auth/utils/handleGetRefreshToken.d.ts.map +1 -0
- package/dist/js/auth/utils/handleGetRefreshToken.js +42 -0
- package/dist/js/auth/utils/handleGetRefreshToken.js.map +1 -0
- package/dist/js/auth/utils/handleIsVerified.d.ts.map +1 -1
- package/dist/js/auth/utils/handleIsVerified.js.map +1 -1
- package/dist/js/auth/utils/otpVerifiedResponse.d.ts.map +1 -1
- package/dist/js/auth/utils/otpVerifiedResponse.js +9 -5
- package/dist/js/auth/utils/otpVerifiedResponse.js.map +1 -1
- package/dist/js/auth/utils/verifyCredentials.d.ts.map +1 -1
- package/dist/js/auth/utils/verifyCredentials.js +9 -4
- package/dist/js/auth/utils/verifyCredentials.js.map +1 -1
- package/dist/js/auth/verifyOTP.d.ts.map +1 -1
- package/dist/js/auth/verifyOTP.js +20 -12
- package/dist/js/auth/verifyOTP.js.map +1 -1
- package/dist/js/config/envs.js +3 -3
- package/dist/js/config/envs.js.map +1 -1
- package/dist/js/lib/model.factory.d.ts.map +1 -1
- package/dist/js/lib/model.factory.js +4 -1
- package/dist/js/lib/model.factory.js.map +1 -1
- package/dist/js/types/Constructor.d.ts +2 -0
- package/dist/js/types/Constructor.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -12,31 +12,36 @@ import saveRefreshToken from "../../utils/saveRefreshToken.js";
|
|
|
12
12
|
import tokenInfo from "./UAParser.js";
|
|
13
13
|
import { hash } from "../../utils/libsodium.js";
|
|
14
14
|
const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj, }) => {
|
|
15
|
+
const { authConfigObj } = getEnvs();
|
|
16
|
+
const { fieldsObj } = authConfigObj;
|
|
17
|
+
const emailKey = fieldsObj?.email;
|
|
18
|
+
const passwordKey = fieldsObj?.password;
|
|
19
|
+
const otpKey = fieldsObj?.otp;
|
|
20
|
+
const purposeKey = fieldsObj?.purpose;
|
|
15
21
|
const OTPModel = getOTPModel(routeObj);
|
|
16
22
|
const { deviceType, familyId, jti, deviceName, ipAddress, os } = tokenInfo(req);
|
|
17
|
-
const { authConfigObj } = getEnvs();
|
|
18
23
|
let isVerified = false;
|
|
19
24
|
let isOTPUser = null;
|
|
20
25
|
if ("isVerified" in body)
|
|
21
26
|
({ isVerified, isOTPUser } = await handleIsVerified({
|
|
22
|
-
email: body
|
|
27
|
+
email: body[emailKey],
|
|
23
28
|
purpose: "login",
|
|
24
29
|
routeObj,
|
|
25
30
|
}));
|
|
26
31
|
const user = await getUser({
|
|
27
32
|
modelName,
|
|
28
33
|
routeName,
|
|
29
|
-
email: body
|
|
34
|
+
email: body[emailKey],
|
|
30
35
|
needPassword: true,
|
|
31
36
|
routeObj,
|
|
32
37
|
});
|
|
33
38
|
if (!isOTPUser) {
|
|
34
|
-
const isValid = await verifyHash(body
|
|
39
|
+
const isValid = await verifyHash(body[passwordKey], user.password, routeObj);
|
|
35
40
|
if (!isValid)
|
|
36
41
|
throw new AppError({
|
|
37
42
|
message: "Invalid password.",
|
|
38
43
|
statusCode: 409,
|
|
39
|
-
hint:
|
|
44
|
+
hint: `Verify your ${passwordKey} and try again.`,
|
|
40
45
|
details: getErrorDetail(routeObj),
|
|
41
46
|
});
|
|
42
47
|
}
|
|
@@ -76,7 +81,7 @@ const authenticateUser = async ({ body, modelName, res, req, routeName, routeObj
|
|
|
76
81
|
data: sanitizeOne(user.toObject(), routeObj),
|
|
77
82
|
accessToken: authConfigObj?.returnAccessToken ? accessToken : undefined,
|
|
78
83
|
refreshToken: authConfigObj?.returnRefreshToken ? refreshToken : undefined,
|
|
79
|
-
purpose: body
|
|
84
|
+
purpose: body[purposeKey],
|
|
80
85
|
});
|
|
81
86
|
};
|
|
82
87
|
export default authenticateUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticateUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/authenticateUser.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAC/D,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,IAAI,EACJ,SAAS,EACT,GAAG,EACH,GAAG,EACH,SAAS,EACT,QAAQ,GAQT,EAAE,EAAE;IAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"authenticateUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/authenticateUser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPModel.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"createOTPModel.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAIrE,QAAA,MAAM,cAAc,GAAI,WAAW,MAAM,EAAE,mBAAmB,SAAS,QAwDtE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import createModel from "../../lib/model.factory.js";
|
|
2
2
|
import otpPurposes from "../../utils/otpPurposes.js";
|
|
3
|
+
import { getEnvs } from "../../config/envs.js";
|
|
3
4
|
const createOTPModel = (routeName, mongooseSchemaObj) => {
|
|
5
|
+
const { authConfigObj } = getEnvs();
|
|
6
|
+
const { fieldsObj } = authConfigObj;
|
|
7
|
+
const emailKey = fieldsObj?.email;
|
|
8
|
+
const otpKey = fieldsObj?.otp;
|
|
9
|
+
const purposeKey = fieldsObj?.purpose;
|
|
4
10
|
const makeOptional = (field) => {
|
|
5
11
|
if (Array.isArray(field)) {
|
|
6
12
|
return field.map(makeOptional);
|
|
@@ -21,12 +27,12 @@ const createOTPModel = (routeName, mongooseSchemaObj) => {
|
|
|
21
27
|
return createModel("otpUser", {
|
|
22
28
|
...optionalSchema,
|
|
23
29
|
otpCount: { type: Number, default: 0 },
|
|
24
|
-
|
|
30
|
+
[otpKey]: { type: String },
|
|
25
31
|
otpExpiry: { type: Date },
|
|
26
32
|
isVerified: { type: Boolean, default: false },
|
|
27
33
|
maxOTPTries: { type: Number, default: 10 },
|
|
28
34
|
role: { type: String, enum: ["user", "admin"], default: "user" },
|
|
29
|
-
|
|
35
|
+
[purposeKey]: {
|
|
30
36
|
type: String,
|
|
31
37
|
enum: otpPurposes,
|
|
32
38
|
required: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPModel.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,4BAA4B,CAAC;AAErD,OAAO,WAAW,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"createOTPModel.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPModel.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,4BAA4B,CAAC;AAErD,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAE,iBAA4B,EAAE,EAAE;IAEzE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC;IAC9B,MAAM,UAAU,GAAG,SAAS,EAAE,OAAO,CAAC;IAGtC,MAAM,YAAY,GAAG,CAAC,KAAU,EAAO,EAAE;QAEvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,CAAC;QAGD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAC1D,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;QAGD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEvD,OAAO,WAAW,CAChB,SAAS,EACT;QACE,GAAG,cAAc;QAEjB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QACtC,CAAC,MAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QACzB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC7C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;QAChE,CAAC,UAAW,CAAC,EAAE;YACb,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;SACf;KACF,EACD,SAAS,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"createOTPUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAIvD,QAAA,MAAM,aAAa,GAAU,yDAO1B;IACD,IAAI,EAAE,GAAG,CAAC;IACV,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,kBA8EA,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -5,22 +5,31 @@ import { hash } from "../../utils/libsodium.js";
|
|
|
5
5
|
import getOTPModel from "./getOTPModel.js";
|
|
6
6
|
import verifyCredentials from "./verifyCredentials.js";
|
|
7
7
|
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
8
|
+
import { getEnvs } from "../../config/envs.js";
|
|
8
9
|
const createOTPUser = async ({ body, res, purpose, routeName, modelName, routeObj, }) => {
|
|
10
|
+
const { authConfigObj } = getEnvs();
|
|
11
|
+
const { fieldsObj } = authConfigObj;
|
|
12
|
+
const emailKey = fieldsObj?.email;
|
|
13
|
+
const passwordKey = fieldsObj?.password;
|
|
14
|
+
const otpKey = fieldsObj?.otp;
|
|
15
|
+
const purposeKey = fieldsObj?.purpose;
|
|
9
16
|
const OTPModel = getOTPModel(routeObj);
|
|
10
17
|
if (!purpose)
|
|
11
18
|
throw new AppError({
|
|
12
|
-
message:
|
|
19
|
+
message: `${purposeKey} is required.`,
|
|
13
20
|
statusCode: 400,
|
|
14
|
-
hint:
|
|
21
|
+
hint: `Provide ${purposeKey} before creating an OTP request.`,
|
|
15
22
|
details: {
|
|
16
23
|
handler: routeObj.handler,
|
|
17
24
|
method: routeObj.method,
|
|
18
25
|
path: routeObj.path,
|
|
19
26
|
},
|
|
20
27
|
});
|
|
21
|
-
const existingOTPs = await OTPModel.find({
|
|
28
|
+
const existingOTPs = await OTPModel.find({
|
|
29
|
+
[emailKey]: body[emailKey],
|
|
30
|
+
});
|
|
22
31
|
for (const el of existingOTPs) {
|
|
23
|
-
if (el.toObject()
|
|
32
|
+
if (el.toObject()[purposeKey] === purpose)
|
|
24
33
|
throw new AppError({
|
|
25
34
|
message: "OTP has already been requested.",
|
|
26
35
|
statusCode: 409,
|
|
@@ -35,22 +44,22 @@ const createOTPUser = async ({ body, res, purpose, routeName, modelName, routeOb
|
|
|
35
44
|
routeName,
|
|
36
45
|
routeObj,
|
|
37
46
|
});
|
|
38
|
-
const { OTP, otpExpiry } = await sendOTP(body
|
|
47
|
+
const { OTP, otpExpiry } = await sendOTP(body[emailKey], routeObj);
|
|
39
48
|
const hashedOTP = await hash(OTP, routeObj);
|
|
40
|
-
if (body?.
|
|
41
|
-
body
|
|
49
|
+
if (body?.[passwordKey])
|
|
50
|
+
body[passwordKey] = await hash(body[passwordKey], routeObj);
|
|
42
51
|
await OTPModel.create({
|
|
43
52
|
...body,
|
|
44
|
-
|
|
53
|
+
[otpKey]: hashedOTP,
|
|
45
54
|
otpExpiry,
|
|
46
|
-
purpose,
|
|
55
|
+
[purposeKey]: purpose,
|
|
47
56
|
});
|
|
48
57
|
appResponse({
|
|
49
58
|
res,
|
|
50
59
|
message: "OTP sent successfully!",
|
|
51
60
|
statusCode: 200,
|
|
52
61
|
data: {
|
|
53
|
-
nextStep: `go to /verify-otp with
|
|
62
|
+
nextStep: `go to /verify-otp with ${purposeKey}: ${purpose}`,
|
|
54
63
|
},
|
|
55
64
|
});
|
|
56
65
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOTPUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPUser.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,OAAO,cAAc,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"createOTPUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createOTPUser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AASjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,UAAU,GAAU,qDAOvB;IACD,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd,
|
|
1
|
+
{"version":3,"file":"createUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AASjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAKvD,QAAA,MAAM,UAAU,GAAU,qDAOvB;IACD,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd,kBAuFA,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -10,15 +10,20 @@ import { getEnvs } from "../../config/envs.js";
|
|
|
10
10
|
import tokenInfo from "./UAParser.js";
|
|
11
11
|
import saveRefreshToken from "../../utils/saveRefreshToken.js";
|
|
12
12
|
const createUser = async ({ body, modelName, res, routeName, routeObj, req, }) => {
|
|
13
|
+
const { authConfigObj } = getEnvs();
|
|
14
|
+
const { fieldsObj } = authConfigObj;
|
|
15
|
+
const emailKey = fieldsObj?.email;
|
|
16
|
+
const passwordKey = fieldsObj?.password;
|
|
17
|
+
const otpKey = fieldsObj?.otp;
|
|
18
|
+
const purposeKey = fieldsObj?.purpose;
|
|
13
19
|
const Model = getModel({ modelName, routeName, routeObj });
|
|
14
20
|
const OTPModel = getOTPModel(routeObj);
|
|
15
21
|
const { deviceType, familyId, jti, deviceName, ipAddress, os } = tokenInfo(req);
|
|
16
|
-
const { authConfigObj } = getEnvs();
|
|
17
22
|
let isVerified = false;
|
|
18
23
|
let isOTPUser = null;
|
|
19
24
|
if ("isVerified" in body)
|
|
20
25
|
({ isVerified, isOTPUser } = await handleIsVerified({
|
|
21
|
-
email: body
|
|
26
|
+
email: body[emailKey],
|
|
22
27
|
purpose: "signup",
|
|
23
28
|
routeObj,
|
|
24
29
|
}));
|
|
@@ -28,7 +33,7 @@ const createUser = async ({ body, modelName, res, routeName, routeObj, req, }) =
|
|
|
28
33
|
delete body._id;
|
|
29
34
|
}
|
|
30
35
|
else {
|
|
31
|
-
body
|
|
36
|
+
body[passwordKey] = await hash(body[passwordKey], routeObj);
|
|
32
37
|
body.role = "user";
|
|
33
38
|
}
|
|
34
39
|
const newUser = await Model.create(body);
|
|
@@ -66,7 +71,7 @@ const createUser = async ({ body, modelName, res, routeName, routeObj, req, }) =
|
|
|
66
71
|
data: sanitizeOne(newUser.toObject(), routeObj),
|
|
67
72
|
accessToken: authConfigObj?.returnAccessToken ? accessToken : undefined,
|
|
68
73
|
refreshToken: authConfigObj?.returnRefreshToken ? refreshToken : undefined,
|
|
69
|
-
purpose: body
|
|
74
|
+
purpose: body[purposeKey],
|
|
70
75
|
});
|
|
71
76
|
};
|
|
72
77
|
export default createUser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,gBAAgB,MAAM,iCAAiC,CAAC;AAE/D,MAAM,UAAU,GAAG,KAAK,EAAE,EACxB,IAAI,EACJ,SAAS,EACT,GAAG,EACH,SAAS,EACT,QAAQ,EACR,GAAG,GAQJ,EAAE,EAAE;IAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"createUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/createUser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOTPUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/getOTPUser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"getOTPUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/getOTPUser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,QAAA,MAAM,UAAU,GAAU,+BAIvB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;CACjB,iBA8BA,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import getOTPModel from "./getOTPModel.js";
|
|
2
2
|
import AppError from "../../utils/AppError.js";
|
|
3
|
+
import { getEnvs } from "../../config/envs.js";
|
|
3
4
|
const getOTPUser = async ({ email, purpose, routeObj, }) => {
|
|
5
|
+
const { authConfigObj } = getEnvs();
|
|
6
|
+
const { fieldsObj } = authConfigObj;
|
|
7
|
+
const emailKey = fieldsObj?.email;
|
|
8
|
+
const purposeKey = fieldsObj?.purpose;
|
|
4
9
|
const OTPModel = getOTPModel(routeObj);
|
|
5
|
-
const OTPUser = await OTPModel.findOne({
|
|
10
|
+
const OTPUser = await OTPModel.findOne({
|
|
11
|
+
[emailKey]: email,
|
|
12
|
+
[purposeKey]: purpose,
|
|
13
|
+
});
|
|
6
14
|
if (!OTPUser)
|
|
7
15
|
throw new AppError({
|
|
8
16
|
message: "OTP request not found.",
|
|
9
17
|
statusCode: 404,
|
|
10
|
-
hint:
|
|
18
|
+
hint: `Request a new OTP or verify the provided ${emailKey} and ${purposeKey}.`,
|
|
11
19
|
details: {
|
|
12
20
|
handler: routeObj.handler,
|
|
13
21
|
method: routeObj.method,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOTPUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/getOTPUser.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"getOTPUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/getOTPUser.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,UAAU,GAAG,KAAK,EAAE,EACxB,KAAK,EACL,OAAO,EACP,QAAQ,GAKT,EAAE,EAAE;IAEH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;IAClC,MAAM,UAAU,GAAG,SAAS,EAAE,OAAO,CAAC;IAGtC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAGvC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC;QACrC,CAAC,QAAS,CAAC,EAAE,KAAK;QAClB,CAAC,UAAW,CAAC,EAAE,OAAO;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,wBAAwB;YACjC,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,4CAA4C,QAAQ,QAAQ,UAAU,GAAG;YAC/E,OAAO,EAAE;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB;SACF,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/getUser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"getUser.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/getUser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,QAAA,MAAM,OAAO,GAAU,0DAMpB;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;CACjB,iBAsCA,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import getModel from "../../utils/getModel.js";
|
|
2
2
|
import AppError from "../../utils/AppError.js";
|
|
3
|
+
import { getEnvs } from "../../config/envs.js";
|
|
3
4
|
const getUser = async ({ modelName, routeName, email, needPassword, routeObj, }) => {
|
|
5
|
+
const { authConfigObj } = getEnvs();
|
|
6
|
+
const { fieldsObj } = authConfigObj;
|
|
7
|
+
const emailKey = fieldsObj?.email;
|
|
8
|
+
const passwordKey = fieldsObj?.password;
|
|
4
9
|
const Model = getModel({ modelName, routeName, routeObj });
|
|
5
10
|
let user = null;
|
|
6
11
|
if (needPassword) {
|
|
7
|
-
user = await Model.findOne({
|
|
12
|
+
user = await Model.findOne({
|
|
13
|
+
[emailKey]: email,
|
|
14
|
+
}).select(`+${passwordKey}`);
|
|
8
15
|
}
|
|
9
16
|
else {
|
|
10
|
-
user = await Model.findOne({
|
|
17
|
+
user = await Model.findOne({
|
|
18
|
+
[emailKey]: email,
|
|
19
|
+
});
|
|
11
20
|
}
|
|
12
21
|
if (!user)
|
|
13
22
|
throw new AppError({
|
|
14
23
|
message: "User not found.",
|
|
15
24
|
statusCode: 404,
|
|
16
|
-
hint:
|
|
25
|
+
hint: `Verify the provided ${emailKey} or create a new account.`,
|
|
17
26
|
details: {
|
|
18
27
|
handler: routeObj.handler,
|
|
19
28
|
method: routeObj.method,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/getUser.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"getUser.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/getUser.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,OAAO,GAAG,KAAK,EAAE,EACrB,SAAS,EACT,SAAS,EACT,KAAK,EACL,YAAY,EACZ,QAAQ,GAOT,EAAE,EAAE;IAEH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;IAClC,MAAM,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC;IAGxC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAG3D,IAAI,IAAI,GAAQ,IAAI,CAAC;IAErB,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACzB,CAAC,QAAS,CAAC,EAAE,KAAK;SACnB,CAAC,CAAC,MAAM,CAAC,IAAI,WAAY,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACzB,CAAC,QAAS,CAAC,EAAE,KAAK;SACnB,CAAC,CAAC;IACL,CAAC;IAGD,IAAI,CAAC,IAAI;QACP,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,iBAAiB;YAC1B,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,uBAAuB,QAAQ,2BAA2B;YAChE,OAAO,EAAE;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB;SACF,CAAC,CAAC;IAEL,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Route } from "../../types/Collection.js";
|
|
2
|
+
import type { Request } from "express";
|
|
3
|
+
declare const getRefreshToken: ({ req, reqMethod, routeObj, }: {
|
|
4
|
+
req: Request;
|
|
5
|
+
reqMethod: string;
|
|
6
|
+
routeObj: Route;
|
|
7
|
+
}) => any;
|
|
8
|
+
export default getRefreshToken;
|
|
9
|
+
//# sourceMappingURL=handleGetRefreshToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleGetRefreshToken.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleGetRefreshToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,QAAA,MAAM,eAAe,GAAI,+BAItB;IACD,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,QA6CA,CAAC;AACF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import AppError from "../../utils/AppError.js";
|
|
2
|
+
import getErrorDetail from "../../utils/getErrorDetail.js";
|
|
3
|
+
import { getEnvs } from "../../config/envs.js";
|
|
4
|
+
const getRefreshToken = ({ req, reqMethod, routeObj, }) => {
|
|
5
|
+
const { authConfigObj } = getEnvs();
|
|
6
|
+
const tokenName = authConfigObj.refreshTokenName;
|
|
7
|
+
if (reqMethod !== "GET" && reqMethod !== "POST")
|
|
8
|
+
throw new AppError({
|
|
9
|
+
details: getErrorDetail(routeObj),
|
|
10
|
+
hint: "This is route only works with GET and POST methods",
|
|
11
|
+
message: "Invalid method",
|
|
12
|
+
statusCode: 409,
|
|
13
|
+
code: "INVALID_REFRESH_TOKEN_METHOD",
|
|
14
|
+
});
|
|
15
|
+
let token = null;
|
|
16
|
+
if (reqMethod === "GET") {
|
|
17
|
+
token = req.cookies[tokenName];
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const bodyToken = req.body[tokenName];
|
|
21
|
+
if (!bodyToken || typeof bodyToken !== "string")
|
|
22
|
+
throw new AppError({
|
|
23
|
+
message: "Refresh token is missing",
|
|
24
|
+
code: "REFRESH_TOKEN_MISSING",
|
|
25
|
+
details: getErrorDetail(routeObj),
|
|
26
|
+
hint: `With POST method, '${tokenName}' is required in body as string.`,
|
|
27
|
+
statusCode: 401,
|
|
28
|
+
});
|
|
29
|
+
token = bodyToken;
|
|
30
|
+
}
|
|
31
|
+
if (!token)
|
|
32
|
+
throw new AppError({
|
|
33
|
+
message: "Refresh token is missing",
|
|
34
|
+
code: "REFRESH_TOKEN_MISSING",
|
|
35
|
+
details: getErrorDetail(routeObj),
|
|
36
|
+
hint: "Log in again to create a new authentication session.",
|
|
37
|
+
statusCode: 401,
|
|
38
|
+
});
|
|
39
|
+
return token;
|
|
40
|
+
};
|
|
41
|
+
export default getRefreshToken;
|
|
42
|
+
//# sourceMappingURL=handleGetRefreshToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleGetRefreshToken.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleGetRefreshToken.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,eAAe,GAAG,CAAC,EACvB,GAAG,EACH,SAAS,EACT,QAAQ,GAKT,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,SAAS,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAGjD,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM;QAC7C,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,oDAAoD;YAC1D,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,8BAA8B;SACrC,CAAC,CAAC;IAEL,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,SAAU,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;YAC7C,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,0BAA0B;gBACnC,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;gBACjC,IAAI,EAAE,sBAAsB,SAAS,kCAAkC;gBACvE,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QAEL,KAAK,GAAG,SAAS,CAAC;IACpB,CAAC;IAGD,IAAI,CAAC,KAAK;QACR,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;YACjC,IAAI,EAAE,sDAAsD;YAC5D,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IAEL,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AACF,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleIsVerified.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleIsVerified.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"handleIsVerified.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleIsVerified.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,QAAA,MAAM,gBAAgB,GAAU,+BAI7B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;CACjB;;;EAuBA,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleIsVerified.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleIsVerified.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAEzC,OAAO,cAAc,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"handleIsVerified.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/handleIsVerified.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAEzC,OAAO,cAAc,MAAM,+BAA+B,CAAC;AAE3D,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAC9B,KAAK,EACL,OAAO,EACP,QAAQ,GAKT,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC;QACjC,KAAK;QACL,OAAO;QACP,QAAQ;KACT,CAAC,CAAC;IAEH,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACzB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,QAAQ,CAAC;gBACjB,OAAO,EAAE,gCAAgC;gBACzC,UAAU,EAAE,GAAG;gBACf,IAAI,EAAE,8CAA8C;gBACpD,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otpVerifiedResponse.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/otpVerifiedResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"otpVerifiedResponse.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/otpVerifiedResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,QAAA,MAAM,mBAAmB,GAAI,0BAI1B;IACD,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC;CACjB,SAwBA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import appResponse from "../../utils/response.js";
|
|
2
2
|
import AppError from "../../utils/AppError.js";
|
|
3
|
+
import { getEnvs } from "../../config/envs.js";
|
|
3
4
|
const otpVerifiedResponse = ({ res, body, routeObj, }) => {
|
|
4
|
-
|
|
5
|
+
const { authConfigObj } = getEnvs();
|
|
6
|
+
const { fieldsObj } = authConfigObj;
|
|
7
|
+
const purposeKey = fieldsObj?.purpose;
|
|
8
|
+
if (!body?.[purposeKey])
|
|
5
9
|
throw new AppError({
|
|
6
|
-
message:
|
|
10
|
+
message: `${purposeKey} is required.`,
|
|
7
11
|
statusCode: 400,
|
|
8
|
-
hint:
|
|
12
|
+
hint: `Provide ${purposeKey} before sending the OTP verification response.`,
|
|
9
13
|
details: {
|
|
10
14
|
handler: routeObj.handler,
|
|
11
15
|
method: routeObj.method,
|
|
@@ -14,8 +18,8 @@ const otpVerifiedResponse = ({ res, body, routeObj, }) => {
|
|
|
14
18
|
});
|
|
15
19
|
appResponse({
|
|
16
20
|
res,
|
|
17
|
-
message: `${body
|
|
18
|
-
purpose: body
|
|
21
|
+
message: `${body[purposeKey]}: OTP verified successfully!`,
|
|
22
|
+
purpose: body[purposeKey],
|
|
19
23
|
});
|
|
20
24
|
};
|
|
21
25
|
export default otpVerifiedResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otpVerifiedResponse.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/otpVerifiedResponse.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"otpVerifiedResponse.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/otpVerifiedResponse.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,mBAAmB,GAAG,CAAC,EAC3B,GAAG,EACH,IAAI,EACJ,QAAQ,GAKT,EAAE,EAAE;IAEH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,UAAU,GAAG,SAAS,EAAE,OAAO,CAAC;IAEtC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAW,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,GAAG,UAAU,eAAe;YACrC,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,WAAW,UAAU,gDAAgD;YAC3E,OAAO,EAAE;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB;SACF,CAAC,CAAC;IAEL,WAAW,CAAC;QACV,GAAG;QACH,OAAO,EAAE,GAAG,IAAI,CAAC,UAAW,CAAC,8BAA8B;QAC3D,OAAO,EAAE,IAAI,CAAC,UAAW,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyCredentials.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/verifyCredentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyCredentials.d.ts","sourceRoot":"","sources":["../../../../src/js/auth/utils/verifyCredentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,QAAA,MAAM,iBAAiB,GAAU,2CAK9B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,kBA8CA,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import AppError from "../../utils/AppError.js";
|
|
2
2
|
import { verifyHash } from "../../utils/libsodium.js";
|
|
3
3
|
import getUser from "./getUser.js";
|
|
4
|
+
import { getEnvs } from "../../config/envs.js";
|
|
4
5
|
const verifyCredentials = async ({ modelName, body, routeName, routeObj, }) => {
|
|
6
|
+
const { authConfigObj } = getEnvs();
|
|
7
|
+
const { fieldsObj } = authConfigObj;
|
|
8
|
+
const emailKey = fieldsObj?.email;
|
|
9
|
+
const passwordKey = fieldsObj?.password;
|
|
5
10
|
if (!modelName || !body)
|
|
6
11
|
throw new AppError({
|
|
7
12
|
message: "modelName and body are required.",
|
|
@@ -16,16 +21,16 @@ const verifyCredentials = async ({ modelName, body, routeName, routeObj, }) => {
|
|
|
16
21
|
const user = await getUser({
|
|
17
22
|
modelName,
|
|
18
23
|
routeName,
|
|
19
|
-
email: body
|
|
24
|
+
email: body[emailKey],
|
|
20
25
|
needPassword: true,
|
|
21
|
-
routeObj
|
|
26
|
+
routeObj,
|
|
22
27
|
});
|
|
23
|
-
const isValid = await verifyHash(body
|
|
28
|
+
const isValid = await verifyHash(body[passwordKey], user[passwordKey], routeObj);
|
|
24
29
|
if (!isValid)
|
|
25
30
|
throw new AppError({
|
|
26
31
|
message: "Invalid password.",
|
|
27
32
|
statusCode: 401,
|
|
28
|
-
hint:
|
|
33
|
+
hint: `Verify your ${passwordKey} and try again.`,
|
|
29
34
|
details: {
|
|
30
35
|
handler: routeObj.handler,
|
|
31
36
|
method: routeObj.method,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyCredentials.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/verifyCredentials.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyCredentials.js","sourceRoot":"","sources":["../../../../src/js/auth/utils/verifyCredentials.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAC/B,SAAS,EACT,IAAI,EACJ,SAAS,EACT,QAAQ,GAMT,EAAE,EAAE;IAEH,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;IAEpC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC;IAClC,MAAM,WAAW,GAAG,SAAS,EAAE,QAAQ,CAAC;IAExC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI;QACrB,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,kCAAkC;YAC3C,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,0DAA0D;YAChE,OAAO,EAAE;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB;SACF,CAAC,CAAC;IAGL,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;QACzB,SAAS;QACT,SAAS;QACT,KAAK,EAAE,IAAI,CAAC,QAAS,CAAW;QAChC,YAAY,EAAE,IAAI;QAClB,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,UAAU,CAC9B,IAAI,CAAC,WAAY,CAAC,EAClB,IAAI,CAAC,WAAY,CAAC,EAClB,QAAQ,CACT,CAAC;IAEF,IAAI,CAAC,OAAO;QACV,MAAM,IAAI,QAAQ,CAAC;YACjB,OAAO,EAAE,mBAAmB;YAC5B,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,eAAe,WAAW,iBAAiB;YACjD,OAAO,EAAE;gBACP,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB;SACF,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyOTP.d.ts","sourceRoot":"","sources":["../../../src/js/auth/verifyOTP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAapE,QAAA,MAAM,SAAS,GAAI,qDAKhB;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"verifyOTP.d.ts","sourceRoot":"","sources":["../../../src/js/auth/verifyOTP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAapE,QAAA,MAAM,SAAS,GAAI,qDAKhB;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;CACjB,MACe,KAAK,OAAO,EAAE,KAAK,QAAQ,kBA4H1C,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -8,34 +8,42 @@ import otpVerifiedResponse from "./utils/otpVerifiedResponse.js";
|
|
|
8
8
|
import appResponse from "../utils/response.js";
|
|
9
9
|
import getValidationKey from "../utils/validationKeyError.js";
|
|
10
10
|
import getErrorDetail from "../utils/getErrorDetail.js";
|
|
11
|
+
import { getEnvs } from "../config/envs.js";
|
|
11
12
|
const verifyOTP = ({ modelName, validationsObj, routeName, routeObj, }) => {
|
|
12
13
|
return async (req, res) => {
|
|
14
|
+
const { authConfigObj } = getEnvs();
|
|
15
|
+
const { fieldsObj } = authConfigObj;
|
|
16
|
+
const emailKey = fieldsObj?.email;
|
|
17
|
+
const otpKey = fieldsObj?.otp;
|
|
18
|
+
const purposeKey = fieldsObj?.purpose;
|
|
13
19
|
const validationObj = getValidationKey(routeObj, validationsObj);
|
|
14
20
|
const body = validate(validationObj, req.body, routeObj);
|
|
15
|
-
if (!req.body
|
|
21
|
+
if (!req.body?.[emailKey] ||
|
|
22
|
+
!req.body?.[otpKey] ||
|
|
23
|
+
!req.body?.[purposeKey])
|
|
16
24
|
throw new AppError({
|
|
17
|
-
message:
|
|
25
|
+
message: `${emailKey}, ${otpKey} and ${purposeKey} are required.`,
|
|
18
26
|
statusCode: 400,
|
|
19
|
-
hint: `
|
|
27
|
+
hint: `Check if ${emailKey}, ${otpKey} or ${purposeKey} is missing in collection -> validationsObj -> ${routeObj.validationKey}.`,
|
|
20
28
|
details: getErrorDetail(routeObj),
|
|
21
29
|
});
|
|
22
30
|
const OTPModel = getOTPModel(routeObj);
|
|
23
|
-
const OTPData = await OTPModel
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
const OTPData = await OTPModel.findOne({
|
|
32
|
+
[emailKey]: body[emailKey],
|
|
33
|
+
[purposeKey]: body[purposeKey],
|
|
26
34
|
}).select("+password");
|
|
27
35
|
if (!OTPData)
|
|
28
36
|
throw new AppError({
|
|
29
37
|
message: "OTP request not found.",
|
|
30
38
|
statusCode: 404,
|
|
31
|
-
hint:
|
|
39
|
+
hint: `Request a new OTP or verify the provided ${emailKey} and ${purposeKey}.`,
|
|
32
40
|
details: getErrorDetail(routeObj),
|
|
33
41
|
});
|
|
34
42
|
if (OTPData.isVerified) {
|
|
35
43
|
appResponse({
|
|
36
44
|
res,
|
|
37
|
-
message: `${body
|
|
38
|
-
data: body
|
|
45
|
+
message: `${body[purposeKey]}: OTP has already been verified.`,
|
|
46
|
+
data: body[purposeKey] === "password_reset"
|
|
39
47
|
? {
|
|
40
48
|
nextStep: "go to /reset-password",
|
|
41
49
|
}
|
|
@@ -57,7 +65,7 @@ const verifyOTP = ({ modelName, validationsObj, routeName, routeObj, }) => {
|
|
|
57
65
|
hint: "Request a new OTP and try again.",
|
|
58
66
|
details: getErrorDetail(routeObj),
|
|
59
67
|
});
|
|
60
|
-
const isValid = await verifyHash(body
|
|
68
|
+
const isValid = await verifyHash(body[otpKey], OTPData[otpKey], routeObj);
|
|
61
69
|
if (!isValid) {
|
|
62
70
|
await OTPModel.updateOne({ _id: OTPData._id }, { $inc: { otpCount: 1 } });
|
|
63
71
|
throw new AppError({
|
|
@@ -73,13 +81,13 @@ const verifyOTP = ({ modelName, validationsObj, routeName, routeObj, }) => {
|
|
|
73
81
|
login: authenticateUser,
|
|
74
82
|
password_reset: otpVerifiedResponse,
|
|
75
83
|
};
|
|
76
|
-
purposeMap[OTPData
|
|
84
|
+
purposeMap[OTPData[purposeKey]]({
|
|
77
85
|
body: OTPData,
|
|
78
86
|
res,
|
|
79
87
|
routeName,
|
|
80
88
|
modelName,
|
|
81
89
|
routeObj,
|
|
82
|
-
req
|
|
90
|
+
req,
|
|
83
91
|
});
|
|
84
92
|
};
|
|
85
93
|
};
|