strapi-identity 0.1.2 → 0.3.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.
Files changed (88) hide show
  1. package/README.md +2 -1
  2. package/dist/admin/{AdminReset-H453s-DE.mjs → AdminReset-CCGgw-0k.mjs} +2 -2
  3. package/dist/admin/{AdminReset-C0QibZXW.js → AdminReset-QClQP2Il.js} +2 -2
  4. package/dist/admin/{ProfileToggle-BFmIWCrN.js → ProfileToggle-H31GHNDA.js} +299 -39
  5. package/dist/admin/{ProfileToggle-DQeXCx34.mjs → ProfileToggle-gPuH6dGP.mjs} +299 -39
  6. package/dist/admin/{SettingsPage-OwMik_IK.mjs → SettingsPage-DgPikS3m.mjs} +344 -102
  7. package/dist/admin/{SettingsPage-DyF7YbsX.js → SettingsPage-DulEjadb.js} +343 -101
  8. package/dist/admin/{ar-i2eiMZkz.js → ar-BYnI7Tsa.js} +36 -23
  9. package/dist/admin/{ar-BXaam37U.mjs → ar-DwZqj0qM.mjs} +36 -23
  10. package/dist/admin/{ca-DZ9DbEcQ.mjs → ca-aKVVc8iQ.mjs} +36 -23
  11. package/dist/admin/{ca-BVpGzY8r.js → ca-sBRHuaFU.js} +36 -23
  12. package/dist/admin/{cs-Gok16KLy.mjs → cs--prflMHS.mjs} +36 -23
  13. package/dist/admin/{cs-_PZVkwt0.js → cs-gU7KP3Lx.js} +36 -23
  14. package/dist/admin/de-BT25lv_6.mjs +49 -0
  15. package/dist/admin/de-CrlCAUuf.js +49 -0
  16. package/dist/admin/{dk-B7EOsAdU.js → dk-BNC3WUzY.js} +36 -23
  17. package/dist/admin/{dk-CI64Xmli.mjs → dk-Ck3AQYU7.mjs} +36 -23
  18. package/dist/admin/{en-B_vJwdfS.mjs → en-9qzlpde0.mjs} +36 -23
  19. package/dist/admin/{en-D4KP9t1Y.js → en-DBj0AD5g.js} +36 -23
  20. package/dist/admin/{es-CHwF7YK-.js → es-D5Sn41_H.js} +36 -23
  21. package/dist/admin/{es-CqJcXo4j.mjs → es-lh6XoPb7.mjs} +36 -23
  22. package/dist/admin/{eu-D-snytN8.mjs → eu-Cuz6ijBX.mjs} +36 -23
  23. package/dist/admin/{eu-DvdbwE5E.js → eu-Qr3RvDPW.js} +36 -23
  24. package/dist/admin/fr-C4pmkPYn.js +49 -0
  25. package/dist/admin/fr-ChlDcZsG.mjs +49 -0
  26. package/dist/admin/{gu-3wJbbAmw.mjs → gu-B6zyD1bW.mjs} +36 -23
  27. package/dist/admin/{gu-D2LgVfMp.js → gu-BMZL76zM.js} +36 -23
  28. package/dist/admin/{he-Bjv7eygt.mjs → he-C5V-qZCX.mjs} +36 -23
  29. package/dist/admin/{he-DnhYpbvN.js → he-H6iBa45A.js} +36 -23
  30. package/dist/admin/{hi-DDD2E3A3.js → hi-Be8rPk7I.js} +36 -23
  31. package/dist/admin/{hi-CNiDezU7.mjs → hi-czhOWo6-.mjs} +36 -23
  32. package/dist/admin/{hu-C1_YkZHU.js → hu-DKp6kOmc.js} +36 -23
  33. package/dist/admin/{hu-aLaIWmGw.mjs → hu-NbZ3aiYV.mjs} +36 -23
  34. package/dist/admin/{id-u3wVE6Rv.js → id-DO0bwFgY.js} +36 -23
  35. package/dist/admin/{id-C8WRgGm1.mjs → id-NH9PvcR5.mjs} +36 -23
  36. package/dist/admin/{index-BXZI8nMZ.js → index-C9K2h5UC.js} +65 -12
  37. package/dist/admin/{index-D45I6rWF.mjs → index-C_4USMnn.mjs} +65 -12
  38. package/dist/admin/index.js +1 -1
  39. package/dist/admin/index.mjs +1 -1
  40. package/dist/admin/{it-CjoRoJj1.mjs → it-Cmrey6tg.mjs} +36 -23
  41. package/dist/admin/{it-CDw6dG9Z.js → it-Df6-7-M7.js} +36 -23
  42. package/dist/admin/{ja-CewucIUY.mjs → ja-DH3KMqOL.mjs} +36 -23
  43. package/dist/admin/{ja-CbMXy2ym.js → ja-HuAq9ZwT.js} +36 -23
  44. package/dist/admin/{ko-D-kAxDtd.mjs → ko-DPN28RE8.mjs} +36 -23
  45. package/dist/admin/{ko-BEtJPpfJ.js → ko-S9k8KA8K.js} +36 -23
  46. package/dist/admin/{ml-0fR2_MmA.js → ml-Bh9GGqcW.js} +36 -23
  47. package/dist/admin/{ml-DR3AaofF.mjs → ml-MsHNacm6.mjs} +36 -23
  48. package/dist/admin/{ms-COHLS5e5.mjs → ms-TjHAaxTd.mjs} +36 -23
  49. package/dist/admin/{ms-DLvuGSlk.js → ms-hO5YeEg4.js} +36 -23
  50. package/dist/admin/{nl-wj6kn642.js → nl-BF98NBwL.js} +36 -23
  51. package/dist/admin/{nl-DVtHsM2H.mjs → nl-BLILZU8-.mjs} +36 -23
  52. package/dist/admin/{no-D_0yjyCy.mjs → no-BtVZ-siy.mjs} +36 -23
  53. package/dist/admin/{no-DVBgWt8q.js → no-bl1OXlfa.js} +36 -23
  54. package/dist/admin/{pl-C3GNxjVX.mjs → pl-DCSB6LwZ.mjs} +36 -23
  55. package/dist/admin/{pl-B2ghisbC.js → pl-DCnOWIDw.js} +36 -23
  56. package/dist/admin/{pt-BR-BbKV8YoX.mjs → pt-BR-CeLqmj88.mjs} +36 -23
  57. package/dist/admin/{pt-BR-CfgNaB1-.js → pt-BR-D2_UrxTp.js} +36 -23
  58. package/dist/admin/{pt-DKe8rRWa.js → pt-DIu8RT_X.js} +36 -23
  59. package/dist/admin/{pt-z4K3cCjf.mjs → pt-fgjdOyW5.mjs} +36 -23
  60. package/dist/admin/{ru-C85izLFa.mjs → ru-B_hlpAyP.mjs} +36 -23
  61. package/dist/admin/{ru-BFSm68HC.js → ru-BccMCf0l.js} +36 -23
  62. package/dist/admin/{sa-B1XoTTrE.mjs → sa-BtuJ_I1t.mjs} +36 -23
  63. package/dist/admin/{sa-BOPaqylt.js → sa-D3A-fo85.js} +36 -23
  64. package/dist/admin/{sk-C48lUPuC.mjs → sk-mmuTFlCK.mjs} +36 -23
  65. package/dist/admin/{sk-Dd-S1612.js → sk-uSLC6KhO.js} +36 -23
  66. package/dist/admin/{sv-BLma_kJl.mjs → sv-BlaHc5ax.mjs} +36 -23
  67. package/dist/admin/{sv-lg64Cw78.js → sv-CuKk5tE-.js} +36 -23
  68. package/dist/admin/{th-DPbm5NrX.js → th-Bv3NKkYO.js} +36 -23
  69. package/dist/admin/{th-BJEu5n7q.mjs → th-BwyhFaeE.mjs} +36 -23
  70. package/dist/admin/{tokenHelpers-jtoRu0q5.js → tokenHelpers-B54WRTn1.js} +4 -10
  71. package/dist/admin/{tokenHelpers-DagDzpso.mjs → tokenHelpers-CKVyT1sz.mjs} +4 -10
  72. package/dist/admin/{tr-DkIUODKq.mjs → tr-BLocNlbZ.mjs} +36 -23
  73. package/dist/admin/{tr-Bm1QZr4v.js → tr-Bmvs-Hx-.js} +36 -23
  74. package/dist/admin/{uk-FARzIGx4.js → uk-BDxn-EZU.js} +36 -23
  75. package/dist/admin/{uk-D7ArtSe3.mjs → uk-CyZ10xtq.mjs} +36 -23
  76. package/dist/admin/{vi-DS0yslPP.mjs → vi-Bx_UJ8up.mjs} +36 -23
  77. package/dist/admin/{vi-Bi9B6eTY.js → vi-F_mqQCme.js} +36 -23
  78. package/dist/admin/{zh-DkEx28ZA.js → zh-CFZJPG5N.js} +36 -23
  79. package/dist/admin/{zh-DwCvIPSz.mjs → zh-CjJdRa3l.mjs} +36 -23
  80. package/dist/admin/{zh-Hans-BwwKCR6_.js → zh-Hans-4BhSwSQw.js} +36 -23
  81. package/dist/admin/{zh-Hans-DP2xZyda.mjs → zh-Hans-s7G2GUHU.mjs} +36 -23
  82. package/dist/server/index.js +487 -50
  83. package/dist/server/index.mjs +487 -50
  84. package/package.json +5 -4
  85. package/dist/admin/de-BuYn1AYX.mjs +0 -26
  86. package/dist/admin/de-GItli7en.js +0 -26
  87. package/dist/admin/fr-Bt6sS5GX.mjs +0 -26
  88. package/dist/admin/fr-CbCW6hVD.js +0 -26
