@hartl-services/medusa-base 2.6.1 → 2.8.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/.medusa/server/src/admin/admin-components/features/plugin-features/components/ImageSettingInput.d.ts +3 -2
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/ImageSettingInput.js +4 -4
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginActionsSection.js +4 -4
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginBreadcrumb.d.ts +16 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginBreadcrumb.js +25 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginDetailPage.js +1 -1
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeatureSections.d.ts +5 -4
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeatureSections.js +8 -5
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeaturesCard.d.ts +4 -4
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeaturesCard.js +24 -27
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.d.ts +2 -2
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +9 -9
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginHubCard.d.ts +5 -1
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginHubCard.js +11 -15
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginPageShell.d.ts +10 -4
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginPageShell.js +10 -5
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginSettingsForm.d.ts +0 -1
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginSettingsForm.js +77 -26
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginStatusChips.d.ts +5 -1
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/PluginStatusChips.js +8 -6
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/ShopMasterDataBanner.d.ts +11 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/components/ShopMasterDataBanner.js +15 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +40 -5
- package/.medusa/server/src/admin/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +160 -20
- package/.medusa/server/src/admin/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +40 -5
- package/.medusa/server/src/admin/admin-components/features/plugin-features/hooks/usePluginSwitch.d.ts +15 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/hooks/usePluginSwitch.js +66 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +160 -20
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/plugin-view.d.ts +49 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/plugin-view.js +72 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/settings-draft.d.ts +1 -12
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/settings-draft.js +4 -20
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/settings-layout.d.ts +47 -0
- package/.medusa/server/src/admin/admin-components/features/plugin-features/lib/settings-layout.js +70 -0
- package/.medusa/server/src/admin/admin-components/i18n/texts.d.ts +22 -2
- package/.medusa/server/src/admin/admin-components/i18n/texts.js +29 -7
- package/.medusa/server/src/admin/admin-components/index.d.ts +12 -0
- package/.medusa/server/src/admin/admin-components/index.js +11 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/AdminPageHeader.d.ts +22 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/AdminPageHeader.js +8 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/AdminSection.d.ts +26 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/AdminSection.js +12 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/BreadcrumbTrail.d.ts +23 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/BreadcrumbTrail.js +20 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/FileDropField.d.ts +21 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/FileDropField.js +33 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/FocusModalShell.d.ts +27 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/FocusModalShell.js +13 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/InfoTooltip.d.ts +13 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/InfoTooltip.js +8 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/MultiSelectDropdown.d.ts +22 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/MultiSelectDropdown.js +14 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/PluginIcon.d.ts +10 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/PluginIcon.js +10 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/SwitchRow.d.ts +27 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/SwitchRow.js +15 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/WidgetHeader.d.ts +15 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/WidgetHeader.js +8 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/file-drop.d.ts +13 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/file-drop.js +16 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/multi-select.d.ts +13 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/multi-select.js +11 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/plugin-icon.d.ts +12 -0
- package/.medusa/server/src/admin/admin-components/shared/ui/plugin-icon.js +29 -0
- package/.medusa/server/src/admin/index.js +3155 -2039
- package/.medusa/server/src/admin/index.mjs +3158 -2042
- package/.medusa/server/src/api/admin-first-login-password-policy.js +56 -0
- package/.medusa/server/src/api/answer-actor-type-casing-not-found.js +26 -0
- package/.medusa/server/src/api/answer-code-provider-route-not-found.js +34 -0
- package/.medusa/server/src/api/code-account-password-routes.js +92 -0
- package/.medusa/server/src/api/middlewares.js +82 -17
- package/.medusa/server/src/api/password-policy.js +55 -10
- package/.medusa/server/src/api/require-login-code-customer-email.js +40 -0
- package/.medusa/server/src/api/store/customer-auth/login-code/route.js +17 -0
- package/.medusa/server/src/api/store/customer-auth/password-policy/route.js +19 -0
- package/.medusa/server/src/customer-auth/application/prepare-code-account-password-reset.js +111 -0
- package/.medusa/server/src/customer-auth/application/request-login-code.js +145 -0
- package/.medusa/server/src/customer-auth/customer-auth-methods-snapshot.js +55 -0
- package/.medusa/server/src/customer-auth/customer-password-policy.js +40 -0
- package/.medusa/server/src/customer-auth/domain/account-linking.js +53 -0
- package/.medusa/server/src/customer-auth/domain/auth-methods.js +32 -0
- package/.medusa/server/src/customer-auth/domain/login-code.js +39 -0
- package/.medusa/server/src/customer-auth/login-code-accounts.js +146 -0
- package/.medusa/server/src/customer-auth/login-code-state.js +139 -0
- package/.medusa/server/src/customer-auth/plugin-features.js +80 -0
- package/.medusa/server/src/customer-auth/remove-provider-identity.js +18 -0
- package/.medusa/server/src/customer-auth/start-customer-auth-methods.js +20 -0
- package/.medusa/server/src/documents/plugin-features.js +8 -2
- package/.medusa/server/src/email/application/deliver-ephemeral-auth-mail.js +186 -0
- package/.medusa/server/src/email/application/deliver-login-code.js +89 -0
- package/.medusa/server/src/email/application/handle-customer-verification-event.js +29 -168
- package/.medusa/server/src/email/application/handle-password-reset-event.js +27 -166
- package/.medusa/server/src/email/customer-verification-snapshot.js +20 -108
- package/.medusa/server/src/email/domain/business-keys.js +15 -2
- package/.medusa/server/src/email/plugin-features.js +8 -3
- package/.medusa/server/src/email/rendering/default-templates.js +2 -1
- package/.medusa/server/src/email/templates/blocks/dynamic-blocks.js +19 -1
- package/.medusa/server/src/email/templates/defaults/documents.js +7 -1
- package/.medusa/server/src/email/templates/defaults/subjects.js +3 -1
- package/.medusa/server/src/email/templates/defaults/texts.js +5 -2
- package/.medusa/server/src/email/templates/render.js +2 -1
- package/.medusa/server/src/email/templates/sample-data.js +2 -1
- package/.medusa/server/src/email/templates/validate.js +8 -3
- package/.medusa/server/src/email/types/email-kinds.js +4 -2
- package/.medusa/server/src/email/types/template-data.js +9 -1
- package/.medusa/server/src/modules/customer-auth/index.js +14 -0
- package/.medusa/server/src/modules/customer-auth/service.js +35 -0
- package/.medusa/server/src/modules/email/migrations/Migration20261010090000.js +20 -0
- package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +30 -6
- package/.medusa/server/src/modules/plugin-features/service.js +29 -3
- package/.medusa/server/src/providers/email-otp/index.js +8 -0
- package/.medusa/server/src/providers/email-otp/service.js +96 -0
- package/.medusa/server/src/public/descriptor.js +138 -5
- package/.medusa/server/src/public/effective-features.js +22 -1
- package/.medusa/server/src/public/index.js +4 -2
- package/.medusa/server/src/public/plugin-icons.js +28 -0
- package/.medusa/server/src/public/shop-master-data.js +33 -14
- package/.medusa/server/src/shared/lib/dates.js +8 -2
- package/.medusa/server/src/shared/lib/index.js +2 -1
- package/.medusa/server/src/shared/lib/refreshing-snapshot.js +122 -0
- package/.medusa/server/src/shop-config/build-food-shop-config.js +38 -1
- package/README.md +436 -87
- package/dist/customer-auth/customer-auth-methods-snapshot.d.ts +25 -0
- package/dist/customer-auth/customer-auth-methods-snapshot.js +54 -0
- package/dist/customer-auth/domain/auth-methods.d.ts +16 -0
- package/dist/customer-auth/domain/auth-methods.js +31 -0
- package/dist/customer-auth/plugin-features.d.ts +2 -0
- package/dist/customer-auth/plugin-features.js +79 -0
- package/dist/email/customer-verification-snapshot.d.ts +3 -15
- package/dist/email/customer-verification-snapshot.js +19 -107
- package/dist/email/types/email-kinds.d.ts +4 -3
- package/dist/email/types/email-kinds.js +3 -1
- package/dist/email/types/template-data.d.ts +8 -0
- package/dist/email/types/template-data.js +8 -0
- package/dist/public/descriptor.js +137 -4
- package/dist/public/effective-features.d.ts +10 -0
- package/dist/public/effective-features.js +21 -0
- package/dist/public/index.d.ts +2 -1
- package/dist/public/index.js +3 -1
- package/dist/public/plugin-icons.d.ts +7 -0
- package/dist/public/plugin-icons.js +27 -0
- package/dist/public/shop-master-data.js +32 -13
- package/dist/public/types.d.ts +74 -2
- package/dist/shared/lib/dates.d.ts +2 -0
- package/dist/shared/lib/dates.js +7 -1
- package/dist/shared/lib/index.d.ts +1 -0
- package/dist/shared/lib/index.js +1 -0
- package/dist/shared/lib/refreshing-snapshot.d.ts +52 -0
- package/dist/shared/lib/refreshing-snapshot.js +121 -0
- package/dist/shop-config/build-food-shop-config.js +37 -0
- package/package.json +8 -3
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enforceAdminPasswordOnFirstLogin = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const password_policy_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/password-policy");
|
|
6
|
+
const password_policy_2 = require("./password-policy");
|
|
7
|
+
/**
|
|
8
|
+
* An `emailpass` identity is shared by all actor types: somebody invited as an
|
|
9
|
+
* Admin could first register through `/auth/customer/emailpass/register`
|
|
10
|
+
* (customer minimum, possibly 8 characters), then log in at
|
|
11
|
+
* `/auth/user/emailpass` and accept the invite with that token, which binds
|
|
12
|
+
* the weak password to an Admin. So the first Admin login of an identity that
|
|
13
|
+
* has no Admin yet (`app_metadata.user_id` unset) must meet
|
|
14
|
+
* `ADMIN_PASSWORD_POLICY`; the login of an identity that already belongs to an
|
|
15
|
+
* Admin is never checked, so older passwords keep working. An unknown address
|
|
16
|
+
* or a body without strings goes on to Medusa, which rejects it itself.
|
|
17
|
+
* Runs for POST and GET (the core handler reads the body on both) and decides
|
|
18
|
+
* on the decoded, lowercased params, like `enforcePasswordPolicy`.
|
|
19
|
+
*
|
|
20
|
+
* Remaining limit: the other direction is not closed. A customer could
|
|
21
|
+
* register through the Admin path with 15 characters and no composition rules
|
|
22
|
+
* although the shop asks for more; that only weakens their own password.
|
|
23
|
+
*/
|
|
24
|
+
const enforceAdminPasswordOnFirstLogin = async (req, _res, next) => {
|
|
25
|
+
if ((0, password_policy_2.decodedRouteParam)(req, "actor_type") !== "user" ||
|
|
26
|
+
(0, password_policy_2.decodedRouteParam)(req, "auth_provider") !== "emailpass") {
|
|
27
|
+
next();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const { email, password } = (req.body ?? {});
|
|
31
|
+
if (typeof email !== "string" || typeof password !== "string") {
|
|
32
|
+
next();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const message = (0, password_policy_1.unmetPasswordRulesMessage)(password_policy_1.ADMIN_PASSWORD_POLICY, password);
|
|
36
|
+
if (!message) {
|
|
37
|
+
next();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const auth = req.scope.resolve(utils_1.Modules.AUTH);
|
|
41
|
+
const [providerIdentity] = await auth.listProviderIdentities({ provider: "emailpass", entity_id: email }, { select: ["id", "auth_identity_id"], take: 1 });
|
|
42
|
+
if (!providerIdentity?.auth_identity_id) {
|
|
43
|
+
next();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const authIdentity = await auth.retrieveAuthIdentity(providerIdentity.auth_identity_id, { select: ["id", "app_metadata"] });
|
|
47
|
+
const userId = authIdentity.app_metadata
|
|
48
|
+
?.user_id;
|
|
49
|
+
if (typeof userId === "string" && userId) {
|
|
50
|
+
next();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
next(new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message));
|
|
54
|
+
};
|
|
55
|
+
exports.enforceAdminPasswordOnFirstLogin = enforceAdminPasswordOnFirstLogin;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tZmlyc3QtbG9naW4tcGFzc3dvcmQtcG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9hZG1pbi1maXJzdC1sb2dpbi1wYXNzd29yZC1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEscURBQWdFO0FBQ2hFLCtHQUdrRjtBQUVsRix1REFBcUQ7QUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSSxNQUFNLGdDQUFnQyxHQUFHLEtBQUssRUFDbkQsR0FBa0IsRUFDbEIsSUFBb0IsRUFDcEIsSUFBd0IsRUFDVCxFQUFFO0lBQ2pCLElBQ0UsSUFBQSxtQ0FBaUIsRUFBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEtBQUssTUFBTTtRQUMvQyxJQUFBLG1DQUFpQixFQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsS0FBSyxXQUFXLEVBQ3ZELENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQTtRQUNOLE9BQU07SUFDUixDQUFDO0lBQ0QsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUcxQyxDQUFBO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUQsSUFBSSxFQUFFLENBQUE7UUFDTixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQXlCLEVBQUMsdUNBQXFCLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDMUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsSUFBSSxFQUFFLENBQUE7UUFDTixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFxQixlQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQzFELEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQzNDLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUNoRCxDQUFBO0lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsSUFBSSxFQUFFLENBQUE7UUFDTixPQUFNO0lBQ1IsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUNsRCxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFDakMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FDbkMsQ0FBQTtJQUNELE1BQU0sTUFBTSxHQUFJLFlBQVksQ0FBQyxZQUE2QztRQUN4RSxFQUFFLE9BQU8sQ0FBQTtJQUNYLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLElBQUksRUFBRSxDQUFBO1FBQ04sT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ2hFLENBQUMsQ0FBQTtBQS9DWSxRQUFBLGdDQUFnQyxvQ0ErQzVDIn0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.answerActorTypeCasingNotFound = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const KNOWN_ACTOR_TYPES = new Set(["customer", "user"]);
|
|
6
|
+
/**
|
|
7
|
+
* Medusa's `authMethodsPerActor` is keyed by the exact actor type, but
|
|
8
|
+
* Express routes `/auth/Customer/...` to the same handlers with the actor type
|
|
9
|
+
* "Customer", which has no allowlist and so may use every provider (also
|
|
10
|
+
* `emailpass` while the shop switched it off for customers). A known actor
|
|
11
|
+
* type spelled in another letter case therefore answers 404 for every
|
|
12
|
+
* `/auth/:actor_type/:auth_provider[/...]` route. Any other value (`token`,
|
|
13
|
+
* `session`, `verification`, `mfa`, ...) passes untouched: only a value that
|
|
14
|
+
* differs from `customer` or `user` in letter case alone is refused. No
|
|
15
|
+
* `methods` on the matcher, so it runs before Medusa's own handlers.
|
|
16
|
+
*/
|
|
17
|
+
const answerActorTypeCasingNotFound = (req, _res, next) => {
|
|
18
|
+
const actorType = String(req.params?.actor_type ?? "");
|
|
19
|
+
if (KNOWN_ACTOR_TYPES.has(actorType.toLowerCase()) && !KNOWN_ACTOR_TYPES.has(actorType)) {
|
|
20
|
+
next(new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Not Found"));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
next();
|
|
24
|
+
};
|
|
25
|
+
exports.answerActorTypeCasingNotFound = answerActorTypeCasingNotFound;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLWFjdG9yLXR5cGUtY2FzaW5nLW5vdC1mb3VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvYW5zd2VyLWFjdG9yLXR5cGUtY2FzaW5nLW5vdC1mb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxxREFBdUQ7QUFFdkQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBRXZEOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLDZCQUE2QixHQUFHLENBQzNDLEdBQWtCLEVBQ2xCLElBQW9CLEVBQ3BCLElBQXdCLEVBQ2xCLEVBQUU7SUFDUixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUE7SUFDdEQsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN4RixJQUFJLENBQUMsSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBQy9ELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUE7QUFDUixDQUFDLENBQUE7QUFYWSxRQUFBLDZCQUE2QixpQ0FXekMifQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.answerCodeProviderRouteNotFound = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const customer_auth_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-auth");
|
|
6
|
+
const UNSUPPORTED_ACTIONS = new Set([
|
|
7
|
+
"register",
|
|
8
|
+
"update",
|
|
9
|
+
"reset-password",
|
|
10
|
+
"callback",
|
|
11
|
+
]);
|
|
12
|
+
/**
|
|
13
|
+
* The `email-otp` auth provider only logs in: Medusa's other
|
|
14
|
+
* `/auth/:actor_type/:auth_provider/*` routes (register, update,
|
|
15
|
+
* reset-password, callback) would only call provider methods it does not
|
|
16
|
+
* implement, and `reset-password` would even create a reset token row for a
|
|
17
|
+
* code identity before failing. Registered without `methods` on
|
|
18
|
+
* `/auth/:actor_type/:auth_provider/:action`, so it runs before the core
|
|
19
|
+
* handlers for every method. It compares the decoded params, because Express
|
|
20
|
+
* matches literal path segments against the raw path: a literal
|
|
21
|
+
* `/email-otp/` matcher would miss `/email%2Dotp/`, which the core route
|
|
22
|
+
* still decodes to `email-otp`.
|
|
23
|
+
*/
|
|
24
|
+
const answerCodeProviderRouteNotFound = (req, _res, next) => {
|
|
25
|
+
const provider = String(req.params.auth_provider ?? "").toLowerCase();
|
|
26
|
+
const action = String(req.params.action ?? "").toLowerCase();
|
|
27
|
+
if (provider === customer_auth_1.EMAIL_OTP_AUTH_PROVIDER && UNSUPPORTED_ACTIONS.has(action)) {
|
|
28
|
+
next(new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Not Found"));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
next();
|
|
32
|
+
};
|
|
33
|
+
exports.answerCodeProviderRouteNotFound = answerCodeProviderRouteNotFound;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLWNvZGUtcHJvdmlkZXItcm91dGUtbm90LWZvdW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9hbnN3ZXItY29kZS1wcm92aWRlci1yb3V0ZS1ub3QtZm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQXVEO0FBQ3ZELDJHQUFpSDtBQUVqSCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xDLFVBQVU7SUFDVixRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFVBQVU7Q0FDWCxDQUFDLENBQUE7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNJLE1BQU0sK0JBQStCLEdBQUcsQ0FDN0MsR0FBa0IsRUFDbEIsSUFBb0IsRUFDcEIsSUFBd0IsRUFDbEIsRUFBRTtJQUNSLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDNUQsSUFBSSxRQUFRLEtBQUssdUNBQXVCLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUUsSUFBSSxDQUFDLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtRQUMvRCxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksRUFBRSxDQUFBO0FBQ1IsQ0FBQyxDQUFBO0FBWlksUUFBQSwrQkFBK0IsbUNBWTNDIn0=
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rejectRegistrationForExistingCustomerAccount = exports.prepareCodeAccountPasswordResetRoute = exports.EXISTING_CUSTOMER_ACCOUNT_MESSAGE = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const customer_auth_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-auth");
|
|
6
|
+
const prepare_code_account_password_reset_1 = require("../customer-auth/application/prepare-code-account-password-reset");
|
|
7
|
+
const auth_methods_1 = require("../customer-auth/domain/auth-methods");
|
|
8
|
+
const login_code_accounts_1 = require("../customer-auth/login-code-accounts");
|
|
9
|
+
const plugin_features_1 = require("../customer-auth/plugin-features");
|
|
10
|
+
const enforcement_1 = require("../public/enforcement");
|
|
11
|
+
const password_policy_1 = require("./password-policy");
|
|
12
|
+
exports.EXISTING_CUSTOMER_ACCOUNT_MESSAGE = "Zu dieser E-Mail-Adresse gibt es bereits ein Kundenkonto. Melde dich an oder setze über „Passwort vergessen?“ ein Passwort.";
|
|
13
|
+
/** Whether the request is `<method> /auth/customer/emailpass/<action>` (decoded, any letter case). */
|
|
14
|
+
const isCustomerPasswordRoute = (req, method, action) => req.method === method &&
|
|
15
|
+
(0, password_policy_1.decodedRouteParam)(req, "actor_type") === "customer" &&
|
|
16
|
+
(0, password_policy_1.decodedRouteParam)(req, "auth_provider") === auth_methods_1.EMAIL_PASSWORD_AUTH_PROVIDER &&
|
|
17
|
+
(0, password_policy_1.decodedRouteParam)(req, "action") === action;
|
|
18
|
+
const isEmailPasswordEnabled = (container) => (0, enforcement_1.isPluginFeatureEnabled)(container, plugin_features_1.customerAuthPluginFeatures, customer_auth_1.CUSTOMER_AUTH_FEATURES.emailPassword);
|
|
19
|
+
/** Class only: the message of an error can carry the address. */
|
|
20
|
+
const warnFailSafe = (container, what, error) => {
|
|
21
|
+
try {
|
|
22
|
+
container
|
|
23
|
+
.resolve(utils_1.ContainerRegistrationKeys.LOGGER)
|
|
24
|
+
.warn(`${what} (${error instanceof Error ? error.name : "unknown error"}); the request goes on unchanged.`);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// A broken logger must not turn into a failed request.
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* `POST /auth/customer/emailpass/reset-password` for an account that so far
|
|
32
|
+
* only used codes (see `prepareCodeAccountPasswordReset`): gives it the
|
|
33
|
+
* password identity Medusa's reset flow needs and rewrites the identifier to
|
|
34
|
+
* the spelling Medusa has to look up. Only while `email_password` is on. Fail
|
|
35
|
+
* safe: whatever goes wrong here, the request continues unchanged (Medusa
|
|
36
|
+
* answers 201 for unknown identifiers anyway). No `methods` on the matcher
|
|
37
|
+
* (`/auth/:actor_type/:auth_provider/:action`), so it runs before the core
|
|
38
|
+
* validators and decides on the decoded, lowercased params.
|
|
39
|
+
*/
|
|
40
|
+
const prepareCodeAccountPasswordResetRoute = async (req, _res, next) => {
|
|
41
|
+
const body = req.body;
|
|
42
|
+
if (!isCustomerPasswordRoute(req, "POST", "reset-password") ||
|
|
43
|
+
typeof body?.identifier !== "string") {
|
|
44
|
+
next();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
if (await isEmailPasswordEnabled(req.scope)) {
|
|
49
|
+
const identifier = await (0, prepare_code_account_password_reset_1.prepareCodeAccountPasswordReset)(req.scope, body.identifier);
|
|
50
|
+
if (identifier) {
|
|
51
|
+
body.identifier = identifier;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
warnFailSafe(req.scope, "The password reset of a code account could not be prepared", error);
|
|
57
|
+
}
|
|
58
|
+
next();
|
|
59
|
+
};
|
|
60
|
+
exports.prepareCodeAccountPasswordResetRoute = prepareCodeAccountPasswordResetRoute;
|
|
61
|
+
/**
|
|
62
|
+
* `POST /auth/customer/emailpass/register` for an address that already has a
|
|
63
|
+
* customer account (a password account, or one that only used codes): 400 with
|
|
64
|
+
* a pointer to "Passwort vergessen". A new password identity beside a code
|
|
65
|
+
* account would only be a customer-less orphan Medusa cannot use (its own
|
|
66
|
+
* answer for an existing password account is the same refusal, so the
|
|
67
|
+
* existence of an account is not new information). Only while `email_password`
|
|
68
|
+
* is on; fail safe like the reset preparation.
|
|
69
|
+
*/
|
|
70
|
+
const rejectRegistrationForExistingCustomerAccount = async (req, _res, next) => {
|
|
71
|
+
const email = req.body?.email;
|
|
72
|
+
if (!isCustomerPasswordRoute(req, "POST", "register") || typeof email !== "string") {
|
|
73
|
+
next();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
let exists = false;
|
|
77
|
+
try {
|
|
78
|
+
exists =
|
|
79
|
+
(await isEmailPasswordEnabled(req.scope)) &&
|
|
80
|
+
(await (0, login_code_accounts_1.hasCustomerAccountIdentity)(req.scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION), (0, customer_auth_1.normalizeLoginEmail)(email)));
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
warnFailSafe(req.scope, "The registration could not be checked for an existing account", error);
|
|
84
|
+
}
|
|
85
|
+
if (exists) {
|
|
86
|
+
next(new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, exports.EXISTING_CUSTOMER_ACCOUNT_MESSAGE));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
next();
|
|
90
|
+
};
|
|
91
|
+
exports.rejectRegistrationForExistingCustomerAccount = rejectRegistrationForExistingCustomerAccount;
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1hY2NvdW50LXBhc3N3b3JkLXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvY29kZS1hY2NvdW50LXBhc3N3b3JkLXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxxREFBa0Y7QUFDbEYsMkdBR2dGO0FBRWhGLDBIQUFrSDtBQUNsSCx1RUFBbUY7QUFDbkYsOEVBQWlGO0FBRWpGLHNFQUE2RTtBQUM3RSx1REFBOEQ7QUFDOUQsdURBQXFEO0FBRXhDLFFBQUEsaUNBQWlDLEdBQzVDLDZIQUE2SCxDQUFBO0FBRS9ILHNHQUFzRztBQUN0RyxNQUFNLHVCQUF1QixHQUFHLENBQzlCLEdBQWtCLEVBQ2xCLE1BQWMsRUFDZCxNQUFjLEVBQ0wsRUFBRSxDQUNYLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTTtJQUNyQixJQUFBLG1DQUFpQixFQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsS0FBSyxVQUFVO0lBQ25ELElBQUEsbUNBQWlCLEVBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLDJDQUE0QjtJQUN4RSxJQUFBLG1DQUFpQixFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUE7QUFFN0MsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQTBCLEVBQW9CLEVBQUUsQ0FDOUUsSUFBQSxvQ0FBc0IsRUFDcEIsU0FBUyxFQUNULDRDQUEwQixFQUMxQixzQ0FBc0IsQ0FBQyxhQUFhLENBQ3JDLENBQUE7QUFFSCxpRUFBaUU7QUFDakUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUEwQixFQUFFLElBQVksRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUNoRixJQUFJLENBQUM7UUFDSCxTQUFTO2FBQ04sT0FBTyxDQUFTLGlDQUF5QixDQUFDLE1BQU0sQ0FBQzthQUNqRCxJQUFJLENBQ0gsR0FBRyxJQUFJLEtBQUssS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxD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
|
|
@@ -4,18 +4,26 @@ const http_1 = require("@medusajs/framework/http");
|
|
|
4
4
|
const plugin_features_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/plugin-features");
|
|
5
5
|
const documents_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/documents");
|
|
6
6
|
const email_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/email");
|
|
7
|
+
const customer_auth_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-auth");
|
|
7
8
|
const customer_verification_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-verification");
|
|
8
9
|
const files_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/files");
|
|
9
|
-
const plugin_features_2 = require("../
|
|
10
|
-
const plugin_features_3 = require("../
|
|
10
|
+
const plugin_features_2 = require("../customer-auth/plugin-features");
|
|
11
|
+
const plugin_features_3 = require("../documents/plugin-features");
|
|
12
|
+
const plugin_features_4 = require("../email/plugin-features");
|
|
11
13
|
const customer_verification_request_throttle_1 = require("./customer-verification-request-throttle");
|
|
14
|
+
const answer_code_provider_route_not_found_1 = require("./answer-code-provider-route-not-found");
|
|
15
|
+
const answer_actor_type_casing_not_found_1 = require("./answer-actor-type-casing-not-found");
|
|
16
|
+
const admin_first_login_password_policy_1 = require("./admin-first-login-password-policy");
|
|
17
|
+
const code_account_password_routes_1 = require("./code-account-password-routes");
|
|
12
18
|
const password_policy_1 = require("./password-policy");
|
|
19
|
+
const require_login_code_customer_email_1 = require("./require-login-code-customer-email");
|
|
13
20
|
const public_1 = require("../public");
|
|
14
21
|
/**
|
|
15
22
|
* Feature-toggle gate for the Documents routes (see `pluginFeatureGate`): a
|
|
16
23
|
* disabled feature answers 404 for the route and everything below it.
|
|
17
24
|
*/
|
|
18
|
-
const documentsGate = (0, public_1.pluginFeatureGate)(
|
|
25
|
+
const documentsGate = (0, public_1.pluginFeatureGate)(plugin_features_3.documentsPluginFeatures);
|
|
26
|
+
const customerAuthGate = (0, public_1.pluginFeatureGate)(plugin_features_2.customerAuthPluginFeatures);
|
|
19
27
|
// Authentication: Medusa authenticates every /admin route (actor "user";
|
|
20
28
|
// bearer, session or secret API key) before plugin middlewares run
|
|
21
29
|
// (framework 2.19.0 http/router.js), so no second `authenticate` here.
|
|
@@ -57,7 +65,7 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
57
65
|
// confirmation switch below, which belongs to `order_mails`.
|
|
58
66
|
{
|
|
59
67
|
matcher: "/admin/email",
|
|
60
|
-
middlewares: [(0, public_1.requirePluginFeature)(
|
|
68
|
+
middlewares: [(0, public_1.requirePluginFeature)(plugin_features_4.emailPluginFeatures)],
|
|
61
69
|
},
|
|
62
70
|
{
|
|
63
71
|
matcher: "/admin/email/messages",
|
|
@@ -174,7 +182,7 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
174
182
|
// see workflows/hooks/draft-order-confirmation-default.ts).
|
|
175
183
|
{
|
|
176
184
|
matcher: "/admin/draft-orders/:id/order-confirmation",
|
|
177
|
-
middlewares: [(0, public_1.requirePluginFeature)(
|
|
185
|
+
middlewares: [(0, public_1.requirePluginFeature)(plugin_features_4.emailPluginFeatures, "order_mails")],
|
|
178
186
|
},
|
|
179
187
|
{
|
|
180
188
|
matcher: "/admin/draft-orders/:id/order-confirmation",
|
|
@@ -190,7 +198,7 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
190
198
|
{
|
|
191
199
|
matcher: "/store/customer-verification",
|
|
192
200
|
middlewares: [
|
|
193
|
-
(0, public_1.requirePluginFeature)(
|
|
201
|
+
(0, public_1.requirePluginFeature)(plugin_features_4.emailPluginFeatures, "account_mails", "customer_verification"),
|
|
194
202
|
],
|
|
195
203
|
},
|
|
196
204
|
{
|
|
@@ -211,19 +219,76 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
211
219
|
customer_verification_request_throttle_1.throttleCustomerVerificationRequest,
|
|
212
220
|
],
|
|
213
221
|
},
|
|
214
|
-
//
|
|
215
|
-
//
|
|
216
|
-
//
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
|
|
222
|
+
// --- Kunden-Login ---------------------------------------------------
|
|
223
|
+
// The code request answers 404 while `email_otp` is off. The gate has no
|
|
224
|
+
// `methods`, so it runs before the method-specific entry below. Public
|
|
225
|
+
// by design (the customer has no token yet); the 60 s limit per address
|
|
226
|
+
// and the uniform 202 answer live in the use case.
|
|
227
|
+
customerAuthGate("/store/customer-auth/login-code", customer_auth_1.CUSTOMER_AUTH_FEATURES.emailOtp),
|
|
220
228
|
{
|
|
221
|
-
matcher: "/auth
|
|
222
|
-
|
|
229
|
+
matcher: "/store/customer-auth/login-code",
|
|
230
|
+
methods: ["POST"],
|
|
231
|
+
middlewares: [(0, http_1.validateAndTransformBody)(customer_auth_1.RequestLoginCodeSchema)],
|
|
232
|
+
},
|
|
233
|
+
// The password rules customers have to meet (shown by the storefront at
|
|
234
|
+
// registration and reset); 404 while `email_password` is off. Public.
|
|
235
|
+
customerAuthGate("/store/customer-auth/password-policy", customer_auth_1.CUSTOMER_AUTH_FEATURES.emailPassword),
|
|
236
|
+
// A code-login token may only create the customer of the address it was
|
|
237
|
+
// issued for (see the middleware). Medusa's own entry for this matcher
|
|
238
|
+
// runs first (core routes load before plugin routes); authentication is
|
|
239
|
+
// repeated so the check never depends on that order.
|
|
240
|
+
{
|
|
241
|
+
matcher: "/store/customers",
|
|
242
|
+
methods: ["POST"],
|
|
243
|
+
middlewares: [
|
|
244
|
+
(0, http_1.authenticate)("customer", ["session", "bearer"], {
|
|
245
|
+
allowUnregistered: true,
|
|
246
|
+
}),
|
|
247
|
+
require_login_code_customer_email_1.requireLoginCodeCustomerEmail,
|
|
248
|
+
],
|
|
249
|
+
},
|
|
250
|
+
// A known actor type in another letter case (`/auth/Customer/...`) would
|
|
251
|
+
// reach Medusa's handlers without the allowlist of `customer`: 404. No
|
|
252
|
+
// `methods` (prefix match), decided on the decoded param; `token`,
|
|
253
|
+
// `session`, `verification` and `mfa` are none of the two and pass.
|
|
254
|
+
{
|
|
255
|
+
matcher: "/auth/:actor_type/:auth_provider",
|
|
256
|
+
middlewares: [answer_actor_type_casing_not_found_1.answerActorTypeCasingNotFound],
|
|
257
|
+
},
|
|
258
|
+
// The `/auth/:actor_type/:auth_provider/:action` entry below has no
|
|
259
|
+
// `methods`, so it is an `app.use` prefix match that runs before Medusa's
|
|
260
|
+
// own handlers and validators (`validateToken` deletes the single-use
|
|
261
|
+
// reset token on the update route, so a rejected password has to be
|
|
262
|
+
// refused before it). Every middleware in it decides on the decoded,
|
|
263
|
+
// lowercased params itself: Express matches literal path segments against
|
|
264
|
+
// the raw path, so a literal `/emailpass/register` or `/email-otp/`
|
|
265
|
+
// matcher would miss `/email%70ass/register` or `/email%2Dotp/`, which the
|
|
266
|
+
// core route still decodes.
|
|
267
|
+
// - The code login provider has no register, update, reset-password or
|
|
268
|
+
// callback: those routes answer 404 for every actor type and method.
|
|
269
|
+
// - Registering a password for an address that already has a customer
|
|
270
|
+
// account is refused (see the middleware).
|
|
271
|
+
// - A password reset for an account that only used codes gets the
|
|
272
|
+
// password identity Medusa's reset flow needs.
|
|
273
|
+
// - Password policy (customers: `customer_auth` settings, Admin users:
|
|
274
|
+
// fixed 15 characters) for the registration (sign-up and Admin invite)
|
|
275
|
+
// and the password update of the reset.
|
|
276
|
+
{
|
|
277
|
+
matcher: "/auth/:actor_type/:auth_provider/:action",
|
|
278
|
+
middlewares: [
|
|
279
|
+
answer_code_provider_route_not_found_1.answerCodeProviderRouteNotFound,
|
|
280
|
+
code_account_password_routes_1.rejectRegistrationForExistingCustomerAccount,
|
|
281
|
+
code_account_password_routes_1.prepareCodeAccountPasswordResetRoute,
|
|
282
|
+
password_policy_1.enforcePasswordPolicy,
|
|
283
|
+
],
|
|
223
284
|
},
|
|
285
|
+
// First Admin login of an identity that has no Admin yet: the password
|
|
286
|
+
// must meet the Admin rules (see the middleware). Login is exact-path
|
|
287
|
+
// (`POST` and `GET`), the check runs before the core handler.
|
|
224
288
|
{
|
|
225
|
-
matcher: "/auth/:actor_type
|
|
226
|
-
|
|
289
|
+
matcher: "/auth/:actor_type/:auth_provider",
|
|
290
|
+
methods: ["POST", "GET"],
|
|
291
|
+
middlewares: [admin_first_login_password_policy_1.enforceAdminPasswordOnFirstLogin],
|
|
227
292
|
},
|
|
228
293
|
// --- Dokumente ------------------------------------------------------
|
|
229
294
|
// Feature-toggle gates (see plugin-features.ts). They cover every
|
|
@@ -320,4 +385,4 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
320
385
|
},
|
|
321
386
|
],
|
|
322
387
|
});
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBWXdFO0FBQ3hFLDJIQUFrSTtBQUNsSSwyRkFBdUg7QUFFdkgsa0VBQXNFO0FBQ3RFLDhEQUE4RDtBQUM5RCxxR0FBOEY7QUFDOUYsdURBQXlEO0FBQ3pELHNDQUFtRTtBQUVuRTs7O0dBR0c7QUFDSCxNQUFNLGFBQWEsR0FBRyxJQUFBLDBCQUFpQixFQUFDLHlDQUF1QixDQUFDLENBQUE7QUFFaEUseUVBQXlFO0FBQ3pFLG1FQUFtRTtBQUNuRSx1RUFBdUU7QUFDdkUsMkVBQTJFO0FBQzNFLDBFQUEwRTtBQUMxRSx1Q0FBdUM7QUFDdkMsa0JBQWUsSUFBQSx3QkFBaUIsRUFBQztJQUMvQixNQUFNLEVBQUU7UUFDTjtZQUNFLE9BQU8sRUFBRSx3QkFBd0I7WUFDakMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsNENBQTBCLENBQUMsQ0FBQztTQUNwRTtRQUNEO1lBQ0UsT0FBTyxFQUFFLDZDQUE2QztZQUN0RCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsd0RBQXdEO1lBQ2pFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHVDQUFxQixDQUFDLENBQUM7U0FDL0Q7UUFDRDtZQUNFLE9BQU8sRUFBRSw2REFBNkQ7WUFDdEUsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2hCLFdBQVcsRUFBRTtnQkFDWCxJQUFB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
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBS2lDO0FBQ2pDLCtHQUtrRjtBQUNsRixtR0FHNEU7QUFDNUUsMkZBWXdFO0FBQ3hFLDJHQUdnRjtBQUNoRiwySEFBa0k7QUFDbEksMkZBQXVIO0FBRXZILHNFQUE2RTtBQUM3RSxrRUFBc0U7QUFDdEUsOERBQThEO0FBQzlELHFHQUE4RjtBQUM5RixpR0FBd0Y7QUFDeEYsNkZBQW9GO0FBQ3BGLDJGQUFzRjtBQUN0RixpRkFHdUM7QUFDdkMsdURBQXlEO0FBQ3pELDJGQUFtRjtBQUNuRixzQ0FBbUU7QUFFbkU7OztHQUdHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyx5Q0FBdUIsQ0FBQyxDQUFBO0FBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBaUIsRUFBQyw0Q0FBMEIsQ0FBQyxDQUFBO0FBRXRFLHlFQUF5RTtBQUN6RSxtRUFBbUU7QUFDbkUsdUVBQXVFO0FBQ3ZFLDJFQUEyRTtBQUMzRSwwRUFBMEU7QUFDMUUsdUNBQXVDO0FBQ3ZDLGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsd0JBQXdCO1lBQ2pDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLDRDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSw2Q0FBNkM7WUFDdEQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsK0JBQXdCLEVBQUMsNENBQTBCLENBQUMsQ0FBQztTQUNwRTtRQUNEO1lBQ0UsT0FBTyxFQUFFLHdEQUF3RDtZQUNqRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENB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
|
|
@@ -1,23 +1,68 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.enforcePasswordPolicy = void 0;
|
|
3
|
+
exports.enforcePasswordPolicy = exports.passwordPolicyFor = exports.decodedRouteParam = void 0;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const password_policy_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/password-policy");
|
|
6
|
+
const customer_password_policy_1 = require("../customer-auth/customer-password-policy");
|
|
7
|
+
/** Medusa's password provider; its routes are the ones the policy guards. */
|
|
8
|
+
const EMAIL_PASSWORD_PROVIDER = "emailpass";
|
|
9
|
+
const POLICY_ACTIONS = new Set(["register", "update"]);
|
|
10
|
+
/** A route param as Express decoded it, lowercased (Express matches case-insensitively). */
|
|
11
|
+
const decodedRouteParam = (req, name) => String(req.params?.[name] ?? "").toLowerCase();
|
|
12
|
+
exports.decodedRouteParam = decodedRouteParam;
|
|
13
|
+
/**
|
|
14
|
+
* Policy of the actor: the settings-based rules for customers, the fixed
|
|
15
|
+
* Admin rules for every other actor type. A failed settings read falls back
|
|
16
|
+
* to the default policy (and is logged) instead of blocking registrations.
|
|
17
|
+
*/
|
|
18
|
+
const passwordPolicyFor = async (req) => {
|
|
19
|
+
if ((0, exports.decodedRouteParam)(req, "actor_type") !== "customer") {
|
|
20
|
+
return password_policy_1.ADMIN_PASSWORD_POLICY;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
return await (0, customer_password_policy_1.resolveCustomerPasswordPolicy)(req.scope);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
req.scope
|
|
27
|
+
.resolve(utils_1.ContainerRegistrationKeys.LOGGER)
|
|
28
|
+
.warn(`Customer password policy could not be read, using the default: ${error instanceof Error ? error.message : String(error)}`);
|
|
29
|
+
return password_policy_1.DEFAULT_CUSTOMER_PASSWORD_POLICY;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
exports.passwordPolicyFor = passwordPolicyFor;
|
|
6
33
|
/**
|
|
7
34
|
* Runs before Medusa's `emailpass` register and password-update routes (every
|
|
8
|
-
* actor type
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
35
|
+
* actor type) and rejects a password that breaks the actor's rules with 400
|
|
36
|
+
* `invalid_data` and one message naming the unmet rules. Customers follow the
|
|
37
|
+
* `customer_auth` settings; every other actor (Admin users) the fixed
|
|
38
|
+
* `ADMIN_PASSWORD_POLICY`. A body without a string password goes on to Medusa
|
|
39
|
+
* unchanged, which answers it itself (register) or changes nothing (update).
|
|
40
|
+
* Login is never checked, so older passwords keep working.
|
|
41
|
+
*
|
|
42
|
+
* Registered without `methods` on `/auth/:actor_type/:auth_provider/:action`
|
|
43
|
+
* and deciding on the decoded, lowercased params: Express matches literal path
|
|
44
|
+
* segments against the raw path, so literal `/emailpass/register` matchers
|
|
45
|
+
* would miss `/email%70ass/register`, which Medusa's core route still decodes
|
|
46
|
+
* to `emailpass` (and `Customer` is an actor type of its own to Express, but
|
|
47
|
+
* not to this policy).
|
|
13
48
|
*/
|
|
14
|
-
const enforcePasswordPolicy = (req, _res, next) => {
|
|
49
|
+
const enforcePasswordPolicy = async (req, _res, next) => {
|
|
50
|
+
if ((0, exports.decodedRouteParam)(req, "auth_provider") !== EMAIL_PASSWORD_PROVIDER ||
|
|
51
|
+
!POLICY_ACTIONS.has((0, exports.decodedRouteParam)(req, "action"))) {
|
|
52
|
+
next();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
15
55
|
const password = req.body?.password;
|
|
16
|
-
if (typeof password
|
|
17
|
-
next(
|
|
56
|
+
if (typeof password !== "string") {
|
|
57
|
+
next();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const message = (0, password_policy_1.unmetPasswordRulesMessage)(await (0, exports.passwordPolicyFor)(req), password);
|
|
61
|
+
if (message) {
|
|
62
|
+
next(new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message));
|
|
18
63
|
return;
|
|
19
64
|
}
|
|
20
65
|
next();
|
|
21
66
|
};
|
|
22
67
|
exports.enforcePasswordPolicy = enforcePasswordPolicy;
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtcG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9wYXNzd29yZC1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQWtGO0FBQ2xGLCtHQUtrRjtBQUVsRix3RkFBeUY7QUFFekYsNkVBQTZFO0FBQzdFLE1BQU0sdUJBQXVCLEdBQUcsV0FBVyxDQUFBO0FBQzNDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFFdEQsNEZBQTRGO0FBQ3JGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFrQixFQUFFLElBQVksRUFBVSxFQUFFLENBQzVFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7QUFEbkMsUUFBQSxpQkFBaUIscUJBQ2tCO0FBRWhEOzs7O0dBSUc7QUFDSSxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFDcEMsR0FBa0IsRUFDZSxFQUFFO0lBQ25DLElBQUksSUFBQSx5QkFBaUIsRUFBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDeEQsT0FBTyx1Q0FBcUIsQ0FBQTtJQUM5QixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLElBQUEsd0RBQTZCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLEtBQUs7YUFDTixPQUFPLENBQ04saUNBQXlCLENBQUMsTUFBTSxDQUNqQzthQUNBLElBQUksQ0FDSCxrRUFDRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2RCxFQUFFLENBQ0gsQ0FBQTtRQUNILE9BQU8sa0RBQWdDLENBQUE7SUFDekMsQ0FBQztBQUNILENBQUMsQ0FBQTtBQXBCWSxRQUFBLGlCQUFpQixxQkFvQjdCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0ksTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQ3hDLEdBQWtCLEVBQ2xCLElBQW9CLEVBQ3BCLElBQXdCLEVBQ1QsRUFBRTtJQUNqQixJQUNFLElBQUEseUJBQWlCLEVBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLHVCQUF1QjtRQUNuRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBQSx5QkFBaUIsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFDckQsQ0FBQztRQUNELElBQUksRUFBRSxDQUFBO1FBQ04sT0FBTTtJQUNSLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBSSxHQUFHLENBQUMsSUFBMkMsRUFBRSxRQUFRLENBQUE7SUFDM0UsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEVBQUUsQ0FBQTtRQUNOLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSwyQ0FBeUIsRUFDdkMsTUFBTSxJQUFBLHlCQUFpQixFQUFDLEdBQUcsQ0FBQyxFQUM1QixRQUFRLENBQ1QsQ0FBQTtJQUNELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQzlELE9BQU07SUFDUixDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUE7QUFDUixDQUFDLENBQUE7QUEzQlksUUFBQSxxQkFBcUIseUJBMkJqQyJ9
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireLoginCodeCustomerEmail = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const customer_auth_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-auth");
|
|
6
|
+
const MISMATCH_MESSAGE = "Die E-Mail-Adresse des Kontos muss der Adresse entsprechen, für die der Anmeldecode angefordert wurde.";
|
|
7
|
+
/**
|
|
8
|
+
* `POST /store/customers` with a code-login token: the customer's e-mail
|
|
9
|
+
* address must be the address the code was sent to. Medusa takes the address
|
|
10
|
+
* from the request body unchecked, so without this a token obtained for
|
|
11
|
+
* `attacker@example.com` could create a customer for `victim@example.com`,
|
|
12
|
+
* which the victim's later code login would then be linked to. Other tokens
|
|
13
|
+
* (password login) are not affected. The address is read from the validated
|
|
14
|
+
* body when the core validator already ran, else from the raw body.
|
|
15
|
+
*/
|
|
16
|
+
const requireLoginCodeCustomerEmail = async (req, _res, next) => {
|
|
17
|
+
const authContext = req.auth_context;
|
|
18
|
+
if (authContext?.auth_provider !== customer_auth_1.EMAIL_OTP_AUTH_PROVIDER) {
|
|
19
|
+
return next();
|
|
20
|
+
}
|
|
21
|
+
const body = req.validatedBody ?? req.body;
|
|
22
|
+
const email = typeof body === "object" && body !== null
|
|
23
|
+
? body.email
|
|
24
|
+
: undefined;
|
|
25
|
+
const auth = req.scope.resolve(utils_1.Modules.AUTH);
|
|
26
|
+
const [providerIdentity] = authContext.auth_identity_id
|
|
27
|
+
? await auth.listProviderIdentities({
|
|
28
|
+
auth_identity_id: authContext.auth_identity_id,
|
|
29
|
+
provider: customer_auth_1.EMAIL_OTP_AUTH_PROVIDER,
|
|
30
|
+
}, { select: ["id", "entity_id"], take: 1 })
|
|
31
|
+
: [];
|
|
32
|
+
if (typeof email !== "string" ||
|
|
33
|
+
!providerIdentity ||
|
|
34
|
+
(0, customer_auth_1.normalizeLoginEmail)(email) !== providerIdentity.entity_id) {
|
|
35
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, MISMATCH_MESSAGE);
|
|
36
|
+
}
|
|
37
|
+
next();
|
|
38
|
+
};
|
|
39
|
+
exports.requireLoginCodeCustomerEmail = requireLoginCodeCustomerEmail;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZS1sb2dpbi1jb2RlLWN1c3RvbWVyLWVtYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yZXF1aXJlLWxvZ2luLWNvZGUtY3VzdG9tZXItZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEscURBQWdFO0FBQ2hFLDJHQUdnRjtBQUVoRixNQUFNLGdCQUFnQixHQUNwQix3R0FBd0csQ0FBQTtBQUUxRzs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sNkJBQTZCLEdBQUcsS0FBSyxFQUNoRCxHQUErQixFQUMvQixJQUFvQixFQUNwQixJQUF3QixFQUNULEVBQUU7SUFDakIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQTtJQUNwQyxJQUFJLFdBQVcsRUFBRSxhQUFhLEtBQUssdUNBQXVCLEVBQUUsQ0FBQztRQUMzRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFJLEdBQW1DLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUE7SUFDM0UsTUFBTSxLQUFLLEdBQ1QsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJO1FBQ3ZDLENBQUMsQ0FBRSxJQUE0QixDQUFDLEtBQUs7UUFDckMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNmLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFxQixlQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsV0FBVyxDQUFDLGdCQUFnQjtRQUNyRCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQy9CO1lBQ0UsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjtZQUM5QyxRQUFRLEVBQUUsdUNBQXVCO1NBQ2xDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUN6QztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFTixJQUNFLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsQ0FBQyxnQkFBZ0I7UUFDakIsSUFBQSxtQ0FBbUIsRUFBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQ3pELENBQUM7UUFDRCxNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUE7QUFDUixDQUFDLENBQUE7QUFsQ1ksUUFBQSw2QkFBNkIsaUNBa0N6QyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const request_login_code_1 = require("../../../../customer-auth/application/request-login-code");
|
|
5
|
+
/**
|
|
6
|
+
* Always 202 `{ accepted: true }`, whether or not a code was sent (new,
|
|
7
|
+
* existing, ambiguous or too recently asked address). The answer goes out
|
|
8
|
+
* before any lookup, so every address takes equally long; the work runs
|
|
9
|
+
* detached and logs its own failures (it never rejects). 404 while the
|
|
10
|
+
* `email_otp` feature is off (gate in `api/middlewares.ts`).
|
|
11
|
+
*/
|
|
12
|
+
const POST = async (req, res) => {
|
|
13
|
+
res.status(202).json({ accepted: true });
|
|
14
|
+
void (0, request_login_code_1.requestLoginCode)(req.scope, req.validatedBody.email);
|
|
15
|
+
};
|
|
16
|
+
exports.POST = POST;
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVyLWF1dGgvbG9naW4tY29kZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxpR0FBMkY7QUFFM0Y7Ozs7OztHQU1HO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUFvQyxFQUNwQyxHQUE2QyxFQUM3QyxFQUFFO0lBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN4QyxLQUFLLElBQUEscUNBQWdCLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzNELENBQUMsQ0FBQTtBQU5ZLFFBQUEsSUFBSSxRQU1oQiJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const customer_auth_1 = require("@hartl-services/medusa-food-supplements-contracts/schemas/customer-auth");
|
|
5
|
+
const customer_password_policy_1 = require("../../../../customer-auth/customer-password-policy");
|
|
6
|
+
const wire_response_1 = require("../../../../shared/lib/wire-response");
|
|
7
|
+
/**
|
|
8
|
+
* The password rules customers have to meet at registration and password
|
|
9
|
+
* reset, so the storefront can show them. Public (publishable key only).
|
|
10
|
+
* 404 while the `email_password` feature is off (gate in
|
|
11
|
+
* `api/middlewares.ts`).
|
|
12
|
+
*/
|
|
13
|
+
const GET = async (req, res) => {
|
|
14
|
+
res.json((0, wire_response_1.toWireResponse)(customer_auth_1.PasswordPolicyResponseSchema, {
|
|
15
|
+
password_policy: await (0, customer_password_policy_1.resolveCustomerPasswordPolicy)(req.scope),
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
|
+
exports.GET = GET;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVyLWF1dGgvcGFzc3dvcmQtcG9saWN5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJHQUFzSDtBQUd0SCxpR0FBa0c7QUFDbEcsd0VBQXFFO0FBRXJFOzs7OztHQUtHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQixFQUNsQixHQUEyQyxFQUMzQyxFQUFFO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FDTixJQUFBLDhCQUFjLEVBQUMsNENBQTRCLEVBQUU7UUFDM0MsZUFBZSxFQUFFLE1BQU0sSUFBQSx3REFBNkIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0tBQ2hFLENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBVFksUUFBQSxHQUFHLE9BU2YifQ==
|