strapi-plugin-magic-link-v5 5.3.19 → 5.5.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/CHANGELOG.md +215 -0
- package/LICENSE +0 -6
- package/README.md +108 -0
- package/dist/{_chunks/index-BLVWydMU.mjs → admin/index-2avmGJ5M.mjs} +1 -1
- package/dist/{_chunks/index-XzZ9gY5b.mjs → admin/index-BCopEXYL.mjs} +9 -11
- package/dist/{_chunks/index-DsBgtATx.js → admin/index-BDG7geOg.js} +1 -1
- package/dist/{_chunks/index-FtAOFA-A.mjs → admin/index-BdhtSEYZ.mjs} +1 -1
- package/dist/{_chunks/index-DLQHbyQZ.js → admin/index-DGUMEnkD.js} +1 -1
- package/dist/{_chunks/index-DJQQdmfZ.js → admin/index-DYLdjufr.js} +9 -11
- package/dist/{_chunks/index-B2-UNgqO.js → admin/index-KsidtTDP.js} +1 -1
- package/dist/{_chunks/index-D4iiJVPc.mjs → admin/index-mocjHxcq.mjs} +1 -1
- package/dist/admin/index.js +3 -2
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +11 -28997
- package/dist/server/index.mjs +11 -28966
- package/package.json +51 -28
- package/strapi-admin.js +3 -0
- /package/dist/{_chunks → admin}/LicenseGuard-5sMwgS6j.mjs +0 -0
- /package/dist/{_chunks → admin}/LicenseGuard-DqyOwTlf.js +0 -0
- /package/dist/{_chunks → admin}/LicensePage-2M-vOJX8.js +0 -0
- /package/dist/{_chunks → admin}/LicensePage-CCNW2hT6.mjs +0 -0
- /package/dist/{_chunks → admin}/de-BSOk5suQ.js +0 -0
- /package/dist/{_chunks → admin}/de-CwhYs3O3.mjs +0 -0
- /package/dist/{_chunks → admin}/en-DnvSpXvu.js +0 -0
- /package/dist/{_chunks → admin}/en-gXXgGDV1.mjs +0 -0
- /package/dist/{_chunks → admin}/es-B-tnwByt.js +0 -0
- /package/dist/{_chunks → admin}/es-DG5gW3RZ.mjs +0 -0
- /package/dist/{_chunks → admin}/fr-BKo8t7Fx.js +0 -0
- /package/dist/{_chunks → admin}/fr-BQn1OHOR.mjs +0 -0
- /package/dist/{_chunks → admin}/index-B8urUtiz.mjs +0 -0
- /package/dist/{_chunks → admin}/index-PgHpSdc8.js +0 -0
- /package/dist/{_chunks → admin}/pt-CjEkXBAz.js +0 -0
- /package/dist/{_chunks → admin}/pt-trziAOzT.mjs +0 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# [5.5.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.4.0...v5.5.0) (2026-04-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **deps:** move baileys to optionalDependencies + bump runtime deps ([b1716b2](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/b1716b22cb905aaa52fa5c7bfea5092ef722fc91)), closes [package.json#exports](https://github.com/package.json/issues/exports)
|
|
7
|
+
* **deps:** pin styled-components to ^6.3.9 to avoid npm ci ERESOLVE ([351cf6f](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/351cf6fd325bce0f7bc8df1bfa35895c81c326b9))
|
|
8
|
+
* **deps:** revert baileys back to dependencies, document protobufjs override for consumers ([260e144](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/260e1441959dfaa1bdc31550b76f4849854cc6c6))
|
|
9
|
+
* **enduser:** harden magic-link login/OTP flow (no enumeration, deterministic email lookup, clean delivery errors) ([707c45c](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/707c45cb4a007aa9c25b705c2b9e2f977749f126))
|
|
10
|
+
* **license:** wrap every license-server call in a 12s timeout with 1 retry ([6ab88ba](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/6ab88ba47e15c1d0feab53ff71866f7e5958d24a))
|
|
11
|
+
* **security:** gate every admin route with hasPermissions (plugin::magic-link.access) ([db821ef](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/db821ef24a46d5f5ccbebb452803dcab057123ff))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **security,settings:** otp binding, crypto hardening, wire-up dead settings ([90dc76d](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/90dc76d3cb77fe6bc2272155b43272e6541ab91f))
|
|
17
|
+
|
|
18
|
+
# [5.4.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.20...v5.4.0) (2026-04-15)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **rbac:** keep routes functional, only hide UI for unpermitted roles ([5f230cb](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/5f230cbc4432477bea6c9c3886205d058fa90f10))
|
|
24
|
+
* **routes:** restore original open policies for end-user facing routes ([30d7fb5](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/30d7fb5ec77c1576068052ca92e4fe9fb4771fbc))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* **rbac:** add access permission and secure all admin routes ([7e68283](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/7e6828333a26f64612f0cf1831bdc2f535fb308f))
|
|
30
|
+
|
|
31
|
+
## [5.3.20](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.19...v5.3.20) (2026-02-27)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
* loosen peerDependencies to avoid conflicts with Strapi 5.37+ ([4ac6f96](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/4ac6f96493a408e8302655b94b0e93a8f4019ff4))
|
|
37
|
+
* security hardening - hash-based JWT storage, prefix token lookup, rate limiter rewrite ([7010255](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/701025549ef8f2af9d99d791c2eb143afab1a1c0))
|
|
38
|
+
|
|
39
|
+
## [5.3.19](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.18...v5.3.19) (2026-02-14)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Bug Fixes
|
|
43
|
+
|
|
44
|
+
* resolve libsignal git+ssh dependency issue for CI/CD compatibility ([9c0d840](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/9c0d8403630806c10f6ea8e45de84d843d5bc206))
|
|
45
|
+
|
|
46
|
+
## [5.3.18](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.17...v5.3.18) (2026-02-08)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
### Bug Fixes
|
|
50
|
+
|
|
51
|
+
* dark mode compatibility for LicensePage and LicenseGuard ([e3292b2](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/e3292b267ca1c1260c809ca6f7eed80be117b70a)), closes [#4945ff](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/4945ff)
|
|
52
|
+
|
|
53
|
+
## [5.3.17](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.16...v5.3.17) (2026-02-07)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
### Bug Fixes
|
|
57
|
+
|
|
58
|
+
* replace all hardcoded theme colors with DS props and rgba for dark/light mode ([28b4f8e](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/28b4f8ee66e83012bb8037a4439dd393afe022e6)), closes [#BAE6FD](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/BAE6FD) [#BBF7D0](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/BBF7D0)
|
|
59
|
+
|
|
60
|
+
## [5.3.16](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.15...v5.3.16) (2026-02-07)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
### Bug Fixes
|
|
64
|
+
|
|
65
|
+
* use Strapi DS tokens for light+dark mode compatibility ([6a603f9](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/6a603f9da6ec07a962e785cd3410f088b8f83a9d))
|
|
66
|
+
|
|
67
|
+
## [5.3.15](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.14...v5.3.15) (2026-02-07)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
### Bug Fixes
|
|
71
|
+
|
|
72
|
+
* settings page fully dark mode compatible ([4b8e402](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/4b8e4026ae9d654fe655c1a812601517e82de4cd)), closes [#E5E7EB](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/E5E7EB) [#D1D5DB](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/D1D5DB) [#E9D5FF](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/E9D5FF) [#d1d5db](https://github.com/Schero94/strapi-plugin-magic-link-v5/issues/d1d5db)
|
|
73
|
+
|
|
74
|
+
## [5.3.14](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.13...v5.3.14) (2026-02-07)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
### Bug Fixes
|
|
78
|
+
|
|
79
|
+
* extend token modal dark mode compatible ([cb10fc6](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cb10fc64806d1a4e3055120740413a18dd5aa9b4))
|
|
80
|
+
|
|
81
|
+
## [5.3.13](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.12...v5.3.13) (2026-02-07)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
### Bug Fixes
|
|
85
|
+
|
|
86
|
+
* token details modal fully dark mode compatible ([15da652](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/15da652fb8505017edc6b164d58dccb0325214dc))
|
|
87
|
+
|
|
88
|
+
## [5.3.12](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.11...v5.3.12) (2026-02-07)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
### Bug Fixes
|
|
92
|
+
|
|
93
|
+
* white text color for reference badge in dark mode ([cac77ee](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cac77ee2be56d9f7fd82bd62b8a38f632891ea07))
|
|
94
|
+
|
|
95
|
+
## [5.3.11](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.10...v5.3.11) (2026-02-07)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Bug Fixes
|
|
99
|
+
|
|
100
|
+
* reference badge readable in dark mode ([7bb8ab6](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/7bb8ab6ed6329c2e9c6dc8f67da4b851bff92667))
|
|
101
|
+
|
|
102
|
+
## [5.3.10](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.9...v5.3.10) (2026-02-07)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
### Bug Fixes
|
|
106
|
+
|
|
107
|
+
* use expire_period from settings as default TTL in token creation ([f8cb324](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/f8cb324882807bba5fc84a2b6ab853022f988601))
|
|
108
|
+
|
|
109
|
+
## [5.3.9](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.8...v5.3.9) (2026-02-07)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
### Bug Fixes
|
|
113
|
+
|
|
114
|
+
* replace Toggle with Switch component (Strapi DS v2) ([a0af2f0](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/a0af2f02ac745fb6cb001008eb4af6c91257848f))
|
|
115
|
+
|
|
116
|
+
## [5.3.8](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.7...v5.3.8) (2026-02-07)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
### Bug Fixes
|
|
120
|
+
|
|
121
|
+
* update admin UI to Strapi Design System v2 patterns ([057f5a3](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/057f5a3d4f137bb4e91b48c6a8cca103afaf067e))
|
|
122
|
+
|
|
123
|
+
## [5.3.7](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.6...v5.3.7) (2026-02-07)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
### Bug Fixes
|
|
127
|
+
|
|
128
|
+
* context whitelist/blacklist input fields not typeable ([5e87a8c](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/5e87a8c1a78347a68d2089a0440a3c5e30f5187b))
|
|
129
|
+
|
|
130
|
+
## [5.3.6](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.5...v5.3.6) (2026-02-07)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
### Bug Fixes
|
|
134
|
+
|
|
135
|
+
* pass all context fields through on login instead of hard whitelist ([116a032](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/116a032ecfe567dea51ec35688a030ebdef8e113))
|
|
136
|
+
|
|
137
|
+
## [5.3.5](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.4...v5.3.5) (2026-01-30)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
### Bug Fixes
|
|
141
|
+
|
|
142
|
+
* restore package-lock.json for CI/CD npm ci ([422f849](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/422f8492e4cc677381d9c2ad8f15a63bdfbb545b))
|
|
143
|
+
* update NumberInput onChange to onValueChange for Strapi Design System v2 ([2b2c91f](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/2b2c91fb3b51383cc540ee06b00325831855007e))
|
|
144
|
+
* use expire_period from settings instead of hardcoded 1 hour ([cc48094](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cc4809471ad7f1d890881534a223eab330475629))
|
|
145
|
+
|
|
146
|
+
## [5.3.4](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.3...v5.3.4) (2026-01-27)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
### Bug Fixes
|
|
150
|
+
|
|
151
|
+
* use onValueChange for NumberInput components ([cbdfd3e](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/cbdfd3e61efabdb3867fdfce8a4e58c2959ddbe8))
|
|
152
|
+
|
|
153
|
+
## [5.3.3](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.2...v5.3.3) (2025-12-28)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
### Bug Fixes
|
|
157
|
+
|
|
158
|
+
* remove begservice references and support email ([f8a5581](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/f8a558181b62388c3019e654ad55edb118561a4e))
|
|
159
|
+
|
|
160
|
+
## [5.3.2](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.1...v5.3.2) (2025-12-28)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
### Bug Fixes
|
|
164
|
+
|
|
165
|
+
* update repository URLs from begservice to Schero94 ([0a5169c](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/0a5169cefba54f1582026c2027aa905c3e6b13f9))
|
|
166
|
+
|
|
167
|
+
## [5.3.1](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.3.0...v5.3.1) (2025-12-16)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
### Bug Fixes
|
|
171
|
+
|
|
172
|
+
* improve WhatsApp integration stability and documentation ([5730c07](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/5730c07710cd59d007341608e10758cf7a23f2aa))
|
|
173
|
+
|
|
174
|
+
# [5.3.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.2.0...v5.3.0) (2025-12-16)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
### Features
|
|
178
|
+
|
|
179
|
+
* add WhatsApp integration for magic links v5.2.7 ([bc2ba06](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/bc2ba068d5375002a068f49f3566fee3b3e5fbca))
|
|
180
|
+
|
|
181
|
+
# [5.2.0](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.4...v5.2.0) (2025-12-08)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
### Features
|
|
185
|
+
|
|
186
|
+
* enhance GitHub issue templates with plugin-specific fields and feature request template ([78f9829](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/78f982927fb970d6062a584b4b81294795330d0e))
|
|
187
|
+
* enhance pull request template with comprehensive sections and plugin-specific checklist ([e64eec1](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/e64eec1c2986776a9f7f00f14fec37b29acd9fb5))
|
|
188
|
+
|
|
189
|
+
## [5.1.4](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.3...v5.1.4) (2025-12-08)
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
### Bug Fixes
|
|
193
|
+
|
|
194
|
+
* move semantic-release to devDependencies and add GitHub templates ([a942b79](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/a942b791a401c48f9c7450183c9ba57b4938a777))
|
|
195
|
+
|
|
196
|
+
## [5.1.3](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.2...v5.1.3) (2025-12-05)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
### Bug Fixes
|
|
200
|
+
|
|
201
|
+
* resolve strapi reference loss in setInterval cleanup functions ([1caae3f](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/1caae3f81c274d64ee4e15457d8989e4873e9875))
|
|
202
|
+
|
|
203
|
+
## [5.1.2](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.1...v5.1.2) (2025-12-04)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
### Bug Fixes
|
|
207
|
+
|
|
208
|
+
* hide internal content-types from Content Manager (Strapi v5) ([6cc1309](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/6cc13095229800ad00c71964738215453e102f27))
|
|
209
|
+
|
|
210
|
+
## [5.1.1](https://github.com/Schero94/strapi-plugin-magic-link-v5/compare/v5.1.0...v5.1.1) (2025-12-04)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
### Bug Fixes
|
|
214
|
+
|
|
215
|
+
* trigger release for code quality improvements ([ed51892](https://github.com/Schero94/strapi-plugin-magic-link-v5/commit/ed51892f120278841b2798adb371fa8c56f88c7a))
|
package/LICENSE
CHANGED
|
@@ -12,12 +12,6 @@ furnished to do so, subject to the following conditions:
|
|
|
12
12
|
The above copyright notice and this permission notice shall be included in all
|
|
13
13
|
copies or substantial portions of the Software.
|
|
14
14
|
|
|
15
|
-
**ADDITIONAL CONDITION:**
|
|
16
|
-
The license validation system (including but not limited to license-guard.js,
|
|
17
|
-
license controller, and related API endpoints) must remain intact and functional.
|
|
18
|
-
Removing, bypassing, or disabling the license validation system is strictly
|
|
19
|
-
prohibited.
|
|
20
|
-
|
|
21
15
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
22
16
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
23
17
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
package/README.md
CHANGED
|
@@ -783,6 +783,71 @@ npm install strapi-plugin-email-designer-5
|
|
|
783
783
|
|
|
784
784
|
---
|
|
785
785
|
|
|
786
|
+
## 🔑 Required Environment Variables
|
|
787
|
+
|
|
788
|
+
The plugin stores secrets that must be protected across restarts and should
|
|
789
|
+
not be rotated with the rest of your Strapi key material. Two env vars are
|
|
790
|
+
**mandatory in production** (the plugin refuses to boot without them):
|
|
791
|
+
|
|
792
|
+
```bash
|
|
793
|
+
# 32+ random bytes — used as AES-256 key for TOTP secrets.
|
|
794
|
+
# DO NOT ROTATE: existing TOTP secrets would become undecryptable.
|
|
795
|
+
MAGIC_LINK_ENCRYPTION_KEY=<hex from: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))">
|
|
796
|
+
|
|
797
|
+
# 16+ random bytes — pepper mixed into OTP code hashes to defeat
|
|
798
|
+
# rainbow-table attacks on stored 6-digit codes if the DB is ever leaked.
|
|
799
|
+
MAGIC_LINK_OTP_PEPPER=<hex from: node -e "console.log(require('crypto').randomBytes(24).toString('hex'))">
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
In non-production environments (`NODE_ENV !== 'production'`) the plugin
|
|
803
|
+
falls back to derived values so local dev setups keep working — but a WARN
|
|
804
|
+
is logged once per process.
|
|
805
|
+
|
|
806
|
+
---
|
|
807
|
+
|
|
808
|
+
## 🌐 Reverse Proxy / Rate-Limit Trust
|
|
809
|
+
|
|
810
|
+
Rate limits and all audit logs identify the caller by `ctx.request.ip`,
|
|
811
|
+
which Koa derives from the TCP connection by default. If your Strapi is
|
|
812
|
+
behind a reverse proxy (nginx, Caddy, Cloudflare, ALB, …) you MUST:
|
|
813
|
+
|
|
814
|
+
1. Enable proxy trust in `config/server.{js,ts}`:
|
|
815
|
+
|
|
816
|
+
```js
|
|
817
|
+
module.exports = ({ env }) => ({
|
|
818
|
+
proxy: true, // Trust X-Forwarded-For from the proxy
|
|
819
|
+
// ... rest of config
|
|
820
|
+
});
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
2. Configure the proxy to **strip any incoming `X-Forwarded-For`** and
|
|
824
|
+
emit only its own value. Without this, an attacker can spoof the
|
|
825
|
+
header, defeating per-IP rate limits.
|
|
826
|
+
|
|
827
|
+
3. If you have multiple proxy hops, pin trust to the outermost ones via
|
|
828
|
+
Koa's `app.proxyIpHeader` / `app.maxIpsCount` (see Koa docs).
|
|
829
|
+
|
|
830
|
+
A misconfigured deployment will either:
|
|
831
|
+
- **Count all requests as the proxy's single IP** (everyone rate-limited together), or
|
|
832
|
+
- **Trust spoofed client IPs** (per-IP rate limit effectively disabled).
|
|
833
|
+
|
|
834
|
+
---
|
|
835
|
+
|
|
836
|
+
## 🔐 OTP Strict Binding
|
|
837
|
+
|
|
838
|
+
Starting with this release, `/otp/send`, `/otp/verify` and `/otp/resend`
|
|
839
|
+
require the client to present the `magicLinkToken` they received from
|
|
840
|
+
`/magic-link/login` when it returned `{ requiresOTP: true }`. This prevents
|
|
841
|
+
`/otp/send` from being abused as a standalone email-bombing vector against
|
|
842
|
+
arbitrary addresses and prevents `/otp/verify` from being a first-factor
|
|
843
|
+
login on its own.
|
|
844
|
+
|
|
845
|
+
If you have legacy integrations that must keep the old behaviour, disable
|
|
846
|
+
it via settings: `otp_strict_binding: false`. Doing so emits a WARN on
|
|
847
|
+
every request and is **not recommended**.
|
|
848
|
+
|
|
849
|
+
---
|
|
850
|
+
|
|
786
851
|
## 🎨 Email Templates
|
|
787
852
|
|
|
788
853
|
Customize your magic link emails using template variables:
|
|
@@ -1008,6 +1073,49 @@ If this plugin saves you time and you'd like to support development:
|
|
|
1008
1073
|
|
|
1009
1074
|
---
|
|
1010
1075
|
|
|
1076
|
+
## Security Advisories & Dependency Overrides
|
|
1077
|
+
|
|
1078
|
+
This plugin ships with a first-party dependency tree audited on every
|
|
1079
|
+
release, but two transitive paths are governed by upstream packages we
|
|
1080
|
+
do not control. If your own `npm audit` flags any of the following,
|
|
1081
|
+
add the matching entry to your **Strapi project's** `package.json`
|
|
1082
|
+
(not this plugin's — npm `overrides` only take effect on the
|
|
1083
|
+
root project):
|
|
1084
|
+
|
|
1085
|
+
```jsonc
|
|
1086
|
+
{
|
|
1087
|
+
"overrides": {
|
|
1088
|
+
// GHSA-xq3m-2v4x-88gg — protobufjs <7.5.5 arbitrary code execution.
|
|
1089
|
+
// Reaches us via @whiskeysockets/baileys → libsignal → protobufjs.
|
|
1090
|
+
// We already ship this override for local development; apply it in
|
|
1091
|
+
// your Strapi project so the fix propagates to the installed tree.
|
|
1092
|
+
"protobufjs": "^7.5.5",
|
|
1093
|
+
|
|
1094
|
+
// Optional: if you do not use the WhatsApp delivery feature, you
|
|
1095
|
+
// can also skip installing @whiskeysockets/baileys altogether:
|
|
1096
|
+
// npm install --omit=optional
|
|
1097
|
+
// (The Magic-Link code path detects the missing module and
|
|
1098
|
+
// disables the WhatsApp controller at runtime — the rest of the
|
|
1099
|
+
// plugin keeps working.)
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
```
|
|
1103
|
+
|
|
1104
|
+
After editing `package.json`, run:
|
|
1105
|
+
|
|
1106
|
+
```bash
|
|
1107
|
+
rm -rf node_modules package-lock.json
|
|
1108
|
+
npm install
|
|
1109
|
+
npm audit
|
|
1110
|
+
```
|
|
1111
|
+
|
|
1112
|
+
The critical `protobufjs` advisory disappears once the override is in
|
|
1113
|
+
place. The remaining `@strapi/design-system → lodash` advisory is a
|
|
1114
|
+
Strapi-core issue and will clear up automatically when you upgrade
|
|
1115
|
+
`@strapi/strapi` to the latest patch release.
|
|
1116
|
+
|
|
1117
|
+
---
|
|
1118
|
+
|
|
1011
1119
|
<div align="center">
|
|
1012
1120
|
|
|
1013
1121
|
**Made with ❤️ by [Schero94](https://github.com/Schero94)**
|
|
@@ -5,7 +5,7 @@ import { useIntl } from "react-intl";
|
|
|
5
5
|
import { Flex, Loader, Box, Typography, Button, TextInput, Badge } from "@strapi/design-system";
|
|
6
6
|
import { Phone, Check, Message, ArrowClockwise } from "@strapi/icons";
|
|
7
7
|
import { useNotification, useFetchClient } from "@strapi/strapi/admin";
|
|
8
|
-
import { g as getTrad } from "./index-
|
|
8
|
+
import { g as getTrad } from "./index-BCopEXYL.mjs";
|
|
9
9
|
const theme = {
|
|
10
10
|
colors: {
|
|
11
11
|
primary: { 700: "#075985", 100: "#E0F2FE", 50: "#F0F9FF" },
|
|
@@ -17,9 +17,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
|
17
17
|
);
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
|
-
const strapi = {
|
|
21
|
-
name: "magic-link"
|
|
22
|
-
};
|
|
20
|
+
const strapi = { "name": "magic-link" };
|
|
23
21
|
const pluginPkg = {
|
|
24
22
|
strapi
|
|
25
23
|
};
|
|
@@ -33,6 +31,7 @@ const Initializer = ({ setPlugin }) => {
|
|
|
33
31
|
};
|
|
34
32
|
const PluginIcon = () => /* @__PURE__ */ jsx(Key, {});
|
|
35
33
|
const pluginPermissions = {
|
|
34
|
+
access: [{ action: "plugin::magic-link.access", subject: null }],
|
|
36
35
|
readSettings: [{ action: "plugin::magic-link.settings.read", subject: null }]
|
|
37
36
|
};
|
|
38
37
|
const getTrad = (id) => {
|
|
@@ -59,10 +58,9 @@ const index = {
|
|
|
59
58
|
},
|
|
60
59
|
Component: () => import(
|
|
61
60
|
/* webpackChunkName: "magic-link-tokens" */
|
|
62
|
-
"./index-
|
|
61
|
+
"./index-BdhtSEYZ.mjs"
|
|
63
62
|
),
|
|
64
|
-
permissions:
|
|
65
|
-
// Leeres Array = keine Permission-Prüfung nötig
|
|
63
|
+
permissions: pluginPermissions.access
|
|
66
64
|
});
|
|
67
65
|
app.createSettingSection(
|
|
68
66
|
{
|
|
@@ -82,7 +80,7 @@ const index = {
|
|
|
82
80
|
to: `${PLUGIN_ID}/config`,
|
|
83
81
|
Component: () => import(
|
|
84
82
|
/* webpackChunkName: "magic-link-settings" */
|
|
85
|
-
"./index-
|
|
83
|
+
"./index-mocjHxcq.mjs"
|
|
86
84
|
),
|
|
87
85
|
permissions: pluginPermissions.readSettings
|
|
88
86
|
},
|
|
@@ -97,7 +95,7 @@ const index = {
|
|
|
97
95
|
/* webpackChunkName: "magic-link-license" */
|
|
98
96
|
"./index-B8urUtiz.mjs"
|
|
99
97
|
),
|
|
100
|
-
permissions:
|
|
98
|
+
permissions: pluginPermissions.access
|
|
101
99
|
},
|
|
102
100
|
{
|
|
103
101
|
intlLabel: {
|
|
@@ -110,7 +108,7 @@ const index = {
|
|
|
110
108
|
/* webpackChunkName: "magic-link-upgrade" */
|
|
111
109
|
"./LicensePage-CCNW2hT6.mjs"
|
|
112
110
|
),
|
|
113
|
-
permissions:
|
|
111
|
+
permissions: pluginPermissions.access
|
|
114
112
|
},
|
|
115
113
|
{
|
|
116
114
|
intlLabel: {
|
|
@@ -121,9 +119,9 @@ const index = {
|
|
|
121
119
|
to: `${PLUGIN_ID}/whatsapp`,
|
|
122
120
|
Component: () => import(
|
|
123
121
|
/* webpackChunkName: "magic-link-whatsapp" */
|
|
124
|
-
"./index-
|
|
122
|
+
"./index-2avmGJ5M.mjs"
|
|
125
123
|
),
|
|
126
|
-
permissions:
|
|
124
|
+
permissions: pluginPermissions.access
|
|
127
125
|
}
|
|
128
126
|
]
|
|
129
127
|
);
|
|
@@ -7,7 +7,7 @@ const styled = require("styled-components");
|
|
|
7
7
|
const reactIntl = require("react-intl");
|
|
8
8
|
const designSystem = require("@strapi/design-system");
|
|
9
9
|
const icons = require("@strapi/icons");
|
|
10
|
-
const index = require("./index-
|
|
10
|
+
const index = require("./index-DYLdjufr.js");
|
|
11
11
|
const admin = require("@strapi/strapi/admin");
|
|
12
12
|
const LicenseGuard = require("./LicenseGuard-DqyOwTlf.js");
|
|
13
13
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
@@ -5,7 +5,7 @@ import styled, { keyframes, css } from "styled-components";
|
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
6
|
import { Box, Flex, Typography, Button, TextInput, Textarea, Checkbox, IconButton, Loader, Searchbar, SingleSelect, SingleSelectOption, Thead, Tr, Th, Tbody, Td, Pagination, PreviousLink, PageLink, NextLink, Table, Badge, VisuallyHidden, Main } from "@strapi/design-system";
|
|
7
7
|
import { Cross, Sparkle, Check, Shield, Clock, Lock, Trash, ArrowClockwise, CaretDown, User, Monitor, Calendar, Plus, Earth, WarningCircle, Server, Eye, Mail, Cog, Key, Link } from "@strapi/icons";
|
|
8
|
-
import { g as getTrad, P as PLUGIN_ID } from "./index-
|
|
8
|
+
import { g as getTrad, P as PLUGIN_ID } from "./index-BCopEXYL.mjs";
|
|
9
9
|
import { useFetchClient, useNotification } from "@strapi/strapi/admin";
|
|
10
10
|
import { L as LicenseGuard, a as LanguageProvider } from "./LicenseGuard-5sMwgS6j.mjs";
|
|
11
11
|
const CreateTokenModal = ({ isOpen, onClose, onSubmit, formData, setFormData }) => {
|
|
@@ -7,7 +7,7 @@ const reactIntl = require("react-intl");
|
|
|
7
7
|
const designSystem = require("@strapi/design-system");
|
|
8
8
|
const icons = require("@strapi/icons");
|
|
9
9
|
const admin = require("@strapi/strapi/admin");
|
|
10
|
-
const index = require("./index-
|
|
10
|
+
const index = require("./index-DYLdjufr.js");
|
|
11
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
12
12
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
13
13
|
const theme = {
|
|
@@ -18,9 +18,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
|
18
18
|
);
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
|
-
const strapi = {
|
|
22
|
-
name: "magic-link"
|
|
23
|
-
};
|
|
21
|
+
const strapi = { "name": "magic-link" };
|
|
24
22
|
const pluginPkg = {
|
|
25
23
|
strapi
|
|
26
24
|
};
|
|
@@ -34,6 +32,7 @@ const Initializer = ({ setPlugin }) => {
|
|
|
34
32
|
};
|
|
35
33
|
const PluginIcon = () => /* @__PURE__ */ jsxRuntime.jsx(icons.Key, {});
|
|
36
34
|
const pluginPermissions = {
|
|
35
|
+
access: [{ action: "plugin::magic-link.access", subject: null }],
|
|
37
36
|
readSettings: [{ action: "plugin::magic-link.settings.read", subject: null }]
|
|
38
37
|
};
|
|
39
38
|
const getTrad = (id) => {
|
|
@@ -60,10 +59,9 @@ const index = {
|
|
|
60
59
|
},
|
|
61
60
|
Component: () => Promise.resolve().then(() => require(
|
|
62
61
|
/* webpackChunkName: "magic-link-tokens" */
|
|
63
|
-
"./index-
|
|
62
|
+
"./index-BDG7geOg.js"
|
|
64
63
|
)),
|
|
65
|
-
permissions:
|
|
66
|
-
// Leeres Array = keine Permission-Prüfung nötig
|
|
64
|
+
permissions: pluginPermissions.access
|
|
67
65
|
});
|
|
68
66
|
app.createSettingSection(
|
|
69
67
|
{
|
|
@@ -83,7 +81,7 @@ const index = {
|
|
|
83
81
|
to: `${PLUGIN_ID}/config`,
|
|
84
82
|
Component: () => Promise.resolve().then(() => require(
|
|
85
83
|
/* webpackChunkName: "magic-link-settings" */
|
|
86
|
-
"./index-
|
|
84
|
+
"./index-KsidtTDP.js"
|
|
87
85
|
)),
|
|
88
86
|
permissions: pluginPermissions.readSettings
|
|
89
87
|
},
|
|
@@ -98,7 +96,7 @@ const index = {
|
|
|
98
96
|
/* webpackChunkName: "magic-link-license" */
|
|
99
97
|
"./index-PgHpSdc8.js"
|
|
100
98
|
)),
|
|
101
|
-
permissions:
|
|
99
|
+
permissions: pluginPermissions.access
|
|
102
100
|
},
|
|
103
101
|
{
|
|
104
102
|
intlLabel: {
|
|
@@ -111,7 +109,7 @@ const index = {
|
|
|
111
109
|
/* webpackChunkName: "magic-link-upgrade" */
|
|
112
110
|
"./LicensePage-2M-vOJX8.js"
|
|
113
111
|
)),
|
|
114
|
-
permissions:
|
|
112
|
+
permissions: pluginPermissions.access
|
|
115
113
|
},
|
|
116
114
|
{
|
|
117
115
|
intlLabel: {
|
|
@@ -122,9 +120,9 @@ const index = {
|
|
|
122
120
|
to: `${PLUGIN_ID}/whatsapp`,
|
|
123
121
|
Component: () => Promise.resolve().then(() => require(
|
|
124
122
|
/* webpackChunkName: "magic-link-whatsapp" */
|
|
125
|
-
"./index-
|
|
123
|
+
"./index-DGUMEnkD.js"
|
|
126
124
|
)),
|
|
127
|
-
permissions:
|
|
125
|
+
permissions: pluginPermissions.access
|
|
128
126
|
}
|
|
129
127
|
]
|
|
130
128
|
);
|
|
@@ -7,7 +7,7 @@ const reactIntl = require("react-intl");
|
|
|
7
7
|
const designSystem = require("@strapi/design-system");
|
|
8
8
|
const icons = require("@strapi/icons");
|
|
9
9
|
const admin = require("@strapi/strapi/admin");
|
|
10
|
-
const index = require("./index-
|
|
10
|
+
const index = require("./index-DYLdjufr.js");
|
|
11
11
|
const LicenseGuard = require("./LicenseGuard-DqyOwTlf.js");
|
|
12
12
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
13
13
|
const styled__default = /* @__PURE__ */ _interopDefault(styled);
|
|
@@ -5,7 +5,7 @@ import { useIntl } from "react-intl";
|
|
|
5
5
|
import { Box, Typography, Flex, Button, Accordion, SingleSelect, SingleSelectOption, Grid, Switch, NumberInput, TextInput, Divider, Textarea, Badge } from "@strapi/design-system";
|
|
6
6
|
import { Check, Cog, Lightning, Shield, Mail, CheckCircle, Code, Link, Lock, Key } from "@strapi/icons";
|
|
7
7
|
import { useNotification, useFetchClient } from "@strapi/strapi/admin";
|
|
8
|
-
import { g as getTrad } from "./index-
|
|
8
|
+
import { g as getTrad } from "./index-BCopEXYL.mjs";
|
|
9
9
|
import { u as usePluginLanguage, L as LicenseGuard, a as LanguageProvider } from "./LicenseGuard-5sMwgS6j.mjs";
|
|
10
10
|
const EMAIL_TEMPLATES = {
|
|
11
11
|
modern: {
|
package/dist/admin/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const index = require("./index-DYLdjufr.js");
|
|
3
4
|
require("@strapi/icons");
|
|
4
|
-
|
|
5
|
+
exports.default = index.index;
|
package/dist/admin/index.mjs
CHANGED