@intlayer/backend 3.0.3 → 3.2.0
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/cjs/controllers/dictionary.controller.cjs +91 -18
- package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -1
- package/dist/cjs/controllers/organization.controller.cjs +140 -12
- package/dist/cjs/controllers/organization.controller.cjs.map +1 -1
- package/dist/cjs/controllers/project.controller.cjs +181 -31
- package/dist/cjs/controllers/project.controller.cjs.map +1 -1
- package/dist/cjs/controllers/projectAccessKey.controller.cjs +61 -10
- package/dist/cjs/controllers/projectAccessKey.controller.cjs.map +1 -1
- package/dist/cjs/controllers/sessionAuth.controller.cjs +291 -62
- package/dist/cjs/controllers/sessionAuth.controller.cjs.map +1 -1
- package/dist/cjs/controllers/stripe.controller.cjs +84 -0
- package/dist/cjs/controllers/stripe.controller.cjs.map +1 -0
- package/dist/cjs/controllers/user.controller.cjs +49 -20
- package/dist/cjs/controllers/user.controller.cjs.map +1 -1
- package/dist/cjs/emails/SubscriptionPaymentCancellation.cjs +182 -0
- package/dist/cjs/emails/SubscriptionPaymentCancellation.cjs.map +1 -0
- package/dist/cjs/emails/SubscriptionPaymentError.cjs +182 -0
- package/dist/cjs/emails/SubscriptionPaymentError.cjs.map +1 -0
- package/dist/cjs/emails/SubscriptionPaymentSuccess.cjs +188 -0
- package/dist/cjs/emails/SubscriptionPaymentSuccess.cjs.map +1 -0
- package/dist/cjs/export.cjs.map +1 -1
- package/dist/cjs/index.cjs +16 -5
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/middlewares/oAuth2.middleware.cjs +10 -0
- package/dist/cjs/middlewares/oAuth2.middleware.cjs.map +1 -1
- package/dist/cjs/middlewares/sessionAuth.middleware.cjs +50 -10
- package/dist/cjs/middlewares/sessionAuth.middleware.cjs.map +1 -1
- package/dist/cjs/routes/dictionary.routes.cjs +2 -62
- package/dist/cjs/routes/dictionary.routes.cjs.map +1 -1
- package/dist/cjs/routes/organization.routes.cjs +1 -25
- package/dist/cjs/routes/organization.routes.cjs.map +1 -1
- package/dist/cjs/routes/project.routes.cjs +10 -85
- package/dist/cjs/routes/project.routes.cjs.map +1 -1
- package/dist/cjs/routes/sessionAuth.routes.cjs +26 -25
- package/dist/cjs/routes/sessionAuth.routes.cjs.map +1 -1
- package/dist/cjs/routes/stripe.routes.cjs +42 -0
- package/dist/cjs/routes/stripe.routes.cjs.map +1 -0
- package/dist/cjs/routes/user.routes.cjs +6 -27
- package/dist/cjs/routes/user.routes.cjs.map +1 -1
- package/dist/cjs/schemas/organization.schema.cjs +5 -0
- package/dist/cjs/schemas/organization.schema.cjs.map +1 -1
- package/dist/cjs/{middlewares/admin.middleware.cjs → schemas/plans.schema.cjs} +32 -20
- package/dist/cjs/schemas/plans.schema.cjs.map +1 -0
- package/dist/cjs/schemas/project.schema.cjs +14 -1
- package/dist/cjs/schemas/project.schema.cjs.map +1 -1
- package/dist/cjs/schemas/user.schema.cjs +5 -1
- package/dist/cjs/schemas/user.schema.cjs.map +1 -1
- package/dist/cjs/services/dictionary.service.cjs.map +1 -1
- package/dist/cjs/services/email.service.cjs +113 -43
- package/dist/cjs/services/email.service.cjs.map +1 -1
- package/dist/cjs/services/oAuth2.service.cjs +16 -8
- package/dist/cjs/services/oAuth2.service.cjs.map +1 -1
- package/dist/cjs/services/organization.service.cjs +63 -8
- package/dist/cjs/services/organization.service.cjs.map +1 -1
- package/dist/cjs/services/project.service.cjs +9 -5
- package/dist/cjs/services/project.service.cjs.map +1 -1
- package/dist/cjs/services/projectAccessKey.service.cjs +42 -10
- package/dist/cjs/services/projectAccessKey.service.cjs.map +1 -1
- package/dist/cjs/services/sessionAuth.service.cjs +9 -11
- package/dist/cjs/services/sessionAuth.service.cjs.map +1 -1
- package/dist/cjs/services/subscription.service.cjs +201 -0
- package/dist/cjs/services/subscription.service.cjs.map +1 -0
- package/dist/cjs/services/user.service.cjs +1 -3
- package/dist/cjs/services/user.service.cjs.map +1 -1
- package/dist/cjs/types/dictionary.types.cjs.map +1 -1
- package/dist/cjs/types/organization.types.cjs.map +1 -1
- package/dist/cjs/types/plan.types.cjs +17 -0
- package/dist/cjs/types/plan.types.cjs.map +1 -0
- package/dist/cjs/types/project.types.cjs.map +1 -1
- package/dist/cjs/types/session.types.cjs.map +1 -1
- package/dist/cjs/types/user.types.cjs.map +1 -1
- package/dist/cjs/utils/errors/ErrorHandler.cjs +29 -9
- package/dist/cjs/utils/errors/ErrorHandler.cjs.map +1 -1
- package/dist/cjs/utils/errors/ErrorsClass.cjs +17 -3
- package/dist/cjs/utils/errors/ErrorsClass.cjs.map +1 -1
- package/dist/cjs/utils/errors/errorCodes.cjs +321 -9
- package/dist/cjs/utils/errors/errorCodes.cjs.map +1 -1
- package/dist/cjs/utils/mapper/organization.cjs.map +1 -1
- package/dist/cjs/utils/mapper/project.cjs +19 -3
- package/dist/cjs/utils/mapper/project.cjs.map +1 -1
- package/dist/cjs/utils/mapper/user.cjs.map +1 -1
- package/dist/cjs/utils/plan.cjs +75 -0
- package/dist/cjs/utils/plan.cjs.map +1 -0
- package/dist/cjs/utils/responseData.cjs +8 -0
- package/dist/cjs/utils/responseData.cjs.map +1 -1
- package/dist/cjs/webhooks/stripe.webhook.cjs +133 -0
- package/dist/cjs/webhooks/stripe.webhook.cjs.map +1 -0
- package/dist/esm/controllers/dictionary.controller.mjs +91 -18
- package/dist/esm/controllers/dictionary.controller.mjs.map +1 -1
- package/dist/esm/controllers/organization.controller.mjs +140 -12
- package/dist/esm/controllers/organization.controller.mjs.map +1 -1
- package/dist/esm/controllers/project.controller.mjs +181 -31
- package/dist/esm/controllers/project.controller.mjs.map +1 -1
- package/dist/esm/controllers/projectAccessKey.controller.mjs +61 -10
- package/dist/esm/controllers/projectAccessKey.controller.mjs.map +1 -1
- package/dist/esm/controllers/sessionAuth.controller.mjs +287 -61
- package/dist/esm/controllers/sessionAuth.controller.mjs.map +1 -1
- package/dist/esm/controllers/stripe.controller.mjs +60 -0
- package/dist/esm/controllers/stripe.controller.mjs.map +1 -0
- package/dist/esm/controllers/user.controller.mjs +49 -20
- package/dist/esm/controllers/user.controller.mjs.map +1 -1
- package/dist/esm/emails/SubscriptionPaymentCancellation.mjs +168 -0
- package/dist/esm/emails/SubscriptionPaymentCancellation.mjs.map +1 -0
- package/dist/esm/emails/SubscriptionPaymentError.mjs +168 -0
- package/dist/esm/emails/SubscriptionPaymentError.mjs.map +1 -0
- package/dist/esm/emails/SubscriptionPaymentSuccess.mjs +174 -0
- package/dist/esm/emails/SubscriptionPaymentSuccess.mjs.map +1 -0
- package/dist/esm/export.mjs.map +1 -1
- package/dist/esm/index.mjs +19 -7
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/middlewares/oAuth2.middleware.mjs +10 -0
- package/dist/esm/middlewares/oAuth2.middleware.mjs.map +1 -1
- package/dist/esm/middlewares/sessionAuth.middleware.mjs +49 -9
- package/dist/esm/middlewares/sessionAuth.middleware.mjs.map +1 -1
- package/dist/esm/routes/dictionary.routes.mjs +2 -62
- package/dist/esm/routes/dictionary.routes.mjs.map +1 -1
- package/dist/esm/routes/organization.routes.mjs +1 -25
- package/dist/esm/routes/organization.routes.mjs.map +1 -1
- package/dist/esm/routes/project.routes.mjs +10 -85
- package/dist/esm/routes/project.routes.mjs.map +1 -1
- package/dist/esm/routes/sessionAuth.routes.mjs +29 -26
- package/dist/esm/routes/sessionAuth.routes.mjs.map +1 -1
- package/dist/esm/routes/stripe.routes.mjs +17 -0
- package/dist/esm/routes/stripe.routes.mjs.map +1 -0
- package/dist/esm/routes/user.routes.mjs +6 -27
- package/dist/esm/routes/user.routes.mjs.map +1 -1
- package/dist/esm/schemas/organization.schema.mjs +5 -0
- package/dist/esm/schemas/organization.schema.mjs.map +1 -1
- package/dist/esm/schemas/plans.schema.mjs +32 -0
- package/dist/esm/schemas/plans.schema.mjs.map +1 -0
- package/dist/esm/schemas/project.schema.mjs +13 -1
- package/dist/esm/schemas/project.schema.mjs.map +1 -1
- package/dist/esm/schemas/user.schema.mjs +5 -1
- package/dist/esm/schemas/user.schema.mjs.map +1 -1
- package/dist/esm/services/dictionary.service.mjs.map +1 -1
- package/dist/esm/services/email.service.mjs +125 -43
- package/dist/esm/services/email.service.mjs.map +1 -1
- package/dist/esm/services/oAuth2.service.mjs +16 -8
- package/dist/esm/services/oAuth2.service.mjs.map +1 -1
- package/dist/esm/services/organization.service.mjs +58 -7
- package/dist/esm/services/organization.service.mjs.map +1 -1
- package/dist/esm/services/project.service.mjs +9 -5
- package/dist/esm/services/project.service.mjs.map +1 -1
- package/dist/esm/services/projectAccessKey.service.mjs +42 -10
- package/dist/esm/services/projectAccessKey.service.mjs.map +1 -1
- package/dist/esm/services/sessionAuth.service.mjs +9 -10
- package/dist/esm/services/sessionAuth.service.mjs.map +1 -1
- package/dist/esm/services/subscription.service.mjs +178 -0
- package/dist/esm/services/subscription.service.mjs.map +1 -0
- package/dist/esm/services/user.service.mjs +1 -3
- package/dist/esm/services/user.service.mjs.map +1 -1
- package/dist/esm/types/plan.types.mjs +1 -0
- package/dist/esm/types/plan.types.mjs.map +1 -0
- package/dist/esm/utils/errors/ErrorHandler.mjs +29 -9
- package/dist/esm/utils/errors/ErrorHandler.mjs.map +1 -1
- package/dist/esm/utils/errors/ErrorsClass.mjs +17 -3
- package/dist/esm/utils/errors/ErrorsClass.mjs.map +1 -1
- package/dist/esm/utils/errors/errorCodes.mjs +321 -9
- package/dist/esm/utils/errors/errorCodes.mjs.map +1 -1
- package/dist/esm/utils/mapper/organization.mjs.map +1 -1
- package/dist/esm/utils/mapper/project.mjs +17 -2
- package/dist/esm/utils/mapper/project.mjs.map +1 -1
- package/dist/esm/utils/mapper/user.mjs.map +1 -1
- package/dist/esm/utils/plan.mjs +50 -0
- package/dist/esm/utils/plan.mjs.map +1 -0
- package/dist/esm/utils/responseData.mjs +8 -0
- package/dist/esm/utils/responseData.mjs.map +1 -1
- package/dist/esm/webhooks/stripe.webhook.mjs +113 -0
- package/dist/esm/webhooks/stripe.webhook.mjs.map +1 -0
- package/dist/types/controllers/dictionary.controller.d.ts.map +1 -1
- package/dist/types/controllers/organization.controller.d.ts.map +1 -1
- package/dist/types/controllers/project.controller.d.ts +9 -7
- package/dist/types/controllers/project.controller.d.ts.map +1 -1
- package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -1
- package/dist/types/controllers/sessionAuth.controller.d.ts +28 -9
- package/dist/types/controllers/sessionAuth.controller.d.ts.map +1 -1
- package/dist/types/controllers/stripe.controller.d.ts +17 -0
- package/dist/types/controllers/stripe.controller.d.ts.map +1 -0
- package/dist/types/controllers/user.controller.d.ts.map +1 -1
- package/dist/types/emails/SubscriptionPaymentCancellation.d.ts +20 -0
- package/dist/types/emails/SubscriptionPaymentCancellation.d.ts.map +1 -0
- package/dist/types/emails/SubscriptionPaymentError.d.ts +20 -0
- package/dist/types/emails/SubscriptionPaymentError.d.ts.map +1 -0
- package/dist/types/emails/SubscriptionPaymentSuccess.d.ts +20 -0
- package/dist/types/emails/SubscriptionPaymentSuccess.d.ts.map +1 -0
- package/dist/types/export.d.ts +2 -0
- package/dist/types/export.d.ts.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/middlewares/oAuth2.middleware.d.ts.map +1 -1
- package/dist/types/middlewares/sessionAuth.middleware.d.ts +13 -7
- package/dist/types/middlewares/sessionAuth.middleware.d.ts.map +1 -1
- package/dist/types/models/dictionary.model.d.ts +1 -1
- package/dist/types/models/oAuth2.model.d.ts +1 -1
- package/dist/types/models/organization.model.d.ts +2 -1
- package/dist/types/models/organization.model.d.ts.map +1 -1
- package/dist/types/models/plan.moddel.d.ts +11 -0
- package/dist/types/models/plan.moddel.d.ts.map +1 -0
- package/dist/types/models/project.model.d.ts +1 -1
- package/dist/types/routes/dictionary.routes.d.ts.map +1 -1
- package/dist/types/routes/organization.routes.d.ts.map +1 -1
- package/dist/types/routes/project.routes.d.ts.map +1 -1
- package/dist/types/routes/sessionAuth.routes.d.ts +15 -2
- package/dist/types/routes/sessionAuth.routes.d.ts.map +1 -1
- package/dist/types/routes/stripe.routes.d.ts +10 -0
- package/dist/types/routes/stripe.routes.d.ts.map +1 -0
- package/dist/types/routes/user.routes.d.ts.map +1 -1
- package/dist/types/schemas/dictionary.schema.d.ts +2 -2
- package/dist/types/schemas/oAuth2.schema.d.ts +2 -2
- package/dist/types/schemas/organization.schema.d.ts +3 -2
- package/dist/types/schemas/organization.schema.d.ts.map +1 -1
- package/dist/types/schemas/plans.schema.d.ts +16 -0
- package/dist/types/schemas/plans.schema.d.ts.map +1 -0
- package/dist/types/schemas/project.schema.d.ts +12 -3
- package/dist/types/schemas/project.schema.d.ts.map +1 -1
- package/dist/types/schemas/user.schema.d.ts +2 -2
- package/dist/types/schemas/user.schema.d.ts.map +1 -1
- package/dist/types/services/dictionary.service.d.ts +9 -9
- package/dist/types/services/dictionary.service.d.ts.map +1 -1
- package/dist/types/services/email.service.d.ts +33 -4
- package/dist/types/services/email.service.d.ts.map +1 -1
- package/dist/types/services/oAuth2.service.d.ts +7 -5
- package/dist/types/services/oAuth2.service.d.ts.map +1 -1
- package/dist/types/services/organization.service.d.ts +27 -6
- package/dist/types/services/organization.service.d.ts.map +1 -1
- package/dist/types/services/plans.service.d.ts +35 -0
- package/dist/types/services/plans.service.d.ts.map +1 -0
- package/dist/types/services/project.service.d.ts +6 -6
- package/dist/types/services/project.service.d.ts.map +1 -1
- package/dist/types/services/projectAccessKey.service.d.ts +4 -4
- package/dist/types/services/projectAccessKey.service.d.ts.map +1 -1
- package/dist/types/services/sessionAuth.service.d.ts +9 -16
- package/dist/types/services/sessionAuth.service.d.ts.map +1 -1
- package/dist/types/services/subscription.service.d.ts +22 -0
- package/dist/types/services/subscription.service.d.ts.map +1 -0
- package/dist/types/services/user.service.d.ts +11 -19
- package/dist/types/services/user.service.d.ts.map +1 -1
- package/dist/types/types/dictionary.types.d.ts +2 -2
- package/dist/types/types/dictionary.types.d.ts.map +1 -1
- package/dist/types/types/organization.types.d.ts +4 -2
- package/dist/types/types/organization.types.d.ts.map +1 -1
- package/dist/types/types/plan.types.d.ts +18 -0
- package/dist/types/types/plan.types.d.ts.map +1 -0
- package/dist/types/types/project.types.d.ts +13 -2
- package/dist/types/types/project.types.d.ts.map +1 -1
- package/dist/types/types/session.types.d.ts +6 -6
- package/dist/types/types/session.types.d.ts.map +1 -1
- package/dist/types/types/user.types.d.ts +2 -1
- package/dist/types/types/user.types.d.ts.map +1 -1
- package/dist/types/utils/errors/ErrorHandler.d.ts +5 -3
- package/dist/types/utils/errors/ErrorHandler.d.ts.map +1 -1
- package/dist/types/utils/errors/ErrorsClass.d.ts +4 -1
- package/dist/types/utils/errors/ErrorsClass.d.ts.map +1 -1
- package/dist/types/utils/errors/errorCodes.d.ts +313 -1
- package/dist/types/utils/errors/errorCodes.d.ts.map +1 -1
- package/dist/types/utils/mapper/organization.d.ts +1 -1
- package/dist/types/utils/mapper/organization.d.ts.map +1 -1
- package/dist/types/utils/mapper/project.d.ts +10 -1
- package/dist/types/utils/mapper/project.d.ts.map +1 -1
- package/dist/types/utils/mapper/user.d.ts +1 -1
- package/dist/types/utils/mapper/user.d.ts.map +1 -1
- package/dist/types/utils/plan.d.ts +17 -0
- package/dist/types/utils/plan.d.ts.map +1 -0
- package/dist/types/utils/responseData.d.ts +13 -2
- package/dist/types/utils/responseData.d.ts.map +1 -1
- package/dist/types/webhooks/stripe.d.ts +3 -0
- package/dist/types/webhooks/stripe.d.ts.map +1 -0
- package/dist/types/webhooks/stripe.webhook.d.ts +3 -0
- package/dist/types/webhooks/stripe.webhook.d.ts.map +1 -0
- package/package.json +27 -24
- package/dist/cjs/middlewares/admin.middleware.cjs.map +0 -1
- package/dist/esm/middlewares/admin.middleware.mjs +0 -20
- package/dist/esm/middlewares/admin.middleware.mjs.map +0 -1
|
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
var sessionAuth_controller_exports = {};
|
|
30
30
|
__export(sessionAuth_controller_exports, {
|
|
31
31
|
askResetPassword: () => askResetPassword,
|
|
32
|
+
checkIfUserHasPassword: () => checkIfUserHasPassword,
|
|
32
33
|
getSessionInformation: () => getSessionInformation,
|
|
33
34
|
githubCallback: () => githubCallback,
|
|
34
35
|
githubLoginQuery: () => githubLoginQuery,
|
|
@@ -38,11 +39,14 @@ __export(sessionAuth_controller_exports, {
|
|
|
38
39
|
loginEmailPassword: () => loginEmailPassword,
|
|
39
40
|
registerEmailPassword: () => registerEmailPassword,
|
|
40
41
|
resetPassword: () => resetPassword,
|
|
42
|
+
sendVerificationUpdate: () => sendVerificationUpdate,
|
|
41
43
|
setCSRFToken: () => setCSRFToken,
|
|
42
44
|
updatePassword: () => updatePassword,
|
|
43
|
-
validEmail: () => validEmail
|
|
45
|
+
validEmail: () => validEmail,
|
|
46
|
+
verifyEmailStatusSSE: () => verifyEmailStatusSSE
|
|
44
47
|
});
|
|
45
48
|
module.exports = __toCommonJS(sessionAuth_controller_exports);
|
|
49
|
+
var import_crypto = __toESM(require("crypto"), 1);
|
|
46
50
|
var import_logger = require('./../logger/index.cjs');
|
|
47
51
|
var import_sessionAuth = require('./../routes/sessionAuth.routes.cjs');
|
|
48
52
|
var import_email = require('./../services/email.service.cjs');
|
|
@@ -51,8 +55,11 @@ var userService = __toESM(require('./../services/user.service.cjs'), 1);
|
|
|
51
55
|
var import_CSRF = require('./../utils/CSRF.cjs');
|
|
52
56
|
var import_errors = require('./../utils/errors/index.cjs');
|
|
53
57
|
var import_httpStatusCodes = require('./../utils/httpStatusCodes.cjs');
|
|
58
|
+
var import_organization = require('./../utils/mapper/organization.cjs');
|
|
59
|
+
var import_project = require('./../utils/mapper/project.cjs');
|
|
54
60
|
var import_user = require('./../utils/mapper/user.cjs');
|
|
55
61
|
var import_responseData = require('./../utils/responseData.cjs');
|
|
62
|
+
var import_express_intlayer = require("express-intlayer");
|
|
56
63
|
var import_mongoose = require("mongoose");
|
|
57
64
|
var import_uuid = require("uuid");
|
|
58
65
|
const setCSRFToken = (req, res, _next) => {
|
|
@@ -65,10 +72,15 @@ const setCSRFToken = (req, res, _next) => {
|
|
|
65
72
|
};
|
|
66
73
|
const registerEmailPassword = async (req, res, _next) => {
|
|
67
74
|
const { user } = res.locals;
|
|
75
|
+
const { callBack_url } = req.query;
|
|
68
76
|
if (user) {
|
|
69
77
|
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
|
|
70
78
|
return;
|
|
71
79
|
}
|
|
80
|
+
if (callBack_url && !callBack_url.startsWith(process.env.CLIENT_URL ?? "")) {
|
|
81
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
72
84
|
const userData = req.body;
|
|
73
85
|
try {
|
|
74
86
|
let user2 = await userService.getUserByEmail(userData.email);
|
|
@@ -76,22 +88,18 @@ const registerEmailPassword = async (req, res, _next) => {
|
|
|
76
88
|
const emailProvider = user2.provider?.find(
|
|
77
89
|
(provider) => provider.provider === "email"
|
|
78
90
|
);
|
|
79
|
-
if (emailProvider) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
secret: (0, import_uuid.v4)()
|
|
92
|
-
}
|
|
93
|
-
);
|
|
94
|
-
}
|
|
91
|
+
if (emailProvider?.emailValidated) {
|
|
92
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(
|
|
93
|
+
res,
|
|
94
|
+
"EMAIL_ALREADY_REGISTERED"
|
|
95
|
+
);
|
|
96
|
+
return;
|
|
97
|
+
} else if (emailProvider) {
|
|
98
|
+
user2 = await sessionAuthService.updateUserProvider(user2._id, "email", {
|
|
99
|
+
provider: "email",
|
|
100
|
+
emailValidated: void 0,
|
|
101
|
+
secret: (0, import_uuid.v4)()
|
|
102
|
+
});
|
|
95
103
|
} else {
|
|
96
104
|
user2 = await sessionAuthService.addUserProvider(user2._id, {
|
|
97
105
|
provider: "email",
|
|
@@ -100,7 +108,16 @@ const registerEmailPassword = async (req, res, _next) => {
|
|
|
100
108
|
});
|
|
101
109
|
}
|
|
102
110
|
} else {
|
|
103
|
-
user2 = await userService.createUser(
|
|
111
|
+
user2 = await userService.createUser({
|
|
112
|
+
...userData,
|
|
113
|
+
provider: [
|
|
114
|
+
{
|
|
115
|
+
provider: "email",
|
|
116
|
+
emailValidated: void 0,
|
|
117
|
+
secret: (0, import_uuid.v4)()
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
});
|
|
104
121
|
import_logger.logger.info(`New registration: ${user2.name} - ${user2.email}`);
|
|
105
122
|
}
|
|
106
123
|
if (!user2) {
|
|
@@ -109,9 +126,30 @@ const registerEmailPassword = async (req, res, _next) => {
|
|
|
109
126
|
});
|
|
110
127
|
return;
|
|
111
128
|
}
|
|
112
|
-
await
|
|
129
|
+
await (0, import_email.sendEmail)({
|
|
130
|
+
type: "validate",
|
|
131
|
+
to: user2.email,
|
|
132
|
+
username: user2.name ?? user2.email.split("@")[0],
|
|
133
|
+
validationLink: import_sessionAuth.sessionAuthRoutes.validEmail.url({
|
|
134
|
+
userId: String(user2._id),
|
|
135
|
+
secret: user2.provider?.find((provider) => provider.provider === "email")?.secret ?? "",
|
|
136
|
+
callBack_url
|
|
137
|
+
})
|
|
138
|
+
});
|
|
113
139
|
const formattedUser = (0, import_user.mapUserToAPI)(user2);
|
|
114
|
-
const responseData = (0, import_responseData.formatResponse)({
|
|
140
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
141
|
+
message: (0, import_express_intlayer.t)({
|
|
142
|
+
en: "User registered successfully",
|
|
143
|
+
fr: "Utilisateur enregistr\xE9 avec succ\xE8s",
|
|
144
|
+
es: "Usuario registrado con \xE9xito"
|
|
145
|
+
}),
|
|
146
|
+
description: (0, import_express_intlayer.t)({
|
|
147
|
+
en: "Your user has been registered successfully. Please check your email to validate your account.",
|
|
148
|
+
fr: "Votre utilisateur a \xE9t\xE9 enregistr\xE9 avec succ\xE8s. Veuillez v\xE9rifier votre e-mail pour valider votre compte.",
|
|
149
|
+
es: "Su usuario ha sido registrado con \xE9xito. Por favor, revise su correo electr\xF3nico para validar su cuenta."
|
|
150
|
+
}),
|
|
151
|
+
data: formattedUser
|
|
152
|
+
});
|
|
115
153
|
res.json(responseData);
|
|
116
154
|
return;
|
|
117
155
|
} catch (error) {
|
|
@@ -140,7 +178,19 @@ const loginEmailPassword = async (req, res, _next) => {
|
|
|
140
178
|
}
|
|
141
179
|
await sessionAuthService.setUserAuth(res, loggedInUser);
|
|
142
180
|
const formattedUser = (0, import_user.mapUserToAPI)(loggedInUser);
|
|
143
|
-
const responseData = (0, import_responseData.formatResponse)({
|
|
181
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
182
|
+
message: (0, import_express_intlayer.t)({
|
|
183
|
+
en: "User logged in successfully",
|
|
184
|
+
fr: "Utilisateur connect\xE9 avec succ\xE8s",
|
|
185
|
+
es: "Usuario conectado con \xE9xito"
|
|
186
|
+
}),
|
|
187
|
+
description: (0, import_express_intlayer.t)({
|
|
188
|
+
en: "Your user has been logged in successfully",
|
|
189
|
+
fr: "Votre utilisateur a \xE9t\xE9 connect\xE9 avec succ\xE8s",
|
|
190
|
+
es: "Su usuario ha sido conectado con \xE9xito"
|
|
191
|
+
}),
|
|
192
|
+
data: formattedUser
|
|
193
|
+
});
|
|
144
194
|
import_logger.logger.info(`Login: ${loggedInUser.email}`);
|
|
145
195
|
res.json(responseData);
|
|
146
196
|
return;
|
|
@@ -152,37 +202,63 @@ const loginEmailPassword = async (req, res, _next) => {
|
|
|
152
202
|
const logOut = async (_req, res, _next) => {
|
|
153
203
|
const { user } = res.locals;
|
|
154
204
|
if (!user) {
|
|
155
|
-
import_errors.ErrorHandler.handleGenericErrorResponse(res, "
|
|
205
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED");
|
|
156
206
|
return;
|
|
157
207
|
}
|
|
158
208
|
await sessionAuthService.clearUserAuth(res);
|
|
159
209
|
sessionAuthService.clearOrganizationAuth(res);
|
|
160
210
|
sessionAuthService.clearProjectAuth(res);
|
|
161
211
|
import_logger.logger.info(`Logout: ${user.name} - ${user.email}`);
|
|
162
|
-
const responseData = (0, import_responseData.formatResponse)({
|
|
212
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
213
|
+
message: (0, import_express_intlayer.t)({
|
|
214
|
+
en: "User logged out successfully",
|
|
215
|
+
fr: "Utilisateur d\xE9connect\xE9 avec succ\xE8s",
|
|
216
|
+
es: "Usuario desconectado con \xE9xito"
|
|
217
|
+
}),
|
|
218
|
+
description: (0, import_express_intlayer.t)({
|
|
219
|
+
en: "Your user has been logged out successfully",
|
|
220
|
+
fr: "Votre utilisateur a \xE9t\xE9 d\xE9connect\xE9 avec succ\xE8s",
|
|
221
|
+
es: "Su usuario ha sido desconectado con \xE9xito"
|
|
222
|
+
}),
|
|
223
|
+
data: void 0
|
|
224
|
+
});
|
|
163
225
|
res.json(responseData);
|
|
164
226
|
};
|
|
165
227
|
const updatePassword = async (req, res, _next) => {
|
|
166
228
|
const { oldPassword, newPassword } = req.body;
|
|
167
229
|
let { user } = res.locals;
|
|
168
230
|
if (!user) {
|
|
169
|
-
import_errors.ErrorHandler.handleGenericErrorResponse(res, "
|
|
231
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED");
|
|
170
232
|
return;
|
|
171
233
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
234
|
+
const userEmailProvider = user.provider?.find(
|
|
235
|
+
(provider) => provider.provider === "email"
|
|
236
|
+
);
|
|
237
|
+
if (!userEmailProvider) {
|
|
238
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_PROVIDER_NOT_FOUND", {
|
|
239
|
+
provider: "email"
|
|
240
|
+
});
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (userEmailProvider.passwordHash && !oldPassword) {
|
|
244
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(
|
|
245
|
+
res,
|
|
246
|
+
"USER_PREVIOUS_PASSWORD_NOT_PROVIDED"
|
|
176
247
|
);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
if (oldPassword) {
|
|
252
|
+
const { error } = await sessionAuthService.testUserPassword(
|
|
253
|
+
user.email,
|
|
254
|
+
oldPassword
|
|
255
|
+
);
|
|
256
|
+
if (error) {
|
|
257
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "LOGIN_FAILED");
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
180
260
|
}
|
|
181
|
-
user = await sessionAuthService.changeUserPassword(
|
|
182
|
-
user._id,
|
|
183
|
-
oldPassword,
|
|
184
|
-
newPassword
|
|
185
|
-
);
|
|
261
|
+
user = await sessionAuthService.changeUserPassword(user._id, newPassword);
|
|
186
262
|
if (!user || typeof user !== "object") {
|
|
187
263
|
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_DATA_NOT_FOUND");
|
|
188
264
|
return;
|
|
@@ -191,7 +267,65 @@ const updatePassword = async (req, res, _next) => {
|
|
|
191
267
|
`Password changed - User : Name : ${user.name}, id : ${String(user._id)}`
|
|
192
268
|
);
|
|
193
269
|
const formattedUser = (0, import_user.mapUserToAPI)(user);
|
|
194
|
-
const responseData = (0, import_responseData.formatResponse)({
|
|
270
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
271
|
+
message: (0, import_express_intlayer.t)({
|
|
272
|
+
en: "Password changed successfully",
|
|
273
|
+
fr: "Mot de passe modifi\xE9 avec succ\xE8s",
|
|
274
|
+
es: "Contrase\xF1a cambiada con \xE9xito"
|
|
275
|
+
}),
|
|
276
|
+
description: (0, import_express_intlayer.t)({
|
|
277
|
+
en: "Your password has been changed successfully",
|
|
278
|
+
fr: "Votre mot de passe a \xE9t\xE9 modifi\xE9 avec succ\xE8s",
|
|
279
|
+
es: "Su contrase\xF1a ha sido cambiada con \xE9xito"
|
|
280
|
+
}),
|
|
281
|
+
data: formattedUser
|
|
282
|
+
});
|
|
283
|
+
res.json(responseData);
|
|
284
|
+
return;
|
|
285
|
+
} catch (error) {
|
|
286
|
+
import_errors.ErrorHandler.handleAppErrorResponse(res, error);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
let clients = [];
|
|
291
|
+
const sendVerificationUpdate = (user) => {
|
|
292
|
+
const filteredClients = clients.filter(
|
|
293
|
+
(client) => String(client.userId) === String(user._id)
|
|
294
|
+
);
|
|
295
|
+
for (const client of filteredClients) {
|
|
296
|
+
const provider = user.provider?.find(
|
|
297
|
+
(provider2) => provider2.provider === "email"
|
|
298
|
+
);
|
|
299
|
+
if (provider?.emailValidated) {
|
|
300
|
+
client.res.write(
|
|
301
|
+
`data: ${JSON.stringify({ userId: user._id, status: "verified" })}
|
|
302
|
+
|
|
303
|
+
`
|
|
304
|
+
);
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
client.res.write(
|
|
308
|
+
`data: ${JSON.stringify({ userId: user._id, status: "waiting" })}
|
|
309
|
+
|
|
310
|
+
`
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
const checkIfUserHasPassword = async (_req, res, _next) => {
|
|
315
|
+
const { user } = res.locals;
|
|
316
|
+
if (!user) {
|
|
317
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED");
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
try {
|
|
321
|
+
const userProvider = user.provider?.find(
|
|
322
|
+
(provider) => provider.provider === "email"
|
|
323
|
+
);
|
|
324
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
325
|
+
data: {
|
|
326
|
+
hasPassword: Boolean(userProvider?.passwordHash)
|
|
327
|
+
}
|
|
328
|
+
});
|
|
195
329
|
res.json(responseData);
|
|
196
330
|
return;
|
|
197
331
|
} catch (error) {
|
|
@@ -201,33 +335,75 @@ const updatePassword = async (req, res, _next) => {
|
|
|
201
335
|
};
|
|
202
336
|
const validEmail = async (req, res, _next) => {
|
|
203
337
|
const { userId, secret } = req.params;
|
|
204
|
-
const
|
|
338
|
+
const callBack_url = `${req.query.callBack_url ?? `${process.env.CLIENT_URL}/auth/login`}?userId=${userId}`;
|
|
205
339
|
if (!import_mongoose.Types.ObjectId.isValid(userId.toString())) {
|
|
206
340
|
import_errors.ErrorHandler.handleGenericErrorResponse(res, "INVALID_USER_ID");
|
|
207
341
|
return;
|
|
208
342
|
}
|
|
209
|
-
if (!organization) {
|
|
210
|
-
import_errors.ErrorHandler.handleGenericErrorResponse(res, "ORGANIZATION_NOT_FOUND");
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
343
|
const user = await userService.getUserById(userId);
|
|
214
344
|
if (!user) {
|
|
215
|
-
import_errors.ErrorHandler.handleGenericErrorResponse(res, "
|
|
345
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_NOT_DEFINED", {
|
|
346
|
+
userId
|
|
347
|
+
});
|
|
216
348
|
return;
|
|
217
349
|
}
|
|
218
|
-
|
|
350
|
+
if (callBack_url && !callBack_url.startsWith(process.env.CLIENT_URL ?? "")) {
|
|
351
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const provider = user.provider?.find(
|
|
355
|
+
(provider2) => provider2.provider === "email"
|
|
356
|
+
);
|
|
357
|
+
if (provider?.emailValidated) {
|
|
358
|
+
res.redirect(callBack_url);
|
|
359
|
+
}
|
|
360
|
+
if (!provider?.secret) {
|
|
361
|
+
throw new import_errors.GenericError("USER_PROVIDER_SECRET_NOT_DEFINED", { userId });
|
|
362
|
+
}
|
|
363
|
+
if (!import_crypto.default.timingSafeEqual(Buffer.from(provider.secret), Buffer.from(secret))) {
|
|
364
|
+
throw new import_errors.GenericError("USER_PROVIDER_SECRET_NOT_VALID", { userId });
|
|
365
|
+
}
|
|
366
|
+
await sessionAuthService.updateUserProvider(userId, "email", {
|
|
367
|
+
secret: void 0,
|
|
368
|
+
emailValidated: /* @__PURE__ */ new Date()
|
|
369
|
+
});
|
|
219
370
|
import_logger.logger.info(
|
|
220
371
|
`User activated - User: Name: ${user.name}, id: ${String(user._id)}`
|
|
221
372
|
);
|
|
373
|
+
sendVerificationUpdate(user);
|
|
374
|
+
await sessionAuthService.setUserAuth(res, user);
|
|
222
375
|
await (0, import_email.sendEmail)({
|
|
223
376
|
type: "welcome",
|
|
224
377
|
to: user.email,
|
|
225
378
|
username: user.name,
|
|
226
|
-
loginLink:
|
|
379
|
+
loginLink: callBack_url
|
|
380
|
+
});
|
|
381
|
+
res.redirect(callBack_url);
|
|
382
|
+
};
|
|
383
|
+
const verifyEmailStatusSSE = async (req, res) => {
|
|
384
|
+
res.setHeader("Content-Type", "text/event-stream;charset=utf-8");
|
|
385
|
+
res.setHeader("Cache-Control", "no-cache, no-transform");
|
|
386
|
+
res.setHeader("Connection", "keep-alive");
|
|
387
|
+
res.setHeader("X-Accel-Buffering", "no");
|
|
388
|
+
res.write(":\n\n");
|
|
389
|
+
res.flushHeaders();
|
|
390
|
+
const { userId } = req.params;
|
|
391
|
+
const clientId = Date.now();
|
|
392
|
+
const user = await userService.getUserById(userId);
|
|
393
|
+
if (!user) {
|
|
394
|
+
import_logger.logger.error(`User not found - User ID: ${userId}`);
|
|
395
|
+
res.write(`data: ${JSON.stringify({ userId, status: "error" })}
|
|
396
|
+
|
|
397
|
+
`);
|
|
398
|
+
res.end();
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
const newClient = { id: clientId, userId, res };
|
|
402
|
+
clients.push(newClient);
|
|
403
|
+
sendVerificationUpdate(user);
|
|
404
|
+
req.on("close", () => {
|
|
405
|
+
clients = clients.filter((client) => client.id !== clientId);
|
|
227
406
|
});
|
|
228
|
-
const formattedUser = (0, import_user.mapUserToAPI)(user);
|
|
229
|
-
const responseData = (0, import_responseData.formatResponse)({ data: formattedUser });
|
|
230
|
-
res.json(responseData);
|
|
231
407
|
};
|
|
232
408
|
const askResetPassword = async (req, res, _next) => {
|
|
233
409
|
const { email } = req.body;
|
|
@@ -255,7 +431,19 @@ const askResetPassword = async (req, res, _next) => {
|
|
|
255
431
|
)?.secret ?? ""
|
|
256
432
|
})
|
|
257
433
|
});
|
|
258
|
-
const responseData = (0, import_responseData.formatResponse)({
|
|
434
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
435
|
+
message: (0, import_express_intlayer.t)({
|
|
436
|
+
en: "Password reset request sent successfully",
|
|
437
|
+
fr: "Demande de r\xE9initialisation de mot de passe envoy\xE9e avec succ\xE8s",
|
|
438
|
+
es: "Solicitud de restablecimiento de contrase\xF1a enviada con \xE9xito"
|
|
439
|
+
}),
|
|
440
|
+
description: (0, import_express_intlayer.t)({
|
|
441
|
+
en: "Your password reset request has been sent successfully. Please check your email to reset your password.",
|
|
442
|
+
fr: "Votre demande de r\xE9initialisation de mot de passe a \xE9t\xE9 envoy\xE9e avec succ\xE8s. Veuillez v\xE9rifier votre e-mail pour r\xE9initialiser votre mot de passe.",
|
|
443
|
+
es: "Su solicitud de restablecimiento de contrase\xF1a ha sido enviada con \xE9xito. Por favor, revise su correo electr\xF3nico para restablecer su contrase\xF1a."
|
|
444
|
+
}),
|
|
445
|
+
data: void 0
|
|
446
|
+
});
|
|
259
447
|
res.json(responseData);
|
|
260
448
|
return;
|
|
261
449
|
} catch (error) {
|
|
@@ -290,7 +478,19 @@ const resetPassword = async (req, res, _next) => {
|
|
|
290
478
|
username: updatedUser.name
|
|
291
479
|
});
|
|
292
480
|
const formattedUser = (0, import_user.mapUserToAPI)(updatedUser);
|
|
293
|
-
const responseData = (0, import_responseData.formatResponse)({
|
|
481
|
+
const responseData = (0, import_responseData.formatResponse)({
|
|
482
|
+
message: (0, import_express_intlayer.t)({
|
|
483
|
+
en: "Password reset successfully",
|
|
484
|
+
fr: "R\xE9initialisation du mot de passe r\xE9ussie",
|
|
485
|
+
es: "Restablecimiento de contrase\xF1a exitoso"
|
|
486
|
+
}),
|
|
487
|
+
description: (0, import_express_intlayer.t)({
|
|
488
|
+
en: "Your password has been reset successfully. You can now log in with your new password",
|
|
489
|
+
fr: "Votre mot de passe a \xE9t\xE9 r\xE9initialis\xE9 avec succ\xE8s. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe",
|
|
490
|
+
es: "Su contrase\xF1a ha sido restablecida con \xE9xito. Ahora puede iniciar sesi\xF3n con su nueva contrase\xF1a"
|
|
491
|
+
}),
|
|
492
|
+
data: formattedUser
|
|
493
|
+
});
|
|
294
494
|
res.json(responseData);
|
|
295
495
|
return;
|
|
296
496
|
} catch (error) {
|
|
@@ -301,26 +501,35 @@ const resetPassword = async (req, res, _next) => {
|
|
|
301
501
|
const getSessionInformation = async (req, res, _next) => {
|
|
302
502
|
const { session_token: sessionToken } = req.query;
|
|
303
503
|
let { user } = res.locals;
|
|
304
|
-
const { organization, project } = res.locals;
|
|
504
|
+
const { organization, project, isOrganizationAdmin, isProjectAdmin } = res.locals;
|
|
305
505
|
try {
|
|
306
506
|
if (sessionToken) {
|
|
307
507
|
user = await userService.getUserBySession(sessionToken);
|
|
308
508
|
}
|
|
309
|
-
if (!user) {
|
|
310
|
-
|
|
509
|
+
if (!user || !user?.session) {
|
|
510
|
+
const responseData2 = (0, import_responseData.formatResponse)({
|
|
511
|
+
data: {
|
|
512
|
+
session: null,
|
|
513
|
+
user: null,
|
|
514
|
+
organization: organization?._id ? (0, import_organization.mapOrganizationToAPI)(organization, isOrganizationAdmin) : null,
|
|
515
|
+
project: project?._id ? (0, import_project.mapProjectToAPI)(project, user, isProjectAdmin) : null
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
res.json(responseData2);
|
|
311
519
|
return;
|
|
312
520
|
}
|
|
313
521
|
const session = user.session;
|
|
314
|
-
if (!session) {
|
|
315
|
-
import_errors.ErrorHandler.handleGenericErrorResponse(res, "SESSION_NOT_FOUND");
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
522
|
const formattedUser = {
|
|
319
523
|
...(0, import_user.mapUserToAPI)(user),
|
|
320
524
|
role: "user"
|
|
321
525
|
};
|
|
322
526
|
const responseData = (0, import_responseData.formatResponse)({
|
|
323
|
-
data: {
|
|
527
|
+
data: {
|
|
528
|
+
session,
|
|
529
|
+
user: formattedUser,
|
|
530
|
+
organization: organization?._id ? (0, import_organization.mapOrganizationToAPI)(organization, isOrganizationAdmin) : null,
|
|
531
|
+
project: project?._id ? (0, import_project.mapProjectToAPI)(project, user, isProjectAdmin) : null
|
|
532
|
+
}
|
|
324
533
|
});
|
|
325
534
|
res.json(responseData);
|
|
326
535
|
return;
|
|
@@ -336,11 +545,15 @@ const githubLoginQuery = (req, res, _next) => {
|
|
|
336
545
|
import_errors.ErrorHandler.handleGenericErrorResponse(res, "USER_ALREADY_LOGGED_IN");
|
|
337
546
|
return;
|
|
338
547
|
}
|
|
548
|
+
if (origin && !origin.startsWith(process.env.CLIENT_URL ?? "")) {
|
|
549
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
339
552
|
const encodedOrigin = encodeURIComponent(origin);
|
|
340
553
|
const redirectURI = `${process.env.BACKEND_URL}/api/auth/callback/github?redirect_uri=${encodedOrigin}`;
|
|
341
554
|
const encodedRedirectURI = encodeURIComponent(redirectURI);
|
|
342
555
|
res.redirect(
|
|
343
|
-
`https://github.com/login/oauth/authorize?client_id=${process.env.GITHUB_CLIENT_ID}&redirect_uri=${encodedRedirectURI}`
|
|
556
|
+
`https://github.com/login/oauth/authorize?client_id=${process.env.GITHUB_CLIENT_ID}&redirect_uri=${encodedRedirectURI}&scope=user:email`
|
|
344
557
|
);
|
|
345
558
|
};
|
|
346
559
|
const githubCallback = async (req, res, _next) => {
|
|
@@ -357,6 +570,10 @@ const githubCallback = async (req, res, _next) => {
|
|
|
357
570
|
res.redirect(redirect_uri);
|
|
358
571
|
return;
|
|
359
572
|
}
|
|
573
|
+
if (redirect_uri && !redirect_uri.startsWith(process.env.CLIENT_URL ?? "")) {
|
|
574
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
360
577
|
try {
|
|
361
578
|
const tokenResponse = await fetch(
|
|
362
579
|
"https://github.com/login/oauth/access_token",
|
|
@@ -454,7 +671,7 @@ const githubCallback = async (req, res, _next) => {
|
|
|
454
671
|
type: "welcome",
|
|
455
672
|
to: user.email,
|
|
456
673
|
username: user.name,
|
|
457
|
-
loginLink:
|
|
674
|
+
loginLink: `${process.env.CLIENT_URL}/auth/login`
|
|
458
675
|
});
|
|
459
676
|
res.redirect(redirect_uri);
|
|
460
677
|
} catch (error) {
|
|
@@ -471,6 +688,10 @@ const googleLoginQuery = (req, res, _next) => {
|
|
|
471
688
|
res.redirect(origin);
|
|
472
689
|
return;
|
|
473
690
|
}
|
|
691
|
+
if (origin && !origin.startsWith(process.env.CLIENT_URL ?? "")) {
|
|
692
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
474
695
|
const responseType = "code";
|
|
475
696
|
const scope = [
|
|
476
697
|
"https%3A//www.googleapis.com/auth/userinfo.email",
|
|
@@ -502,6 +723,10 @@ const googleCallback = async (req, res, _next) => {
|
|
|
502
723
|
res.redirect(responseCode, redirect_uri);
|
|
503
724
|
return;
|
|
504
725
|
}
|
|
726
|
+
if (redirect_uri && !redirect_uri.startsWith(process.env.CLIENT_URL ?? "")) {
|
|
727
|
+
import_errors.ErrorHandler.handleGenericErrorResponse(res, "CALLBACK_URL_NOT_VALID");
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
505
730
|
try {
|
|
506
731
|
const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
|
|
507
732
|
method: "POST",
|
|
@@ -590,8 +815,9 @@ const googleCallback = async (req, res, _next) => {
|
|
|
590
815
|
type: "welcome",
|
|
591
816
|
to: user.email,
|
|
592
817
|
username: user.name,
|
|
593
|
-
loginLink:
|
|
818
|
+
loginLink: `${process.env.CLIENT_URL}/auth/login`
|
|
594
819
|
});
|
|
820
|
+
res.redirect(redirect_uri);
|
|
595
821
|
} catch (error) {
|
|
596
822
|
import_errors.ErrorHandler.handleAppErrorResponse(res, error);
|
|
597
823
|
return;
|
|
@@ -600,6 +826,7 @@ const googleCallback = async (req, res, _next) => {
|
|
|
600
826
|
// Annotate the CommonJS export names for ESM import in node:
|
|
601
827
|
0 && (module.exports = {
|
|
602
828
|
askResetPassword,
|
|
829
|
+
checkIfUserHasPassword,
|
|
603
830
|
getSessionInformation,
|
|
604
831
|
githubCallback,
|
|
605
832
|
githubLoginQuery,
|
|
@@ -609,8 +836,10 @@ const googleCallback = async (req, res, _next) => {
|
|
|
609
836
|
loginEmailPassword,
|
|
610
837
|
registerEmailPassword,
|
|
611
838
|
resetPassword,
|
|
839
|
+
sendVerificationUpdate,
|
|
612
840
|
setCSRFToken,
|
|
613
841
|
updatePassword,
|
|
614
|
-
validEmail
|
|
842
|
+
validEmail,
|
|
843
|
+
verifyEmailStatusSSE
|
|
615
844
|
});
|
|
616
845
|
//# sourceMappingURL=sessionAuth.controller.cjs.map
|