strapi-identity 0.2.0 → 0.4.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/README.md +5 -2
- package/dist/admin/{AdminReset-CqHhVBS_.js → AdminReset-BiWQDTRv.js} +3 -4
- package/dist/admin/{AdminReset-B-WGECOX.mjs → AdminReset-DOmsyqwQ.mjs} +1 -2
- package/dist/admin/{ProfileToggle-BRYjt5Lu.js → ProfileToggle-BUqs_hxZ.js} +8 -218
- package/dist/admin/{ProfileToggle-BCtCsOvj.mjs → ProfileToggle-k0d-caPC.mjs} +2 -210
- package/dist/admin/{SettingsPage-DAxGIv_E.js → SettingsPage-DVVkN1xw.js} +3 -6
- package/dist/admin/{SettingsPage-7Ytl01jH.mjs → SettingsPage-Dm_llkYv.mjs} +1 -4
- package/dist/admin/{ar-DwZqj0qM.mjs → ar-B4yBU4m7.mjs} +7 -0
- package/dist/admin/{ar-BYnI7Tsa.js → ar-wjkCnUTi.js} +7 -0
- package/dist/admin/{ca-sBRHuaFU.js → ca-BHz1SCoK.js} +7 -0
- package/dist/admin/{ca-aKVVc8iQ.mjs → ca-DLE8GCgI.mjs} +7 -0
- package/dist/admin/{cs--prflMHS.mjs → cs-3kxvJ5GN.mjs} +7 -0
- package/dist/admin/{cs-gU7KP3Lx.js → cs-Echs10hb.js} +7 -0
- package/dist/admin/{de-BT25lv_6.mjs → de-BTldhzPN.mjs} +7 -0
- package/dist/admin/{de-CrlCAUuf.js → de-p5oK0g4T.js} +7 -0
- package/dist/admin/{dk-Ck3AQYU7.mjs → dk-CCNCrmIK.mjs} +7 -0
- package/dist/admin/{dk-BNC3WUzY.js → dk-Z6BhrTeh.js} +7 -0
- package/dist/admin/{en-9qzlpde0.mjs → en-1anycEwN.mjs} +7 -0
- package/dist/admin/{en-DBj0AD5g.js → en-CLnZaoOA.js} +7 -0
- package/dist/admin/{es-D5Sn41_H.js → es-C-4sXZ_R.js} +7 -0
- package/dist/admin/{es-lh6XoPb7.mjs → es-DMANTUCL.mjs} +7 -0
- package/dist/admin/{eu-Cuz6ijBX.mjs → eu-BITeCOIE.mjs} +7 -0
- package/dist/admin/{eu-Qr3RvDPW.js → eu-CHWReAeU.js} +7 -0
- package/dist/admin/{fr-ChlDcZsG.mjs → fr-C81x3RP3.mjs} +7 -0
- package/dist/admin/{fr-C4pmkPYn.js → fr-DH-kRY27.js} +7 -0
- package/dist/admin/{gu-BMZL76zM.js → gu-CDocz32V.js} +7 -0
- package/dist/admin/{gu-B6zyD1bW.mjs → gu-DDR6O_Dp.mjs} +7 -0
- package/dist/admin/{he-H6iBa45A.js → he-CKFM5685.js} +7 -0
- package/dist/admin/{he-C5V-qZCX.mjs → he-TPBr5x3o.mjs} +7 -0
- package/dist/admin/{hi-Be8rPk7I.js → hi-DqJ11ApQ.js} +7 -0
- package/dist/admin/{hi-czhOWo6-.mjs → hi-Pwt1EMiO.mjs} +7 -0
- package/dist/admin/{hu-NbZ3aiYV.mjs → hu-CTKkJzwl.mjs} +7 -0
- package/dist/admin/{hu-DKp6kOmc.js → hu-DFGcSNo0.js} +7 -0
- package/dist/admin/{id-NH9PvcR5.mjs → id-Bq3jNpUL.mjs} +7 -0
- package/dist/admin/{id-DO0bwFgY.js → id-ChXHR8aw.js} +7 -0
- package/dist/admin/{index-D03zlFnm.js → index-B9P8S4CX.js} +428 -9
- package/dist/admin/{index-BfC6z9N5.mjs → index-DpIJdETG.mjs} +439 -20
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/{it-Cmrey6tg.mjs → it-CgRQVAPr.mjs} +7 -0
- package/dist/admin/{it-Df6-7-M7.js → it-r0rbu0x0.js} +7 -0
- package/dist/admin/{ja-HuAq9ZwT.js → ja-27vNq46V.js} +7 -0
- package/dist/admin/{ja-DH3KMqOL.mjs → ja-2xaH1Qf2.mjs} +7 -0
- package/dist/admin/{ko-DPN28RE8.mjs → ko-CGgmfI4W.mjs} +7 -0
- package/dist/admin/{ko-S9k8KA8K.js → ko-Ci0l5h1b.js} +7 -0
- package/dist/admin/{ml-Bh9GGqcW.js → ml-Augll2or.js} +7 -0
- package/dist/admin/{ml-MsHNacm6.mjs → ml-aXIja392.mjs} +7 -0
- package/dist/admin/{ms-hO5YeEg4.js → ms-B8pBYl9n.js} +7 -0
- package/dist/admin/{ms-TjHAaxTd.mjs → ms-CLGR4CKx.mjs} +7 -0
- package/dist/admin/{nl-BLILZU8-.mjs → nl-CGFOqn_t.mjs} +7 -0
- package/dist/admin/{nl-BF98NBwL.js → nl-Cqn_nYD8.js} +7 -0
- package/dist/admin/{no-BtVZ-siy.mjs → no-BIbR3s2A.mjs} +7 -0
- package/dist/admin/{no-bl1OXlfa.js → no-DPF_xI-b.js} +7 -0
- package/dist/admin/{pl-DCSB6LwZ.mjs → pl-BBEIjPVT.mjs} +7 -0
- package/dist/admin/{pl-DCnOWIDw.js → pl-BjIa9TiI.js} +7 -0
- package/dist/admin/{pt-BR-D2_UrxTp.js → pt-BR-BbPay13q.js} +7 -0
- package/dist/admin/{pt-BR-CeLqmj88.mjs → pt-BR-C0S_4PYn.mjs} +7 -0
- package/dist/admin/{pt-DIu8RT_X.js → pt-DDhcHCz6.js} +7 -0
- package/dist/admin/{pt-fgjdOyW5.mjs → pt-DwDWDT_T.mjs} +7 -0
- package/dist/admin/{ru-BccMCf0l.js → ru-BzQ0SoFG.js} +7 -0
- package/dist/admin/{ru-B_hlpAyP.mjs → ru-DuxM9hFK.mjs} +7 -0
- package/dist/admin/{sa-D3A-fo85.js → sa-Cwsmxq_x.js} +7 -0
- package/dist/admin/{sa-BtuJ_I1t.mjs → sa-DfqNZDgh.mjs} +7 -0
- package/dist/admin/{sk-mmuTFlCK.mjs → sk-BcYzeG4F.mjs} +7 -0
- package/dist/admin/{sk-uSLC6KhO.js → sk-Coqlt4Kq.js} +7 -0
- package/dist/admin/{sv-CuKk5tE-.js → sv-9zwaCIfo.js} +7 -0
- package/dist/admin/{sv-BlaHc5ax.mjs → sv-CkoFHi6o.mjs} +7 -0
- package/dist/admin/{th-BwyhFaeE.mjs → th-C4FBlfLA.mjs} +7 -0
- package/dist/admin/{th-Bv3NKkYO.js → th-CFkjhGd6.js} +7 -0
- package/dist/admin/{tr-Bmvs-Hx-.js → tr-D0g7vqL1.js} +7 -0
- package/dist/admin/{tr-BLocNlbZ.mjs → tr-Djsa55Fh.mjs} +7 -0
- package/dist/admin/{uk-CyZ10xtq.mjs → uk-BDoDjhO2.mjs} +7 -0
- package/dist/admin/{uk-BDxn-EZU.js → uk-Dw1MGmom.js} +7 -0
- package/dist/admin/{vi-Bx_UJ8up.mjs → vi-D977KjlZ.mjs} +7 -0
- package/dist/admin/{vi-F_mqQCme.js → vi-DNZKFaOu.js} +7 -0
- package/dist/admin/{zh-CFZJPG5N.js → zh-C2aozMiZ.js} +7 -0
- package/dist/admin/{zh-CjJdRa3l.mjs → zh-CKYKCaVd.mjs} +7 -0
- package/dist/admin/{zh-Hans-s7G2GUHU.mjs → zh-Hans-DNgRcEC-.mjs} +7 -0
- package/dist/admin/{zh-Hans-4BhSwSQw.js → zh-Hans-ellQkyo7.js} +7 -0
- package/dist/server/index.js +88 -16
- package/dist/server/index.mjs +88 -16
- package/package.json +3 -3
- package/dist/admin/tokenHelpers-DagDzpso.mjs +0 -22
- package/dist/admin/tokenHelpers-jtoRu0q5.js +0 -21
package/dist/server/index.js
CHANGED
|
@@ -71,11 +71,11 @@ const defaultConfig$1 = {
|
|
|
71
71
|
</table>
|
|
72
72
|
</div>`
|
|
73
73
|
};
|
|
74
|
-
const bootstrap = async () => {
|
|
75
|
-
const config2 =
|
|
74
|
+
const bootstrap = async ({ strapi: strapi2 }) => {
|
|
75
|
+
const config2 = strapi2.documents("plugin::strapi-identity.strapi-identity-config");
|
|
76
76
|
const existingConfig = await config2.count({});
|
|
77
77
|
if (!existingConfig) await config2.create({ data: defaultConfig$1 });
|
|
78
|
-
|
|
78
|
+
strapi2.admin.services.permission.actionProvider.registerMany([
|
|
79
79
|
{
|
|
80
80
|
uid: "settings.read",
|
|
81
81
|
section: "plugins",
|
|
@@ -9620,25 +9620,13 @@ var jsonwebtokenExports = requireJsonwebtoken();
|
|
|
9620
9620
|
const jwt = /* @__PURE__ */ getDefaultExportFromCjs(jsonwebtokenExports);
|
|
9621
9621
|
const register = ({ strapi: strapi2 }) => {
|
|
9622
9622
|
const { admin: admin2, config: config2, server } = strapi2;
|
|
9623
|
+
registerMiddlewares(server);
|
|
9623
9624
|
const secret2 = config2.get("admin.auth.secret");
|
|
9624
9625
|
const domain = config2.get("admin.auth.domain");
|
|
9625
9626
|
const loginRoute = admin2.routes.admin.routes.find(
|
|
9626
9627
|
({ method, path }) => method === "POST" && path === "/login"
|
|
9627
9628
|
);
|
|
9628
9629
|
if (loginRoute) replaceLogin(loginRoute, secret2, domain);
|
|
9629
|
-
server.use(async (ctx, next) => {
|
|
9630
|
-
const mfaCookie = ctx.cookies.get("strapi_admin_mfa");
|
|
9631
|
-
if (mfaCookie && ctx.path.startsWith("/admin/auth")) {
|
|
9632
|
-
ctx.cookies.set("jwtToken", null, { expires: /* @__PURE__ */ new Date(0) });
|
|
9633
|
-
ctx.redirect("/admin/strapi-identity/verify");
|
|
9634
|
-
return;
|
|
9635
|
-
}
|
|
9636
|
-
if (!mfaCookie && ctx.path === "/admin/strapi-identity/verify") {
|
|
9637
|
-
ctx.redirect("/admin");
|
|
9638
|
-
return;
|
|
9639
|
-
}
|
|
9640
|
-
await next();
|
|
9641
|
-
});
|
|
9642
9630
|
};
|
|
9643
9631
|
const replaceLogin = (route2, secret2, domain) => {
|
|
9644
9632
|
route2.config.middlewares = route2.config.middlewares || [];
|
|
@@ -9680,6 +9668,68 @@ const replaceLogin = (route2, secret2, domain) => {
|
|
|
9680
9668
|
ctx.body.data = { data: {}, error: null };
|
|
9681
9669
|
});
|
|
9682
9670
|
};
|
|
9671
|
+
const registerMiddlewares = (server) => {
|
|
9672
|
+
const configService = strapi.service("plugin::strapi-identity.config");
|
|
9673
|
+
server.use(async (ctx, next) => {
|
|
9674
|
+
const mfaCookie = ctx.cookies.get("strapi_admin_mfa");
|
|
9675
|
+
if (mfaCookie && ctx.path.startsWith("/admin/auth")) {
|
|
9676
|
+
ctx.cookies.set("jwtToken", null, { expires: /* @__PURE__ */ new Date(0) });
|
|
9677
|
+
ctx.redirect("/admin/strapi-identity/verify");
|
|
9678
|
+
return;
|
|
9679
|
+
}
|
|
9680
|
+
if (!mfaCookie && ctx.path === "/admin/strapi-identity/verify") {
|
|
9681
|
+
ctx.redirect("/admin");
|
|
9682
|
+
return;
|
|
9683
|
+
}
|
|
9684
|
+
await next();
|
|
9685
|
+
});
|
|
9686
|
+
server.use(async (ctx, next) => {
|
|
9687
|
+
const cookie = ctx.cookies.get("jwtToken");
|
|
9688
|
+
if (!cookie) {
|
|
9689
|
+
await next();
|
|
9690
|
+
return;
|
|
9691
|
+
}
|
|
9692
|
+
const config2 = await configService.getConfig();
|
|
9693
|
+
if (!config2.enabled || !config2.enforce) {
|
|
9694
|
+
await next();
|
|
9695
|
+
return;
|
|
9696
|
+
}
|
|
9697
|
+
const userEnabled = await configService.checkUserByJWT(cookie);
|
|
9698
|
+
if (userEnabled) {
|
|
9699
|
+
if (ctx.path === "/admin/strapi-identity/enforced") {
|
|
9700
|
+
ctx.redirect("/admin");
|
|
9701
|
+
return;
|
|
9702
|
+
}
|
|
9703
|
+
await next();
|
|
9704
|
+
return;
|
|
9705
|
+
}
|
|
9706
|
+
const allowedPaths = [
|
|
9707
|
+
"/admin/strapi-identity/enforced",
|
|
9708
|
+
"/admin/init",
|
|
9709
|
+
"/admin/users/me",
|
|
9710
|
+
"/strapi-identity/status",
|
|
9711
|
+
"/strapi-identity/config",
|
|
9712
|
+
"/strapi-identity/config/enabled",
|
|
9713
|
+
"/strapi-identity/enable",
|
|
9714
|
+
"/strapi-identity/setup",
|
|
9715
|
+
"/strapi-identity/enable-email",
|
|
9716
|
+
"/strapi-identity/setup-email"
|
|
9717
|
+
];
|
|
9718
|
+
const isAllowed = allowedPaths.includes(ctx.path) || // Static assets (JS, CSS, images, fonts, sourcemaps)
|
|
9719
|
+
/\.(mjs|js|css|png|jpg|jpeg|gif|svg|ico|woff2?|ttf|eot|map)(\?.*)?$/.test(ctx.path) || ctx.path.startsWith("/admin/@");
|
|
9720
|
+
if (!isAllowed) console.log(ctx.path);
|
|
9721
|
+
if (!isAllowed) {
|
|
9722
|
+
if (ctx.accepts("html") && ctx.path.startsWith("/admin")) {
|
|
9723
|
+
ctx.redirect("/admin/strapi-identity/enforced");
|
|
9724
|
+
return;
|
|
9725
|
+
}
|
|
9726
|
+
ctx.status = 403;
|
|
9727
|
+
ctx.body = { error: { status: 403, message: "MFA setup required." } };
|
|
9728
|
+
return;
|
|
9729
|
+
}
|
|
9730
|
+
await next();
|
|
9731
|
+
});
|
|
9732
|
+
};
|
|
9683
9733
|
const config$4 = {
|
|
9684
9734
|
default: {},
|
|
9685
9735
|
validator() {
|
|
@@ -10455,8 +10505,30 @@ const disableMFAForAllUsers = async () => {
|
|
|
10455
10505
|
console.log("Error disabling MFA for all users:", err);
|
|
10456
10506
|
}
|
|
10457
10507
|
};
|
|
10508
|
+
const checkUserByJWT = async (jwtToken) => {
|
|
10509
|
+
const config2 = await getConfig();
|
|
10510
|
+
const secret2 = strapi.config.get("admin.auth.secret");
|
|
10511
|
+
if (!config2.enabled) return false;
|
|
10512
|
+
let userId;
|
|
10513
|
+
try {
|
|
10514
|
+
const decoded = jwt.verify(jwtToken, secret2);
|
|
10515
|
+
userId = decoded.userId || decoded.id;
|
|
10516
|
+
} catch {
|
|
10517
|
+
return false;
|
|
10518
|
+
}
|
|
10519
|
+
if (!userId) return false;
|
|
10520
|
+
try {
|
|
10521
|
+
const mfaExists = await strapi.documents("plugin::strapi-identity.mfa-token").count({
|
|
10522
|
+
filters: { admin_user: { id: userId }, enabled: true }
|
|
10523
|
+
});
|
|
10524
|
+
return mfaExists > 0;
|
|
10525
|
+
} catch {
|
|
10526
|
+
return false;
|
|
10527
|
+
}
|
|
10528
|
+
};
|
|
10458
10529
|
const config = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
10459
10530
|
__proto__: null,
|
|
10531
|
+
checkUserByJWT,
|
|
10460
10532
|
getConfig,
|
|
10461
10533
|
isEnabled,
|
|
10462
10534
|
updateConfig
|
package/dist/server/index.mjs
CHANGED
|
@@ -64,11 +64,11 @@ const defaultConfig$1 = {
|
|
|
64
64
|
</table>
|
|
65
65
|
</div>`
|
|
66
66
|
};
|
|
67
|
-
const bootstrap = async () => {
|
|
68
|
-
const config2 =
|
|
67
|
+
const bootstrap = async ({ strapi: strapi2 }) => {
|
|
68
|
+
const config2 = strapi2.documents("plugin::strapi-identity.strapi-identity-config");
|
|
69
69
|
const existingConfig = await config2.count({});
|
|
70
70
|
if (!existingConfig) await config2.create({ data: defaultConfig$1 });
|
|
71
|
-
|
|
71
|
+
strapi2.admin.services.permission.actionProvider.registerMany([
|
|
72
72
|
{
|
|
73
73
|
uid: "settings.read",
|
|
74
74
|
section: "plugins",
|
|
@@ -9613,25 +9613,13 @@ var jsonwebtokenExports = requireJsonwebtoken();
|
|
|
9613
9613
|
const jwt = /* @__PURE__ */ getDefaultExportFromCjs(jsonwebtokenExports);
|
|
9614
9614
|
const register = ({ strapi: strapi2 }) => {
|
|
9615
9615
|
const { admin: admin2, config: config2, server } = strapi2;
|
|
9616
|
+
registerMiddlewares(server);
|
|
9616
9617
|
const secret2 = config2.get("admin.auth.secret");
|
|
9617
9618
|
const domain = config2.get("admin.auth.domain");
|
|
9618
9619
|
const loginRoute = admin2.routes.admin.routes.find(
|
|
9619
9620
|
({ method, path }) => method === "POST" && path === "/login"
|
|
9620
9621
|
);
|
|
9621
9622
|
if (loginRoute) replaceLogin(loginRoute, secret2, domain);
|
|
9622
|
-
server.use(async (ctx, next) => {
|
|
9623
|
-
const mfaCookie = ctx.cookies.get("strapi_admin_mfa");
|
|
9624
|
-
if (mfaCookie && ctx.path.startsWith("/admin/auth")) {
|
|
9625
|
-
ctx.cookies.set("jwtToken", null, { expires: /* @__PURE__ */ new Date(0) });
|
|
9626
|
-
ctx.redirect("/admin/strapi-identity/verify");
|
|
9627
|
-
return;
|
|
9628
|
-
}
|
|
9629
|
-
if (!mfaCookie && ctx.path === "/admin/strapi-identity/verify") {
|
|
9630
|
-
ctx.redirect("/admin");
|
|
9631
|
-
return;
|
|
9632
|
-
}
|
|
9633
|
-
await next();
|
|
9634
|
-
});
|
|
9635
9623
|
};
|
|
9636
9624
|
const replaceLogin = (route2, secret2, domain) => {
|
|
9637
9625
|
route2.config.middlewares = route2.config.middlewares || [];
|
|
@@ -9673,6 +9661,68 @@ const replaceLogin = (route2, secret2, domain) => {
|
|
|
9673
9661
|
ctx.body.data = { data: {}, error: null };
|
|
9674
9662
|
});
|
|
9675
9663
|
};
|
|
9664
|
+
const registerMiddlewares = (server) => {
|
|
9665
|
+
const configService = strapi.service("plugin::strapi-identity.config");
|
|
9666
|
+
server.use(async (ctx, next) => {
|
|
9667
|
+
const mfaCookie = ctx.cookies.get("strapi_admin_mfa");
|
|
9668
|
+
if (mfaCookie && ctx.path.startsWith("/admin/auth")) {
|
|
9669
|
+
ctx.cookies.set("jwtToken", null, { expires: /* @__PURE__ */ new Date(0) });
|
|
9670
|
+
ctx.redirect("/admin/strapi-identity/verify");
|
|
9671
|
+
return;
|
|
9672
|
+
}
|
|
9673
|
+
if (!mfaCookie && ctx.path === "/admin/strapi-identity/verify") {
|
|
9674
|
+
ctx.redirect("/admin");
|
|
9675
|
+
return;
|
|
9676
|
+
}
|
|
9677
|
+
await next();
|
|
9678
|
+
});
|
|
9679
|
+
server.use(async (ctx, next) => {
|
|
9680
|
+
const cookie = ctx.cookies.get("jwtToken");
|
|
9681
|
+
if (!cookie) {
|
|
9682
|
+
await next();
|
|
9683
|
+
return;
|
|
9684
|
+
}
|
|
9685
|
+
const config2 = await configService.getConfig();
|
|
9686
|
+
if (!config2.enabled || !config2.enforce) {
|
|
9687
|
+
await next();
|
|
9688
|
+
return;
|
|
9689
|
+
}
|
|
9690
|
+
const userEnabled = await configService.checkUserByJWT(cookie);
|
|
9691
|
+
if (userEnabled) {
|
|
9692
|
+
if (ctx.path === "/admin/strapi-identity/enforced") {
|
|
9693
|
+
ctx.redirect("/admin");
|
|
9694
|
+
return;
|
|
9695
|
+
}
|
|
9696
|
+
await next();
|
|
9697
|
+
return;
|
|
9698
|
+
}
|
|
9699
|
+
const allowedPaths = [
|
|
9700
|
+
"/admin/strapi-identity/enforced",
|
|
9701
|
+
"/admin/init",
|
|
9702
|
+
"/admin/users/me",
|
|
9703
|
+
"/strapi-identity/status",
|
|
9704
|
+
"/strapi-identity/config",
|
|
9705
|
+
"/strapi-identity/config/enabled",
|
|
9706
|
+
"/strapi-identity/enable",
|
|
9707
|
+
"/strapi-identity/setup",
|
|
9708
|
+
"/strapi-identity/enable-email",
|
|
9709
|
+
"/strapi-identity/setup-email"
|
|
9710
|
+
];
|
|
9711
|
+
const isAllowed = allowedPaths.includes(ctx.path) || // Static assets (JS, CSS, images, fonts, sourcemaps)
|
|
9712
|
+
/\.(mjs|js|css|png|jpg|jpeg|gif|svg|ico|woff2?|ttf|eot|map)(\?.*)?$/.test(ctx.path) || ctx.path.startsWith("/admin/@");
|
|
9713
|
+
if (!isAllowed) console.log(ctx.path);
|
|
9714
|
+
if (!isAllowed) {
|
|
9715
|
+
if (ctx.accepts("html") && ctx.path.startsWith("/admin")) {
|
|
9716
|
+
ctx.redirect("/admin/strapi-identity/enforced");
|
|
9717
|
+
return;
|
|
9718
|
+
}
|
|
9719
|
+
ctx.status = 403;
|
|
9720
|
+
ctx.body = { error: { status: 403, message: "MFA setup required." } };
|
|
9721
|
+
return;
|
|
9722
|
+
}
|
|
9723
|
+
await next();
|
|
9724
|
+
});
|
|
9725
|
+
};
|
|
9676
9726
|
const config$4 = {
|
|
9677
9727
|
default: {},
|
|
9678
9728
|
validator() {
|
|
@@ -10448,8 +10498,30 @@ const disableMFAForAllUsers = async () => {
|
|
|
10448
10498
|
console.log("Error disabling MFA for all users:", err);
|
|
10449
10499
|
}
|
|
10450
10500
|
};
|
|
10501
|
+
const checkUserByJWT = async (jwtToken) => {
|
|
10502
|
+
const config2 = await getConfig();
|
|
10503
|
+
const secret2 = strapi.config.get("admin.auth.secret");
|
|
10504
|
+
if (!config2.enabled) return false;
|
|
10505
|
+
let userId;
|
|
10506
|
+
try {
|
|
10507
|
+
const decoded = jwt.verify(jwtToken, secret2);
|
|
10508
|
+
userId = decoded.userId || decoded.id;
|
|
10509
|
+
} catch {
|
|
10510
|
+
return false;
|
|
10511
|
+
}
|
|
10512
|
+
if (!userId) return false;
|
|
10513
|
+
try {
|
|
10514
|
+
const mfaExists = await strapi.documents("plugin::strapi-identity.mfa-token").count({
|
|
10515
|
+
filters: { admin_user: { id: userId }, enabled: true }
|
|
10516
|
+
});
|
|
10517
|
+
return mfaExists > 0;
|
|
10518
|
+
} catch {
|
|
10519
|
+
return false;
|
|
10520
|
+
}
|
|
10521
|
+
};
|
|
10451
10522
|
const config = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
10452
10523
|
__proto__: null,
|
|
10524
|
+
checkUserByJWT,
|
|
10453
10525
|
getConfig,
|
|
10454
10526
|
isEnabled,
|
|
10455
10527
|
updateConfig
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.4.0",
|
|
3
3
|
"keywords": [
|
|
4
4
|
"strapi",
|
|
5
5
|
"plugin",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"input-otp": "^1.4.2",
|
|
41
41
|
"otpauth": "^9.5.0",
|
|
42
42
|
"qrcode.react": "^4.2.0",
|
|
43
|
-
"strapi-admin-portal": "^0.
|
|
43
|
+
"strapi-admin-portal": "^0.3.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@strapi/sdk-plugin": "^6.0.1",
|
|
47
|
-
"@strapi/typescript-utils": "^5.
|
|
47
|
+
"@strapi/typescript-utils": "^5.40.0",
|
|
48
48
|
"@types/bcryptjs": "^2.4.6",
|
|
49
49
|
"@types/react": "^18.3.27",
|
|
50
50
|
"@types/react-dom": "^18.3.7",
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
const getCookieValue = (name) => {
|
|
2
|
-
let result = null;
|
|
3
|
-
const cookieArray = document.cookie.split(";");
|
|
4
|
-
cookieArray.forEach((cookie) => {
|
|
5
|
-
const [key, value] = cookie.split("=").map((item) => item.trim());
|
|
6
|
-
if (key === name) {
|
|
7
|
-
result = decodeURIComponent(value);
|
|
8
|
-
}
|
|
9
|
-
});
|
|
10
|
-
return result;
|
|
11
|
-
};
|
|
12
|
-
const getToken = () => {
|
|
13
|
-
const fromLocalStorage = localStorage.getItem("jwtToken");
|
|
14
|
-
if (fromLocalStorage) {
|
|
15
|
-
return JSON.parse(fromLocalStorage);
|
|
16
|
-
}
|
|
17
|
-
const fromCookie = getCookieValue("jwtToken");
|
|
18
|
-
return fromCookie ?? null;
|
|
19
|
-
};
|
|
20
|
-
export {
|
|
21
|
-
getToken as g
|
|
22
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const getCookieValue = (name) => {
|
|
3
|
-
let result = null;
|
|
4
|
-
const cookieArray = document.cookie.split(";");
|
|
5
|
-
cookieArray.forEach((cookie) => {
|
|
6
|
-
const [key, value] = cookie.split("=").map((item) => item.trim());
|
|
7
|
-
if (key === name) {
|
|
8
|
-
result = decodeURIComponent(value);
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
return result;
|
|
12
|
-
};
|
|
13
|
-
const getToken = () => {
|
|
14
|
-
const fromLocalStorage = localStorage.getItem("jwtToken");
|
|
15
|
-
if (fromLocalStorage) {
|
|
16
|
-
return JSON.parse(fromLocalStorage);
|
|
17
|
-
}
|
|
18
|
-
const fromCookie = getCookieValue("jwtToken");
|
|
19
|
-
return fromCookie ?? null;
|
|
20
|
-
};
|
|
21
|
-
exports.getToken = getToken;
|