@@ -2,10 +2,10 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { useRef, useState, useEffect } from "react";
3
3
  import { W as WarningAlert } from "./WarningAlert-VU011LVF.mjs";
4
4
  import { useNotification, Page, Layouts } from "@strapi/strapi/admin";
5
- import { Button, Flex, Typography, Grid, Field, Toggle, TextInput } from "@strapi/design-system";
5
+ import { Button, Flex, Typography, Grid, Field, Toggle, TextInput, Textarea } from "@strapi/design-system";
6
6
  import { Check } from "@strapi/icons";
7
- import { g as getTranslation } from "./index-D45I6rWF.mjs";
8
- import { g as getToken } from "./tokenHelpers-DagDzpso.mjs";
7
+ import { g as getTranslation } from "./index-C_4USMnn.mjs";
8
+ import { g as getToken } from "./tokenHelpers-CKVyT1sz.mjs";
9
9
  import { useIntl } from "react-intl";
10
10
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
11
11
  var lodash$1 = { exports: {} };
@@ -25,7 +25,7 @@ function requireLodash() {
25
25
  (function(module, exports$1) {
26
26
  (function() {
27
27
  var undefined$1;
28
- var VERSION = "4.17.21";
28
+ var VERSION = "4.17.23";
29
29
  var LARGE_ARRAY_SIZE = 200;
30
30
  var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
31
31
  var HASH_UNDEFINED = "__lodash_hash_undefined__";
@@ -1953,8 +1953,28 @@ function requireLodash() {
1953
1953
  }
1954
1954
  function baseUnset(object, path) {
1955
1955
  path = castPath(path, object);
1956
- object = parent(object, path);
1957
- return object == null || delete object[toKey(last(path))];
1956
+ var index = -1, length = path.length;
1957
+ if (!length) {
1958
+ return true;
1959
+ }
1960
+ var isRootPrimitive = object == null || typeof object !== "object" && typeof object !== "function";
1961
+ while (++index < length) {
1962
+ var key = path[index];
1963
+ if (typeof key !== "string") {
1964
+ continue;
1965
+ }
1966
+ if (key === "__proto__" && !hasOwnProperty.call(object, "__proto__")) {
1967
+ return false;
1968
+ }
1969
+ if (key === "constructor" && index + 1 < length && typeof path[index + 1] === "string" && path[index + 1] === "prototype") {
1970
+ if (isRootPrimitive && index === 0) {
1971
+ continue;
1972
+ }
1973
+ return false;
1974
+ }
1975
+ }
1976
+ var obj = parent(object, path);
1977
+ return obj == null || delete obj[toKey(last(path))];
1958
1978
  }
1959
1979
  function baseUpdate(object, path, updater, customizer) {
1960
1980
  return baseSet(object, path, updater(baseGet(object, path)), customizer);
@@ -5496,12 +5516,76 @@ function requireLodash() {
5496
5516
  return lodash$1.exports;
5497
5517
  }
5498
5518
  var lodashExports = requireLodash();
5499
- const defaultConfig = { enabled: false, enforce: false, issuer: "" };
5519
+ const defaultConfig = {
5520
+ enabled: false,
5521
+ enforce: false,
5522
+ issuer: "Strapi",
5523
+ email_enabled: false,
5524
+ from_email: "",
5525
+ from_name: "",
5526
+ response_email: "",
5527
+ subject: "Your One-Time Password",
5528
+ text: "Your one-time password is: <%= OTP %>",
5529
+ message: `<div style="margin: 0; padding: 0;">
5530
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#f9f9f9">
5531
+ <tr>
5532
+ <td align="center" style="padding: 40px 10px;">
5533
+ <table border="0" cellpadding="0" cellspacing="0" width="600" bgcolor="#ffffff" style="border: 1px solid #dddddd;">
5534
+ <tr>
5535
+ <td align="center" style="padding: 40px 40px 20px 40px;">
5536
+ <font face="Arial, sans-serif" size="5" color="#333333">
5537
+ <strong>Verify Your Account</strong>
5538
+ </font>
5539
+ </td>
5540
+ </tr>
5541
+ <tr>
5542
+ <td align="center" style="padding: 0 40px 20px 40px;">
5543
+ <font face="Arial, sans-serif" size="3" color="#555555" style="line-height: 24px;">
5544
+ Please use the following one-time password to complete your registration. This code will expire in 10 minutes.
5545
+ </font>
5546
+ </td>
5547
+ </tr>
5548
+ <tr>
5549
+ <td align="center" style="padding: 20px 40px;">
5550
+ <table border="0" cellpadding="0" cellspacing="0">
5551
+ <tr>
5552
+ <td align="center" bgcolor="#f4f4f4" style="padding: 20px 30px; font-family: Courier, monospace; font-size: 36px; color: #2d3436;">
5553
+ <strong><%= OTP %></strong>
5554
+ </td>
5555
+ </tr>
5556
+ </table>
5557
+ </td>
5558
+ </tr>
5559
+ <tr>
5560
+ <td align="center" style="padding: 20px 40px 40px 40px;">
5561
+ <font face="Arial, sans-serif" size="2" color="#888888">
5562
+ If you did not request this code, please ignore this email.
5563
+ </font>
5564
+ </td>
5565
+ </tr>
5566
+ </table>
5567
+ <table border="0" cellpadding="0" cellspacing="0" width="600">
5568
+ <tr>
5569
+ <td align="center" style="padding: 20px;">
5570
+ <font face="Arial, sans-serif" size="1" color="#aaaaaa">
5571
+ &copy; <%= YEAR %> Your Company Name
5572
+ </font>
5573
+ </td>
5574
+ </tr>
5575
+ </table>
5576
+ </td>
5577
+ </tr>
5578
+ </table>
5579
+ </div>`
5580
+ };
5500
5581
  const getConfigFromForm = (formData) => {
5501
5582
  return Array.from(formData.entries()).reduce(
5502
5583
  (acc, [key, value]) => {
5503
- if (key === "enabled" || key === "enforce") acc[key] = value === "on";
5504
- else if (key === "issuer") acc[key] = String(value);
5584
+ if (key === "enabled" || key === "enforce" || key === "email_enabled") {
5585
+ acc[key] = value === "on";
5586
+ } else {
5587
+ acc[key] = String(value);
5588
+ }
5505
5589
  return acc;
5506
5590
  },
5507
5591
  Object.assign({}, defaultConfig)
@@ -5512,22 +5596,30 @@ function SettingsPage() {
5512
5596
  const { formatMessage } = useIntl();
5513
5597
  const { toggleNotification } = useNotification();
5514
5598
  const [showWarning, setShowWarning] = useState(false);
5599
+ const [showEmailWarning, setShowEmailWarning] = useState(false);
5515
5600
  const [canSave, setCanSave] = useState(false);
5516
5601
  const [isSaving, setSaving] = useState(false);
5517
5602
  const [isLoading, setLoading] = useState(true);
5518
5603
  const [initialConfig, setInitialConfig] = useState(null);
5519
5604
  const [enabled, setEnabled] = useState(false);
5605
+ const [emailEnabled, setEmailEnabled] = useState(false);
5520
5606
  const [enforce, setEnforce] = useState(false);
5521
5607
  const handleSubmit = async (event, confirmed) => {
5522
5608
  event?.preventDefault?.();
5523
5609
  setSaving(true);
5524
5610
  const formData = new FormData(event.currentTarget);
5525
5611
  const values = getConfigFromForm(formData);
5612
+ console.log(formData, values);
5526
5613
  if (initialConfig?.enabled && !values.enabled && !confirmed) {
5527
5614
  setShowWarning(true);
5528
5615
  setSaving(false);
5529
5616
  return;
5530
5617
  }
5618
+ if (initialConfig?.email_enabled && !values.email_enabled && !confirmed) {
5619
+ setShowEmailWarning(true);
5620
+ setSaving(false);
5621
+ return;
5622
+ }
5531
5623
  try {
5532
5624
  const token = getToken();
5533
5625
  const response = await fetch("/strapi-identity/config", {
@@ -5569,7 +5661,7 @@ function SettingsPage() {
5569
5661
  (async () => {
5570
5662
  try {
5571
5663
  const response = await fetch("/strapi-identity/config", {
5572
- headers: { Authorization: `Bearer ${token}` },
5664
+ headers: { "Content-Type": "application/json", authorization: `Bearer ${token}` },
5573
5665
  signal: ac.signal
5574
5666
  });
5575
5667
  const json = await response.json();
@@ -5578,6 +5670,7 @@ function SettingsPage() {
5578
5670
  if (error) throw new Error(error);
5579
5671
  setInitialConfig(data);
5580
5672
  setEnabled(data.enabled);
5673
+ setEmailEnabled(data.email_enabled);
5581
5674
  setEnforce(data.enforce);
5582
5675
  } catch (error) {
5583
5676
  console.error("Error fetching config:", error);
@@ -5614,74 +5707,155 @@ function SettingsPage() {
5614
5707
  primaryAction: /* @__PURE__ */ jsx(Button, { disabled: !canSave, loading: isSaving, type: "submit", startIcon: /* @__PURE__ */ jsx(Check, {}), children: formatMessage({ id: "global.save", defaultMessage: "Save" }) })
5615
5708
  }
5616
5709
  ),
5617
- /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: /* @__PURE__ */ jsxs(
5618
- Flex,
5619
- {
5620
- direction: "column",
5621
- alignItems: "stretch",
5622
- gap: 4,
5623
- hasRadius: true,
5624
- background: "neutral0",
5625
- shadow: "tableShadow",
5626
- paddingTop: 6,
5627
- paddingBottom: 6,
5628
- paddingRight: 7,
5629
- paddingLeft: 7,
5630
- children: [
5631
- /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 1, children: /* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
5632
- id: getTranslation("profile.title"),
5633
- defaultMessage: "Two-Factor Authentication"
5634
- }) }) }),
5635
- /* @__PURE__ */ jsxs(Grid.Root, { gap: 5, tag: "dl", children: [
5636
- /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5710
+ /* @__PURE__ */ jsx(Flex, { direction: "column", gap: 6, children: /* @__PURE__ */ jsx(Layouts.Content, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: [
5711
+ /* @__PURE__ */ jsxs(
5712
+ Flex,
5713
+ {
5714
+ direction: "column",
5715
+ alignItems: "stretch",
5716
+ gap: 4,
5717
+ hasRadius: true,
5718
+ background: "neutral0",
5719
+ shadow: "tableShadow",
5720
+ paddingTop: 6,
5721
+ paddingBottom: 6,
5722
+ paddingRight: 7,
5723
+ paddingLeft: 7,
5724
+ children: [
5725
+ /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 1, children: /* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
5726
+ id: getTranslation("profile.title"),
5727
+ defaultMessage: "Two-Factor Authentication"
5728
+ }) }) }),
5729
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 5, tag: "dl", children: [
5730
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5731
+ Field.Root,
5732
+ {
5733
+ hint: formatMessage({
5734
+ id: getTranslation("settings.enabled_hint"),
5735
+ defaultMessage: "Enable or disable Two-Factor Authentication for all users."
5736
+ }),
5737
+ children: [
5738
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({ id: "global.enabled", defaultMessage: "Enabled" }) }),
5739
+ /* @__PURE__ */ jsx(
5740
+ Toggle,
5741
+ {
5742
+ name: "enabled",
5743
+ checked: enabled,
5744
+ onChange: ({ target }) => setEnabled(target.checked),
5745
+ offLabel: formatMessage({
5746
+ id: "app.components.ToggleCheckbox.off-label",
5747
+ defaultMessage: "False"
5748
+ }),
5749
+ onLabel: formatMessage({
5750
+ id: "app.components.ToggleCheckbox.on-label",
5751
+ defaultMessage: "True"
5752
+ })
5753
+ }
5754
+ ),
5755
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5756
+ /* @__PURE__ */ jsx(Field.Error, {})
5757
+ ]
5758
+ }
5759
+ ) }),
5760
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5761
+ Field.Root,
5762
+ {
5763
+ hint: formatMessage({
5764
+ id: getTranslation("settings.enforce_hint"),
5765
+ defaultMessage: "Enforce Multi-Factor Authentication for all users. If enabled, users will be required to set up MFA on their next login."
5766
+ }),
5767
+ children: [
5768
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5769
+ id: getTranslation("settings.enforce"),
5770
+ defaultMessage: "Enforce MFA"
5771
+ }) }),
5772
+ /* @__PURE__ */ jsx(
5773
+ Toggle,
5774
+ {
5775
+ name: "enforce",
5776
+ disabled: true,
5777
+ checked: enforce,
5778
+ onChange: ({ target }) => setEnforce(target.checked),
5779
+ offLabel: formatMessage({
5780
+ id: "app.components.ToggleCheckbox.off-label",
5781
+ defaultMessage: "False"
5782
+ }),
5783
+ onLabel: formatMessage({
5784
+ id: "app.components.ToggleCheckbox.on-label",
5785
+ defaultMessage: "True"
5786
+ })
5787
+ }
5788
+ ),
5789
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5790
+ /* @__PURE__ */ jsx(Field.Error, {})
5791
+ ]
5792
+ }
5793
+ ) }),
5794
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5795
+ Field.Root,
5796
+ {
5797
+ hint: formatMessage({
5798
+ id: getTranslation("settings.issuer_hint"),
5799
+ defaultMessage: "Displayed in the MFA app"
5800
+ }),
5801
+ children: [
5802
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5803
+ id: getTranslation("settings.issuer"),
5804
+ defaultMessage: "Issuer Name"
5805
+ }) }),
5806
+ /* @__PURE__ */ jsx(
5807
+ TextInput,
5808
+ {
5809
+ name: "issuer",
5810
+ defaultValue: initialConfig?.issuer,
5811
+ placeholder: formatMessage({
5812
+ id: getTranslation("settings.issuer"),
5813
+ defaultMessage: "Issuer Name"
5814
+ })
5815
+ }
5816
+ ),
5817
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5818
+ /* @__PURE__ */ jsx(Field.Error, {})
5819
+ ]
5820
+ }
5821
+ ) })
5822
+ ] })
5823
+ ]
5824
+ }
5825
+ ),
5826
+ /* @__PURE__ */ jsxs(
5827
+ Flex,
5828
+ {
5829
+ direction: "column",
5830
+ alignItems: "stretch",
5831
+ gap: 4,
5832
+ hasRadius: true,
5833
+ background: "neutral0",
5834
+ shadow: "tableShadow",
5835
+ paddingTop: 6,
5836
+ paddingBottom: 6,
5837
+ paddingRight: 7,
5838
+ paddingLeft: 7,
5839
+ children: [
5840
+ /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 1, children: /* @__PURE__ */ jsx(Typography, { variant: "delta", tag: "h2", children: formatMessage({
5841
+ id: getTranslation("settings.email_title"),
5842
+ defaultMessage: "Email Settings"
5843
+ }) }) }),
5844
+ /* @__PURE__ */ jsx(Grid.Root, { gap: 5, tag: "dl", children: /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5637
5845
  Field.Root,
5638
5846
  {
5639
5847
  hint: formatMessage({
5640
- id: getTranslation("settings.enabled_hint"),
5641
- defaultMessage: "Enable or disable Two-Factor Authentication for all users."
5848
+ id: getTranslation("settings.email_enabled_hint"),
5849
+ defaultMessage: "Enable or disable Email MFA."
5642
5850
  }),
5643
5851
  children: [
5644
5852
  /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({ id: "global.enabled", defaultMessage: "Enabled" }) }),
5645
5853
  /* @__PURE__ */ jsx(
5646
5854
  Toggle,
5647
5855
  {
5648
- name: "enabled",
5649
- checked: enabled,
5650
- onChange: ({ target }) => setEnabled(target.checked),
5651
- offLabel: formatMessage({
5652
- id: "app.components.ToggleCheckbox.off-label",
5653
- defaultMessage: "False"
5654
- }),
5655
- onLabel: formatMessage({
5656
- id: "app.components.ToggleCheckbox.on-label",
5657
- defaultMessage: "True"
5658
- })
5659
- }
5660
- ),
5661
- /* @__PURE__ */ jsx(Field.Hint, {}),
5662
- /* @__PURE__ */ jsx(Field.Error, {})
5663
- ]
5664
- }
5665
- ) }),
5666
- /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5667
- Field.Root,
5668
- {
5669
- hint: formatMessage({
5670
- id: getTranslation("settings.enforce_hint"),
5671
- defaultMessage: "Enforce Multi-Factor Authentication for all users. If enabled, users will be required to set up MFA on their next login."
5672
- }),
5673
- children: [
5674
- /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5675
- id: getTranslation("settings.enforce"),
5676
- defaultMessage: "Enforce MFA"
5677
- }) }),
5678
- /* @__PURE__ */ jsx(
5679
- Toggle,
5680
- {
5681
- name: "enforce",
5682
- disabled: true,
5683
- checked: enforce,
5684
- onChange: ({ target }) => setEnforce(target.checked),
5856
+ name: "email_enabled",
5857
+ checked: emailEnabled,
5858
+ onChange: ({ target }) => setEmailEnabled(target.checked),
5685
5859
  offLabel: formatMessage({
5686
5860
  id: "app.components.ToggleCheckbox.off-label",
5687
5861
  defaultMessage: "False"
@@ -5696,40 +5870,108 @@ function SettingsPage() {
5696
5870
  /* @__PURE__ */ jsx(Field.Error, {})
5697
5871
  ]
5698
5872
  }
5699
- ) }),
5700
- /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(
5701
- Field.Root,
5702
- {
5703
- hint: formatMessage({
5704
- id: getTranslation("settings.issuer_hint"),
5705
- defaultMessage: "Displayed in the MFA app"
5706
- }),
5707
- children: [
5708
- /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5709
- id: getTranslation("settings.issuer"),
5710
- defaultMessage: "Issuer Name"
5711
- }) }),
5712
- /* @__PURE__ */ jsx(
5713
- TextInput,
5714
- {
5715
- name: "issuer",
5716
- defaultValue: initialConfig?.issuer,
5717
- placeholder: formatMessage({
5718
- id: getTranslation("settings.issuer"),
5719
- defaultMessage: "Issuer Name"
5720
- })
5721
- }
5722
- ),
5723
- /* @__PURE__ */ jsx(Field.Hint, {}),
5724
- /* @__PURE__ */ jsx(Field.Error, {})
5725
- ]
5726
- }
5727
- ) })
5728
- ] })
5729
- ]
5730
- }
5731
- ) }) })
5873
+ ) }) }),
5874
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 5, tag: "dl", children: [
5875
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(Field.Root, { children: [
5876
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5877
+ id: "PopUpForm.Email.options.from.name.label",
5878
+ defaultMessage: "Shipper name"
5879
+ }) }),
5880
+ /* @__PURE__ */ jsx(TextInput, { name: "from_name", defaultValue: initialConfig?.from_name || "" }),
5881
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5882
+ /* @__PURE__ */ jsx(Field.Error, {})
5883
+ ] }) }),
5884
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(Field.Root, { children: [
5885
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5886
+ id: "PopUpForm.Email.options.from.email.label",
5887
+ defaultMessage: "Shipper email"
5888
+ }) }),
5889
+ /* @__PURE__ */ jsx(
5890
+ TextInput,
5891
+ {
5892
+ name: "from_email",
5893
+ defaultValue: initialConfig?.from_email || ""
5894
+ }
5895
+ ),
5896
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5897
+ /* @__PURE__ */ jsx(Field.Error, {})
5898
+ ] }) }),
5899
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(Field.Root, { children: [
5900
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5901
+ id: "PopUpForm.Email.options.response_email.label",
5902
+ defaultMessage: "Response email"
5903
+ }) }),
5904
+ /* @__PURE__ */ jsx(
5905
+ TextInput,
5906
+ {
5907
+ name: "response_email",
5908
+ defaultValue: initialConfig?.response_email || ""
5909
+ }
5910
+ ),
5911
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5912
+ /* @__PURE__ */ jsx(Field.Error, {})
5913
+ ] }) }),
5914
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(Field.Root, { children: [
5915
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5916
+ id: "PopUpForm.Email.options.object.label",
5917
+ defaultMessage: "Subject"
5918
+ }) }),
5919
+ /* @__PURE__ */ jsx(TextInput, { name: "subject", defaultValue: initialConfig?.subject || "" }),
5920
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5921
+ /* @__PURE__ */ jsx(Field.Error, {})
5922
+ ] }) }),
5923
+ /* @__PURE__ */ jsx(Grid.Item, { col: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(Field.Root, { children: [
5924
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5925
+ id: "settings.accessibility_message",
5926
+ defaultMessage: "Accessibility Message"
5927
+ }) }),
5928
+ /* @__PURE__ */ jsx(TextInput, { name: "text", defaultValue: initialConfig?.text || "" }),
5929
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5930
+ /* @__PURE__ */ jsx(Field.Error, {})
5931
+ ] }) }),
5932
+ /* @__PURE__ */ jsx(Grid.Item, { col: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxs(Field.Root, { children: [
5933
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
5934
+ id: getTranslation("PopUpForm.Email.options.message.label"),
5935
+ defaultMessage: "Message"
5936
+ }) }),
5937
+ /* @__PURE__ */ jsx(
5938
+ Textarea,
5939
+ {
5940
+ name: "message",
5941
+ defaultValue: initialConfig?.message || "",
5942
+ rows: 15
5943
+ }
5944
+ ),
5945
+ /* @__PURE__ */ jsx(Field.Hint, {}),
5946
+ /* @__PURE__ */ jsx(Field.Error, {})
5947
+ ] }) })
5948
+ ] })
5949
+ ]
5950
+ }
5951
+ )
5952
+ ] }) }) })
5732
5953
  ] }) }),
5954
+ /* @__PURE__ */ jsxs(
5955
+ WarningAlert,
5956
+ {
5957
+ open: showEmailWarning,
5958
+ onCancel: () => setShowEmailWarning(false),
5959
+ onConfirm: () => {
5960
+ setShowEmailWarning(false);
5961
+ formRef.current && handleSubmit({ currentTarget: formRef.current }, true);
5962
+ },
5963
+ children: [
5964
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", textAlign: "center", children: formatMessage({
5965
+ id: getTranslation("settings.email_warning"),
5966
+ defaultMessage: "Turning off Email MFA will disable Email OTP for all users who have it enabled."
5967
+ }) }),
5968
+ /* @__PURE__ */ jsx(Typography, { textAlign: "center", fontWeight: "semiBold", children: formatMessage({
5969
+ id: getTranslation("app.confirm.body"),
5970
+ defaultMessage: "Are you sure?"
5971
+ }) })
5972
+ ]
5973
+ }
5974
+ ),
5733
5975
  /* @__PURE__ */ jsxs(
5734
5976
  WarningAlert,
5735
5977
  {