@strapi/plugin-documentation 5.12.1 → 5.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/{chunks/Settings-Cpj-uI9B.js → components/SettingsForm.js} +7 -52
- package/dist/admin/components/SettingsForm.js.map +1 -0
- package/dist/admin/{chunks/Settings-DyLMOJEx.mjs → components/SettingsForm.mjs} +7 -52
- package/dist/admin/components/SettingsForm.mjs.map +1 -0
- package/dist/admin/constants.js +47 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +45 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +93 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +94 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/{chunks/App-DC2H8bJ5.js → pages/App.js} +8 -8
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/{chunks/App-D6yQIQar.mjs → pages/App.mjs} +4 -4
- package/dist/admin/pages/App.mjs.map +1 -0
- package/dist/admin/pages/Settings.js +54 -0
- package/dist/admin/pages/Settings.js.map +1 -0
- package/dist/admin/pages/Settings.mjs +52 -0
- package/dist/admin/pages/Settings.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/{chunks/getTrad-AvLNMP3V.js → services/api.js} +1 -5
- package/dist/admin/services/api.js.map +1 -0
- package/dist/admin/{chunks/getTrad-D9juLfq6.mjs → services/api.mjs} +2 -5
- package/dist/admin/services/api.mjs.map +1 -0
- package/dist/admin/{chunks/ar-Dix6VU4a.js → translations/ar.json.js} +2 -2
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/{chunks/ar-Bu09tPI1.mjs → translations/ar.json.mjs} +1 -1
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/{chunks/cs-C6k-mH5i.js → translations/cs.json.js} +2 -2
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/{chunks/cs-tf-UeGst.mjs → translations/cs.json.mjs} +1 -1
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/{chunks/de-DYskRe8j.js → translations/de.json.js} +2 -2
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/{chunks/de-CMhqnPQP.mjs → translations/de.json.mjs} +1 -1
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/{chunks/dk-BYJqzR_M.js → translations/dk.json.js} +2 -2
- package/dist/admin/translations/dk.json.js.map +1 -0
- package/dist/admin/{chunks/dk-BmQOOeIc.mjs → translations/dk.json.mjs} +1 -1
- package/dist/admin/translations/dk.json.mjs.map +1 -0
- package/dist/admin/{chunks/en-B90IBmYB.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-Cx8yPuig.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/es-5WsjlhIl.js → translations/es.json.js} +2 -2
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/{chunks/es-DAdgO3Ey.mjs → translations/es.json.mjs} +1 -1
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/{chunks/fr-C-vHEudQ.js → translations/fr.json.js} +2 -2
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/{chunks/fr-B5fjFqKX.mjs → translations/fr.json.mjs} +1 -1
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/{chunks/id-BKiCYOdS.js → translations/id.json.js} +2 -2
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/{chunks/id-CLApXj97.mjs → translations/id.json.mjs} +1 -1
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/{chunks/it-B7SnHLP2.js → translations/it.json.js} +2 -2
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/{chunks/it-C7GcWYBa.mjs → translations/it.json.mjs} +1 -1
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/{chunks/ko-CjOasZmz.js → translations/ko.json.js} +2 -2
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/{chunks/ko-DZvks90a.mjs → translations/ko.json.mjs} +1 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/{chunks/ms-C2TEZHkD.js → translations/ms.json.js} +2 -2
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/{chunks/ms-Df9gDB9M.mjs → translations/ms.json.mjs} +1 -1
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/{chunks/nl-CLp2dhr9.js → translations/nl.json.js} +2 -2
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/{chunks/nl-BlmTMaTL.mjs → translations/nl.json.mjs} +1 -1
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pl-C8WRO2pt.js → translations/pl.json.js} +2 -2
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/{chunks/pl-5iT3b9r4.mjs → translations/pl.json.mjs} +1 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-BR-Ds-dLXzD.js → translations/pt-BR.json.js} +2 -2
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BR-De5jokla.mjs → translations/pt-BR.json.mjs} +1 -1
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-DL-rrjA1.js → translations/pt.json.js} +2 -2
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BK5YbXpM.mjs → translations/pt.json.mjs} +1 -1
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/{chunks/ru-Cqv4k9my.js → translations/ru.json.js} +2 -2
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/{chunks/ru-C_16WuLP.mjs → translations/ru.json.mjs} +1 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/{chunks/sk-D6l_EMOT.js → translations/sk.json.js} +2 -2
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/{chunks/sk-B7RadPe4.mjs → translations/sk.json.mjs} +1 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/{chunks/sv-Xg5gbVO9.js → translations/sv.json.js} +2 -2
- package/dist/admin/translations/sv.json.js.map +1 -0
- package/dist/admin/{chunks/sv-DK5DOsrV.mjs → translations/sv.json.mjs} +1 -1
- package/dist/admin/translations/sv.json.mjs.map +1 -0
- package/dist/admin/{chunks/th-Pci1U3n6.js → translations/th.json.js} +2 -2
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/{chunks/th-DNiRgKQH.mjs → translations/th.json.mjs} +1 -1
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/{chunks/tr-CBlxk5Of.js → translations/tr.json.js} +2 -2
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/{chunks/tr-CWX4cUiB.mjs → translations/tr.json.mjs} +1 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-BkF_x68T.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-CWOtQQic.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/{chunks/vi-CAG7iDHR.js → translations/vi.json.js} +2 -2
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/{chunks/vi-geadDLtq.mjs → translations/vi.json.mjs} +1 -1
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-Hans-CtXQdJhw.js → translations/zh-Hans.json.js} +2 -2
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/{chunks/zh-Hans-fcRf-TLx.mjs → translations/zh-Hans.json.mjs} +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-rKHsKNA3.js → translations/zh.json.js} +2 -2
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/{chunks/zh-E4LX--2j.mjs → translations/zh.json.mjs} +1 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/baseQuery.js +8 -0
- package/dist/admin/utils/baseQuery.js.map +1 -0
- package/dist/admin/utils/baseQuery.mjs +6 -0
- package/dist/admin/utils/baseQuery.mjs.map +1 -0
- package/dist/admin/utils/getTrad.js +8 -0
- package/dist/admin/utils/getTrad.js.map +1 -0
- package/dist/admin/utils/getTrad.mjs +6 -0
- package/dist/admin/utils/getTrad.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/server/bootstrap.js +57 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +55 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/config/default-plugin-config.js +88 -0
- package/dist/server/config/default-plugin-config.js.map +1 -0
- package/dist/server/config/default-plugin-config.mjs +86 -0
- package/dist/server/config/default-plugin-config.mjs.map +1 -0
- package/dist/server/config/index.js +10 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/index.mjs +8 -0
- package/dist/server/config/index.mjs.map +1 -0
- package/dist/server/controllers/documentation.js +185 -0
- package/dist/server/controllers/documentation.js.map +1 -0
- package/dist/server/controllers/documentation.mjs +181 -0
- package/dist/server/controllers/documentation.mjs.map +1 -0
- package/dist/server/controllers/index.js +10 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +8 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/index.js +12 -1586
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +6 -1561
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/documentation.js +27 -0
- package/dist/server/middlewares/documentation.js.map +1 -0
- package/dist/server/middlewares/documentation.mjs +25 -0
- package/dist/server/middlewares/documentation.mjs.map +1 -0
- package/dist/server/middlewares/restrict-access.js +23 -0
- package/dist/server/middlewares/restrict-access.js.map +1 -0
- package/dist/server/middlewares/restrict-access.mjs +21 -0
- package/dist/server/middlewares/restrict-access.mjs.map +1 -0
- package/dist/server/{chunks/index--0fU1WeK.js → public/index.html.js} +2 -2
- package/dist/server/public/index.html.js.map +1 -0
- package/dist/server/{chunks/index-Dz3orHaf.mjs → public/index.html.mjs} +1 -1
- package/dist/server/public/index.html.mjs.map +1 -0
- package/dist/server/{chunks/login-CMPqkCFT.js → public/login.html.js} +2 -2
- package/dist/server/public/login.html.js.map +1 -0
- package/dist/server/{chunks/login-CYdORE5u.mjs → public/login.html.mjs} +1 -1
- package/dist/server/public/login.html.mjs.map +1 -0
- package/dist/server/register.js +12 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +10 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/index.js +106 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +104 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/services/documentation.js +182 -0
- package/dist/server/services/documentation.js.map +1 -0
- package/dist/server/services/documentation.mjs +180 -0
- package/dist/server/services/documentation.mjs.map +1 -0
- package/dist/server/services/helpers/build-api-endpoint-path.js +162 -0
- package/dist/server/services/helpers/build-api-endpoint-path.js.map +1 -0
- package/dist/server/services/helpers/build-api-endpoint-path.mjs +141 -0
- package/dist/server/services/helpers/build-api-endpoint-path.mjs.map +1 -0
- package/dist/server/services/helpers/build-component-schema.js +167 -0
- package/dist/server/services/helpers/build-component-schema.js.map +1 -0
- package/dist/server/services/helpers/build-component-schema.mjs +165 -0
- package/dist/server/services/helpers/build-component-schema.mjs.map +1 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.js +301 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.js.map +1 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs +299 -0
- package/dist/server/services/helpers/utils/clean-schema-attributes.mjs.map +1 -0
- package/dist/server/services/helpers/utils/get-api-responses.js +88 -0
- package/dist/server/services/helpers/utils/get-api-responses.js.map +1 -0
- package/dist/server/services/helpers/utils/get-api-responses.mjs +86 -0
- package/dist/server/services/helpers/utils/get-api-responses.mjs.map +1 -0
- package/dist/server/services/helpers/utils/get-schema-data.js +43 -0
- package/dist/server/services/helpers/utils/get-schema-data.js.map +1 -0
- package/dist/server/services/helpers/utils/get-schema-data.mjs +41 -0
- package/dist/server/services/helpers/utils/get-schema-data.mjs.map +1 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.js +40 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.js.map +1 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.mjs +38 -0
- package/dist/server/services/helpers/utils/loop-content-type-names.mjs.map +1 -0
- package/dist/server/services/helpers/utils/pascal-case.js +10 -0
- package/dist/server/services/helpers/utils/pascal-case.js.map +1 -0
- package/dist/server/services/helpers/utils/pascal-case.mjs +8 -0
- package/dist/server/services/helpers/utils/pascal-case.mjs.map +1 -0
- package/dist/server/services/helpers/utils/query-params.js +109 -0
- package/dist/server/services/helpers/utils/query-params.js.map +1 -0
- package/dist/server/services/helpers/utils/query-params.mjs +107 -0
- package/dist/server/services/helpers/utils/query-params.mjs.map +1 -0
- package/dist/server/services/helpers/utils/routes.js +11 -0
- package/dist/server/services/helpers/utils/routes.js.map +1 -0
- package/dist/server/services/helpers/utils/routes.mjs +9 -0
- package/dist/server/services/helpers/utils/routes.mjs.map +1 -0
- package/dist/server/services/index.js +13 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +11 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/override.js +45 -0
- package/dist/server/services/override.js.map +1 -0
- package/dist/server/services/override.mjs +43 -0
- package/dist/server/services/override.mjs.map +1 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.js +24 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.js.map +1 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.mjs +22 -0
- package/dist/server/services/utils/get-plugins-that-need-documentation.mjs.map +1 -0
- package/dist/server/utils.js +10 -0
- package/dist/server/utils.js.map +1 -0
- package/dist/server/utils.mjs +8 -0
- package/dist/server/utils.mjs.map +1 -0
- package/package.json +6 -6
- package/dist/admin/chunks/App-D6yQIQar.mjs.map +0 -1
- package/dist/admin/chunks/App-DC2H8bJ5.js.map +0 -1
- package/dist/admin/chunks/Settings-Cpj-uI9B.js.map +0 -1
- package/dist/admin/chunks/Settings-DyLMOJEx.mjs.map +0 -1
- package/dist/admin/chunks/ar-Bu09tPI1.mjs.map +0 -1
- package/dist/admin/chunks/ar-Dix6VU4a.js.map +0 -1
- package/dist/admin/chunks/cs-C6k-mH5i.js.map +0 -1
- package/dist/admin/chunks/cs-tf-UeGst.mjs.map +0 -1
- package/dist/admin/chunks/de-CMhqnPQP.mjs.map +0 -1
- package/dist/admin/chunks/de-DYskRe8j.js.map +0 -1
- package/dist/admin/chunks/dk-BYJqzR_M.js.map +0 -1
- package/dist/admin/chunks/dk-BmQOOeIc.mjs.map +0 -1
- package/dist/admin/chunks/en-B90IBmYB.js.map +0 -1
- package/dist/admin/chunks/en-Cx8yPuig.mjs.map +0 -1
- package/dist/admin/chunks/es-5WsjlhIl.js.map +0 -1
- package/dist/admin/chunks/es-DAdgO3Ey.mjs.map +0 -1
- package/dist/admin/chunks/fr-B5fjFqKX.mjs.map +0 -1
- package/dist/admin/chunks/fr-C-vHEudQ.js.map +0 -1
- package/dist/admin/chunks/getTrad-AvLNMP3V.js.map +0 -1
- package/dist/admin/chunks/getTrad-D9juLfq6.mjs.map +0 -1
- package/dist/admin/chunks/id-BKiCYOdS.js.map +0 -1
- package/dist/admin/chunks/id-CLApXj97.mjs.map +0 -1
- package/dist/admin/chunks/index-BHy3RKs2.mjs +0 -144
- package/dist/admin/chunks/index-BHy3RKs2.mjs.map +0 -1
- package/dist/admin/chunks/index-BSW-EfNW.js +0 -148
- package/dist/admin/chunks/index-BSW-EfNW.js.map +0 -1
- package/dist/admin/chunks/it-B7SnHLP2.js.map +0 -1
- package/dist/admin/chunks/it-C7GcWYBa.mjs.map +0 -1
- package/dist/admin/chunks/ko-CjOasZmz.js.map +0 -1
- package/dist/admin/chunks/ko-DZvks90a.mjs.map +0 -1
- package/dist/admin/chunks/ms-C2TEZHkD.js.map +0 -1
- package/dist/admin/chunks/ms-Df9gDB9M.mjs.map +0 -1
- package/dist/admin/chunks/nl-BlmTMaTL.mjs.map +0 -1
- package/dist/admin/chunks/nl-CLp2dhr9.js.map +0 -1
- package/dist/admin/chunks/pl-5iT3b9r4.mjs.map +0 -1
- package/dist/admin/chunks/pl-C8WRO2pt.js.map +0 -1
- package/dist/admin/chunks/pt-BK5YbXpM.mjs.map +0 -1
- package/dist/admin/chunks/pt-BR-De5jokla.mjs.map +0 -1
- package/dist/admin/chunks/pt-BR-Ds-dLXzD.js.map +0 -1
- package/dist/admin/chunks/pt-DL-rrjA1.js.map +0 -1
- package/dist/admin/chunks/ru-C_16WuLP.mjs.map +0 -1
- package/dist/admin/chunks/ru-Cqv4k9my.js.map +0 -1
- package/dist/admin/chunks/sk-B7RadPe4.mjs.map +0 -1
- package/dist/admin/chunks/sk-D6l_EMOT.js.map +0 -1
- package/dist/admin/chunks/sv-DK5DOsrV.mjs.map +0 -1
- package/dist/admin/chunks/sv-Xg5gbVO9.js.map +0 -1
- package/dist/admin/chunks/th-DNiRgKQH.mjs.map +0 -1
- package/dist/admin/chunks/th-Pci1U3n6.js.map +0 -1
- package/dist/admin/chunks/tr-CBlxk5Of.js.map +0 -1
- package/dist/admin/chunks/tr-CWX4cUiB.mjs.map +0 -1
- package/dist/admin/chunks/uk-BkF_x68T.js.map +0 -1
- package/dist/admin/chunks/uk-CWOtQQic.mjs.map +0 -1
- package/dist/admin/chunks/vi-CAG7iDHR.js.map +0 -1
- package/dist/admin/chunks/vi-geadDLtq.mjs.map +0 -1
- package/dist/admin/chunks/zh-E4LX--2j.mjs.map +0 -1
- package/dist/admin/chunks/zh-Hans-CtXQdJhw.js.map +0 -1
- package/dist/admin/chunks/zh-Hans-fcRf-TLx.mjs.map +0 -1
- package/dist/admin/chunks/zh-rKHsKNA3.js.map +0 -1
- package/dist/server/chunks/index--0fU1WeK.js.map +0 -1
- package/dist/server/chunks/index-Dz3orHaf.mjs.map +0 -1
- package/dist/server/chunks/login-CMPqkCFT.js.map +0 -1
- package/dist/server/chunks/login-CYdORE5u.mjs.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const defaultConfig = {
|
|
2
|
+
openapi: '3.0.0',
|
|
3
|
+
info: {
|
|
4
|
+
version: '1.0.0',
|
|
5
|
+
title: 'DOCUMENTATION',
|
|
6
|
+
description: '',
|
|
7
|
+
termsOfService: 'YOUR_TERMS_OF_SERVICE_URL',
|
|
8
|
+
contact: {
|
|
9
|
+
name: 'TEAM',
|
|
10
|
+
email: 'contact-email@something.io',
|
|
11
|
+
url: 'mywebsite.io'
|
|
12
|
+
},
|
|
13
|
+
license: {
|
|
14
|
+
name: 'Apache 2.0',
|
|
15
|
+
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
'x-strapi-config': {
|
|
19
|
+
plugins: null,
|
|
20
|
+
mutateDocumentation: null
|
|
21
|
+
},
|
|
22
|
+
servers: [],
|
|
23
|
+
externalDocs: {
|
|
24
|
+
description: 'Find out more',
|
|
25
|
+
url: 'https://docs.strapi.io/developer-docs/latest/getting-started/introduction.html'
|
|
26
|
+
},
|
|
27
|
+
security: [
|
|
28
|
+
{
|
|
29
|
+
bearerAuth: []
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
paths: {},
|
|
33
|
+
components: {
|
|
34
|
+
securitySchemes: {
|
|
35
|
+
bearerAuth: {
|
|
36
|
+
type: 'http',
|
|
37
|
+
scheme: 'bearer',
|
|
38
|
+
bearerFormat: 'JWT'
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
schemas: {
|
|
42
|
+
Error: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
required: [
|
|
45
|
+
'error'
|
|
46
|
+
],
|
|
47
|
+
properties: {
|
|
48
|
+
data: {
|
|
49
|
+
nullable: true,
|
|
50
|
+
oneOf: [
|
|
51
|
+
{
|
|
52
|
+
type: 'object'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'array',
|
|
56
|
+
items: {
|
|
57
|
+
type: 'object'
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
error: {
|
|
63
|
+
type: 'object',
|
|
64
|
+
properties: {
|
|
65
|
+
status: {
|
|
66
|
+
type: 'integer'
|
|
67
|
+
},
|
|
68
|
+
name: {
|
|
69
|
+
type: 'string'
|
|
70
|
+
},
|
|
71
|
+
message: {
|
|
72
|
+
type: 'string'
|
|
73
|
+
},
|
|
74
|
+
details: {
|
|
75
|
+
type: 'object'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export { defaultConfig };
|
|
86
|
+
//# sourceMappingURL=default-plugin-config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-plugin-config.mjs","sources":["../../../server/src/config/default-plugin-config.ts"],"sourcesContent":["import type { PluginConfig } from '../types';\n\nexport const defaultConfig: PluginConfig = {\n openapi: '3.0.0',\n info: {\n version: '1.0.0',\n title: 'DOCUMENTATION',\n description: '',\n termsOfService: 'YOUR_TERMS_OF_SERVICE_URL',\n contact: {\n name: 'TEAM',\n email: 'contact-email@something.io',\n url: 'mywebsite.io',\n },\n license: {\n name: 'Apache 2.0',\n url: 'https://www.apache.org/licenses/LICENSE-2.0.html',\n },\n },\n 'x-strapi-config': {\n plugins: null,\n mutateDocumentation: null,\n },\n servers: [],\n externalDocs: {\n description: 'Find out more',\n url: 'https://docs.strapi.io/developer-docs/latest/getting-started/introduction.html',\n },\n security: [\n {\n bearerAuth: [],\n },\n ],\n paths: {},\n components: {\n securitySchemes: {\n bearerAuth: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n schemas: {\n Error: {\n type: 'object',\n required: ['error'],\n properties: {\n data: {\n nullable: true,\n oneOf: [{ type: 'object' }, { type: 'array', items: { type: 'object' } }],\n },\n error: {\n type: 'object',\n properties: {\n status: {\n type: 'integer',\n },\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n details: {\n type: 'object',\n },\n },\n },\n },\n },\n },\n },\n};\n"],"names":["defaultConfig","openapi","info","version","title","description","termsOfService","contact","name","email","url","license","plugins","mutateDocumentation","servers","externalDocs","security","bearerAuth","paths","components","securitySchemes","type","scheme","bearerFormat","schemas","Error","required","properties","data","nullable","oneOf","items","error","status","message","details"],"mappings":"MAEaA,aAA8B,GAAA;IACzCC,OAAS,EAAA,OAAA;IACTC,IAAM,EAAA;QACJC,OAAS,EAAA,OAAA;QACTC,KAAO,EAAA,eAAA;QACPC,WAAa,EAAA,EAAA;QACbC,cAAgB,EAAA,2BAAA;QAChBC,OAAS,EAAA;YACPC,IAAM,EAAA,MAAA;YACNC,KAAO,EAAA,4BAAA;YACPC,GAAK,EAAA;AACP,SAAA;QACAC,OAAS,EAAA;YACPH,IAAM,EAAA,YAAA;YACNE,GAAK,EAAA;AACP;AACF,KAAA;IACA,iBAAmB,EAAA;QACjBE,OAAS,EAAA,IAAA;QACTC,mBAAqB,EAAA;AACvB,KAAA;AACAC,IAAAA,OAAAA,EAAS,EAAE;IACXC,YAAc,EAAA;QACZV,WAAa,EAAA,eAAA;QACbK,GAAK,EAAA;AACP,KAAA;IACAM,QAAU,EAAA;AACR,QAAA;AACEC,YAAAA,UAAAA,EAAY;AACd;AACD,KAAA;AACDC,IAAAA,KAAAA,EAAO,EAAC;IACRC,UAAY,EAAA;QACVC,eAAiB,EAAA;YACfH,UAAY,EAAA;gBACVI,IAAM,EAAA,MAAA;gBACNC,MAAQ,EAAA,QAAA;gBACRC,YAAc,EAAA;AAChB;AACF,SAAA;QACAC,OAAS,EAAA;YACPC,KAAO,EAAA;gBACLJ,IAAM,EAAA,QAAA;gBACNK,QAAU,EAAA;AAAC,oBAAA;AAAQ,iBAAA;gBACnBC,UAAY,EAAA;oBACVC,IAAM,EAAA;wBACJC,QAAU,EAAA,IAAA;wBACVC,KAAO,EAAA;AAAC,4BAAA;gCAAET,IAAM,EAAA;AAAS,6BAAA;AAAG,4BAAA;gCAAEA,IAAM,EAAA,OAAA;gCAASU,KAAO,EAAA;oCAAEV,IAAM,EAAA;AAAS;AAAE;AAAE;AAC3E,qBAAA;oBACAW,KAAO,EAAA;wBACLX,IAAM,EAAA,QAAA;wBACNM,UAAY,EAAA;4BACVM,MAAQ,EAAA;gCACNZ,IAAM,EAAA;AACR,6BAAA;4BACAb,IAAM,EAAA;gCACJa,IAAM,EAAA;AACR,6BAAA;4BACAa,OAAS,EAAA;gCACPb,IAAM,EAAA;AACR,6BAAA;4BACAc,OAAS,EAAA;gCACPd,IAAM,EAAA;AACR;AACF;AACF;AACF;AACF;AACF;AACF;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/config/index.ts"],"sourcesContent":["import { defaultConfig } from './default-plugin-config';\n\nexport const config = {\n default: defaultConfig,\n};\n"],"names":["config","default","defaultConfig"],"mappings":";;;;MAEaA,MAAS,GAAA;IACpBC,OAASC,EAAAA;AACX;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/config/index.ts"],"sourcesContent":["import { defaultConfig } from './default-plugin-config';\n\nexport const config = {\n default: defaultConfig,\n};\n"],"names":["config","default","defaultConfig"],"mappings":";;MAEaA,MAAS,GAAA;IACpBC,OAASC,EAAAA;AACX;;;;"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var path = require('path');
|
|
4
|
+
var bcrypt = require('bcryptjs');
|
|
5
|
+
var fs = require('fs-extra');
|
|
6
|
+
var _ = require('lodash');
|
|
7
|
+
var koaStatic = require('koa-static');
|
|
8
|
+
var utils = require('@strapi/utils');
|
|
9
|
+
var utils$1 = require('../utils.js');
|
|
10
|
+
|
|
11
|
+
function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
|
|
12
|
+
|
|
13
|
+
const validation = {
|
|
14
|
+
validateSettings: utils.validateYupSchema(utils.yup.object().shape({
|
|
15
|
+
restrictedAccess: utils.yup.boolean(),
|
|
16
|
+
password: utils.yup.string().min(8).matches(/[a-z]/, '${path} must contain at least one lowercase character').matches(/[A-Z]/, '${path} must contain at least one uppercase character').matches(/\d/, '${path} must contain at least one number').when('restrictedAccess', (value, initSchema)=>{
|
|
17
|
+
return value ? initSchema.required('password is required') : initSchema;
|
|
18
|
+
})
|
|
19
|
+
}))
|
|
20
|
+
};
|
|
21
|
+
var documentation = {
|
|
22
|
+
async getInfos (ctx) {
|
|
23
|
+
try {
|
|
24
|
+
const docService = utils$1.getService('documentation');
|
|
25
|
+
const docVersions = docService.getDocumentationVersions();
|
|
26
|
+
const documentationAccess = await docService.getDocumentationAccess();
|
|
27
|
+
ctx.send({
|
|
28
|
+
docVersions,
|
|
29
|
+
currentVersion: docService.getDocumentationVersion(),
|
|
30
|
+
prefix: '/documentation',
|
|
31
|
+
documentationAccess
|
|
32
|
+
});
|
|
33
|
+
} catch (err) {
|
|
34
|
+
strapi.log.error(err);
|
|
35
|
+
ctx.badRequest();
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
async index (ctx, next) {
|
|
39
|
+
try {
|
|
40
|
+
/**
|
|
41
|
+
* We don't expose the specs using koa-static or something else due to security reasons.
|
|
42
|
+
* That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.
|
|
43
|
+
*/ const { major, minor, patch } = ctx.params;
|
|
44
|
+
const version = major && minor && patch ? `${major}.${minor}.${patch}` : utils$1.getService('documentation').getDocumentationVersion();
|
|
45
|
+
const openAPISpecsPath = path.join(strapi.dirs.app.extensions, 'documentation', 'documentation', version, 'full_documentation.json');
|
|
46
|
+
try {
|
|
47
|
+
const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');
|
|
48
|
+
const layout = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('../public/index.html.js')); })).default;
|
|
49
|
+
const filledLayout = _.template(layout)({
|
|
50
|
+
backendUrl: strapi.config.server.url,
|
|
51
|
+
spec: JSON.stringify(JSON.parse(documentation))
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
const layoutPath = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public', 'index.html');
|
|
55
|
+
await fs.ensureFile(layoutPath);
|
|
56
|
+
await fs.writeFile(layoutPath, filledLayout);
|
|
57
|
+
// Serve the file.
|
|
58
|
+
ctx.url = path.basename(`${ctx.url}/index.html`);
|
|
59
|
+
try {
|
|
60
|
+
const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');
|
|
61
|
+
return koaStatic(staticFolder)(ctx, next);
|
|
62
|
+
} catch (e) {
|
|
63
|
+
strapi.log.error(e);
|
|
64
|
+
}
|
|
65
|
+
} catch (e) {
|
|
66
|
+
strapi.log.error(e);
|
|
67
|
+
}
|
|
68
|
+
} catch (e) {
|
|
69
|
+
strapi.log.error(e);
|
|
70
|
+
}
|
|
71
|
+
} catch (e) {
|
|
72
|
+
strapi.log.error(e);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
async loginView (ctx, next) {
|
|
76
|
+
// lazy require cheerio
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
78
|
+
const cheerio = require('cheerio');
|
|
79
|
+
const { error } = ctx.query;
|
|
80
|
+
try {
|
|
81
|
+
const layout = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('../public/login.html.js')); })).default;
|
|
82
|
+
const filledLayout = _.template(layout.toString())({
|
|
83
|
+
actionUrl: `${strapi.config.server.url}/documentation/login`
|
|
84
|
+
});
|
|
85
|
+
const $ = cheerio.load(filledLayout);
|
|
86
|
+
$('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');
|
|
87
|
+
try {
|
|
88
|
+
const layoutPath = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public', 'login.html');
|
|
89
|
+
await fs.ensureFile(layoutPath);
|
|
90
|
+
await fs.writeFile(layoutPath, $.html());
|
|
91
|
+
ctx.url = path.basename(`${ctx.url}/login.html`);
|
|
92
|
+
try {
|
|
93
|
+
const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');
|
|
94
|
+
return koaStatic(staticFolder)(ctx, next);
|
|
95
|
+
} catch (e) {
|
|
96
|
+
strapi.log.error(e);
|
|
97
|
+
}
|
|
98
|
+
} catch (e) {
|
|
99
|
+
strapi.log.error(e);
|
|
100
|
+
}
|
|
101
|
+
} catch (e) {
|
|
102
|
+
strapi.log.error(e);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
async login (ctx) {
|
|
106
|
+
const { body: { password } } = ctx.request;
|
|
107
|
+
const { password: hash } = await strapi.store({
|
|
108
|
+
type: 'plugin',
|
|
109
|
+
name: 'documentation',
|
|
110
|
+
key: 'config'
|
|
111
|
+
}).get();
|
|
112
|
+
const isValid = await bcrypt.compare(password, hash);
|
|
113
|
+
let querystring = '?error=password';
|
|
114
|
+
if (isValid && ctx.session) {
|
|
115
|
+
ctx.session.documentation = {
|
|
116
|
+
logged: true
|
|
117
|
+
};
|
|
118
|
+
querystring = '';
|
|
119
|
+
}
|
|
120
|
+
ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);
|
|
121
|
+
},
|
|
122
|
+
async regenerateDoc (ctx) {
|
|
123
|
+
const { version } = ctx.request.body;
|
|
124
|
+
const service = utils$1.getService('documentation');
|
|
125
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
126
|
+
if (_.isEmpty(version)) {
|
|
127
|
+
return ctx.badRequest('Please provide a version.');
|
|
128
|
+
}
|
|
129
|
+
if (!documentationVersions.includes(version)) {
|
|
130
|
+
return ctx.badRequest('The version you are trying to generate does not exist.');
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
strapi.reload.isWatching = false;
|
|
134
|
+
await service.generateFullDoc(version);
|
|
135
|
+
ctx.send({
|
|
136
|
+
ok: true
|
|
137
|
+
});
|
|
138
|
+
} finally{
|
|
139
|
+
strapi.reload.isWatching = true;
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
async deleteDoc (ctx) {
|
|
143
|
+
const { version } = ctx.params;
|
|
144
|
+
const service = utils$1.getService('documentation');
|
|
145
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
146
|
+
if (_.isEmpty(version)) {
|
|
147
|
+
return ctx.badRequest('Please provide a version.');
|
|
148
|
+
}
|
|
149
|
+
if (!documentationVersions.includes(version)) {
|
|
150
|
+
return ctx.badRequest('The version you are trying to delete does not exist.');
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
strapi.reload.isWatching = false;
|
|
154
|
+
await service.deleteDocumentation(version);
|
|
155
|
+
ctx.send({
|
|
156
|
+
ok: true
|
|
157
|
+
});
|
|
158
|
+
} finally{
|
|
159
|
+
strapi.reload.isWatching = true;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
async updateSettings (ctx) {
|
|
163
|
+
const pluginStore = strapi.store({
|
|
164
|
+
type: 'plugin',
|
|
165
|
+
name: 'documentation'
|
|
166
|
+
});
|
|
167
|
+
const data = await validation.validateSettings(ctx.request.body);
|
|
168
|
+
const config = {
|
|
169
|
+
restrictedAccess: Boolean(data.restrictedAccess)
|
|
170
|
+
};
|
|
171
|
+
if (data.password) {
|
|
172
|
+
config.password = await bcrypt.hash(data.password, 10);
|
|
173
|
+
}
|
|
174
|
+
await pluginStore.set({
|
|
175
|
+
key: 'config',
|
|
176
|
+
value: config
|
|
177
|
+
});
|
|
178
|
+
return ctx.send({
|
|
179
|
+
ok: true
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
module.exports = documentation;
|
|
185
|
+
//# sourceMappingURL=documentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation.js","sources":["../../../server/src/controllers/documentation.ts"],"sourcesContent":["import path from 'path';\nimport bcrypt from 'bcryptjs';\nimport fs from 'fs-extra';\nimport _ from 'lodash';\nimport koaStatic from 'koa-static';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\n\nimport { getService } from '../utils';\nimport type { Config } from '../types';\n\nconst validation = {\n validateSettings: validateYupSchema(\n yup.object().shape({\n restrictedAccess: yup.boolean(),\n password: yup\n .string()\n .min(8)\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number')\n .when('restrictedAccess', (value, initSchema) => {\n return value ? initSchema.required('password is required') : initSchema;\n }),\n })\n ),\n};\n\nexport default {\n async getInfos(ctx: Koa.Context) {\n try {\n const docService = getService('documentation');\n const docVersions = docService.getDocumentationVersions();\n const documentationAccess = await docService.getDocumentationAccess();\n\n ctx.send({\n docVersions,\n currentVersion: docService.getDocumentationVersion(),\n prefix: '/documentation',\n documentationAccess,\n });\n } catch (err) {\n strapi.log.error(err);\n ctx.badRequest();\n }\n },\n\n async index(ctx: Koa.Context, next: Koa.Next) {\n try {\n /**\n * We don't expose the specs using koa-static or something else due to security reasons.\n * That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.\n */\n const { major, minor, patch } = ctx.params;\n const version =\n major && minor && patch\n ? `${major}.${minor}.${patch}`\n : getService('documentation').getDocumentationVersion();\n\n const openAPISpecsPath = path.join(\n strapi.dirs.app.extensions,\n 'documentation',\n 'documentation',\n version,\n 'full_documentation.json'\n );\n\n try {\n const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');\n\n const layout = (await import('../public/index.html')).default;\n\n const filledLayout = _.template(layout)({\n backendUrl: strapi.config.server.url,\n spec: JSON.stringify(JSON.parse(documentation)),\n });\n\n try {\n const layoutPath = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public',\n 'index.html'\n );\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, filledLayout);\n\n // Serve the file.\n ctx.url = path.basename(`${ctx.url}/index.html`);\n\n try {\n const staticFolder = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public'\n );\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async loginView(ctx: Koa.Context, next: Koa.Next) {\n // lazy require cheerio\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const cheerio = require('cheerio');\n\n const { error } = ctx.query;\n\n try {\n const layout = (await import('../public/login.html')).default;\n\n const filledLayout = _.template(layout.toString())({\n actionUrl: `${strapi.config.server.url}/documentation/login`,\n });\n\n const $ = cheerio.load(filledLayout);\n\n $('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');\n\n try {\n const layoutPath = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public',\n 'login.html'\n );\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, $.html());\n\n ctx.url = path.basename(`${ctx.url}/login.html`);\n\n try {\n const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async login(ctx: Koa.Context) {\n const {\n body: { password },\n } = ctx.request;\n\n const { password: hash } = (await strapi\n .store({ type: 'plugin', name: 'documentation', key: 'config' })\n .get()) as { password: string };\n\n const isValid = await bcrypt.compare(password, hash);\n\n let querystring = '?error=password';\n\n if (isValid && ctx.session) {\n ctx.session.documentation = {\n logged: true,\n };\n\n querystring = '';\n }\n\n ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);\n },\n\n async regenerateDoc(ctx: Koa.Context) {\n const { version } = ctx.request.body;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to generate does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.generateFullDoc(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async deleteDoc(ctx: Koa.Context) {\n const { version } = ctx.params;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to delete does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.deleteDocumentation(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async updateSettings(ctx: Koa.Context) {\n const pluginStore = strapi.store({ type: 'plugin', name: 'documentation' });\n\n const data = await validation.validateSettings(ctx.request.body);\n\n const config: Config = {\n restrictedAccess: Boolean(data.restrictedAccess),\n };\n\n if (data.password) {\n config.password = await bcrypt.hash(data.password, 10);\n }\n\n await pluginStore.set({ key: 'config', value: config });\n\n return ctx.send({ ok: true });\n },\n};\n"],"names":["validation","validateSettings","validateYupSchema","yup","object","shape","restrictedAccess","boolean","password","string","min","matches","when","value","initSchema","required","getInfos","ctx","docService","getService","docVersions","getDocumentationVersions","documentationAccess","getDocumentationAccess","send","currentVersion","getDocumentationVersion","prefix","err","strapi","log","error","badRequest","index","next","major","minor","patch","params","version","openAPISpecsPath","path","join","dirs","app","extensions","documentation","fs","readFileSync","layout","default","filledLayout","_","template","backendUrl","config","server","url","spec","JSON","stringify","parse","layoutPath","resolve","ensureFile","writeFile","basename","staticFolder","koaStatic","e","loginView","cheerio","require","query","toString","actionUrl","$","load","text","isEmpty","html","login","body","request","hash","store","type","name","key","get","isValid","bcrypt","compare","querystring","session","logged","redirect","regenerateDoc","service","documentationVersions","map","el","includes","reload","isWatching","generateFullDoc","ok","deleteDoc","deleteDocumentation","updateSettings","pluginStore","data","Boolean","set"],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import bcrypt from 'bcryptjs';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import koaStatic from 'koa-static';
|
|
6
|
+
import { validateYupSchema, yup } from '@strapi/utils';
|
|
7
|
+
import { getService } from '../utils.mjs';
|
|
8
|
+
|
|
9
|
+
const validation = {
|
|
10
|
+
validateSettings: validateYupSchema(yup.object().shape({
|
|
11
|
+
restrictedAccess: yup.boolean(),
|
|
12
|
+
password: yup.string().min(8).matches(/[a-z]/, '${path} must contain at least one lowercase character').matches(/[A-Z]/, '${path} must contain at least one uppercase character').matches(/\d/, '${path} must contain at least one number').when('restrictedAccess', (value, initSchema)=>{
|
|
13
|
+
return value ? initSchema.required('password is required') : initSchema;
|
|
14
|
+
})
|
|
15
|
+
}))
|
|
16
|
+
};
|
|
17
|
+
var documentation = {
|
|
18
|
+
async getInfos (ctx) {
|
|
19
|
+
try {
|
|
20
|
+
const docService = getService('documentation');
|
|
21
|
+
const docVersions = docService.getDocumentationVersions();
|
|
22
|
+
const documentationAccess = await docService.getDocumentationAccess();
|
|
23
|
+
ctx.send({
|
|
24
|
+
docVersions,
|
|
25
|
+
currentVersion: docService.getDocumentationVersion(),
|
|
26
|
+
prefix: '/documentation',
|
|
27
|
+
documentationAccess
|
|
28
|
+
});
|
|
29
|
+
} catch (err) {
|
|
30
|
+
strapi.log.error(err);
|
|
31
|
+
ctx.badRequest();
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
async index (ctx, next) {
|
|
35
|
+
try {
|
|
36
|
+
/**
|
|
37
|
+
* We don't expose the specs using koa-static or something else due to security reasons.
|
|
38
|
+
* That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.
|
|
39
|
+
*/ const { major, minor, patch } = ctx.params;
|
|
40
|
+
const version = major && minor && patch ? `${major}.${minor}.${patch}` : getService('documentation').getDocumentationVersion();
|
|
41
|
+
const openAPISpecsPath = path.join(strapi.dirs.app.extensions, 'documentation', 'documentation', version, 'full_documentation.json');
|
|
42
|
+
try {
|
|
43
|
+
const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');
|
|
44
|
+
const layout = (await import('../public/index.html.mjs')).default;
|
|
45
|
+
const filledLayout = _.template(layout)({
|
|
46
|
+
backendUrl: strapi.config.server.url,
|
|
47
|
+
spec: JSON.stringify(JSON.parse(documentation))
|
|
48
|
+
});
|
|
49
|
+
try {
|
|
50
|
+
const layoutPath = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public', 'index.html');
|
|
51
|
+
await fs.ensureFile(layoutPath);
|
|
52
|
+
await fs.writeFile(layoutPath, filledLayout);
|
|
53
|
+
// Serve the file.
|
|
54
|
+
ctx.url = path.basename(`${ctx.url}/index.html`);
|
|
55
|
+
try {
|
|
56
|
+
const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');
|
|
57
|
+
return koaStatic(staticFolder)(ctx, next);
|
|
58
|
+
} catch (e) {
|
|
59
|
+
strapi.log.error(e);
|
|
60
|
+
}
|
|
61
|
+
} catch (e) {
|
|
62
|
+
strapi.log.error(e);
|
|
63
|
+
}
|
|
64
|
+
} catch (e) {
|
|
65
|
+
strapi.log.error(e);
|
|
66
|
+
}
|
|
67
|
+
} catch (e) {
|
|
68
|
+
strapi.log.error(e);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
async loginView (ctx, next) {
|
|
72
|
+
// lazy require cheerio
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
74
|
+
const cheerio = require('cheerio');
|
|
75
|
+
const { error } = ctx.query;
|
|
76
|
+
try {
|
|
77
|
+
const layout = (await import('../public/login.html.mjs')).default;
|
|
78
|
+
const filledLayout = _.template(layout.toString())({
|
|
79
|
+
actionUrl: `${strapi.config.server.url}/documentation/login`
|
|
80
|
+
});
|
|
81
|
+
const $ = cheerio.load(filledLayout);
|
|
82
|
+
$('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');
|
|
83
|
+
try {
|
|
84
|
+
const layoutPath = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public', 'login.html');
|
|
85
|
+
await fs.ensureFile(layoutPath);
|
|
86
|
+
await fs.writeFile(layoutPath, $.html());
|
|
87
|
+
ctx.url = path.basename(`${ctx.url}/login.html`);
|
|
88
|
+
try {
|
|
89
|
+
const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');
|
|
90
|
+
return koaStatic(staticFolder)(ctx, next);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
strapi.log.error(e);
|
|
93
|
+
}
|
|
94
|
+
} catch (e) {
|
|
95
|
+
strapi.log.error(e);
|
|
96
|
+
}
|
|
97
|
+
} catch (e) {
|
|
98
|
+
strapi.log.error(e);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
async login (ctx) {
|
|
102
|
+
const { body: { password } } = ctx.request;
|
|
103
|
+
const { password: hash } = await strapi.store({
|
|
104
|
+
type: 'plugin',
|
|
105
|
+
name: 'documentation',
|
|
106
|
+
key: 'config'
|
|
107
|
+
}).get();
|
|
108
|
+
const isValid = await bcrypt.compare(password, hash);
|
|
109
|
+
let querystring = '?error=password';
|
|
110
|
+
if (isValid && ctx.session) {
|
|
111
|
+
ctx.session.documentation = {
|
|
112
|
+
logged: true
|
|
113
|
+
};
|
|
114
|
+
querystring = '';
|
|
115
|
+
}
|
|
116
|
+
ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);
|
|
117
|
+
},
|
|
118
|
+
async regenerateDoc (ctx) {
|
|
119
|
+
const { version } = ctx.request.body;
|
|
120
|
+
const service = getService('documentation');
|
|
121
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
122
|
+
if (_.isEmpty(version)) {
|
|
123
|
+
return ctx.badRequest('Please provide a version.');
|
|
124
|
+
}
|
|
125
|
+
if (!documentationVersions.includes(version)) {
|
|
126
|
+
return ctx.badRequest('The version you are trying to generate does not exist.');
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
strapi.reload.isWatching = false;
|
|
130
|
+
await service.generateFullDoc(version);
|
|
131
|
+
ctx.send({
|
|
132
|
+
ok: true
|
|
133
|
+
});
|
|
134
|
+
} finally{
|
|
135
|
+
strapi.reload.isWatching = true;
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
async deleteDoc (ctx) {
|
|
139
|
+
const { version } = ctx.params;
|
|
140
|
+
const service = getService('documentation');
|
|
141
|
+
const documentationVersions = service.getDocumentationVersions().map((el)=>el.version);
|
|
142
|
+
if (_.isEmpty(version)) {
|
|
143
|
+
return ctx.badRequest('Please provide a version.');
|
|
144
|
+
}
|
|
145
|
+
if (!documentationVersions.includes(version)) {
|
|
146
|
+
return ctx.badRequest('The version you are trying to delete does not exist.');
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
strapi.reload.isWatching = false;
|
|
150
|
+
await service.deleteDocumentation(version);
|
|
151
|
+
ctx.send({
|
|
152
|
+
ok: true
|
|
153
|
+
});
|
|
154
|
+
} finally{
|
|
155
|
+
strapi.reload.isWatching = true;
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
async updateSettings (ctx) {
|
|
159
|
+
const pluginStore = strapi.store({
|
|
160
|
+
type: 'plugin',
|
|
161
|
+
name: 'documentation'
|
|
162
|
+
});
|
|
163
|
+
const data = await validation.validateSettings(ctx.request.body);
|
|
164
|
+
const config = {
|
|
165
|
+
restrictedAccess: Boolean(data.restrictedAccess)
|
|
166
|
+
};
|
|
167
|
+
if (data.password) {
|
|
168
|
+
config.password = await bcrypt.hash(data.password, 10);
|
|
169
|
+
}
|
|
170
|
+
await pluginStore.set({
|
|
171
|
+
key: 'config',
|
|
172
|
+
value: config
|
|
173
|
+
});
|
|
174
|
+
return ctx.send({
|
|
175
|
+
ok: true
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export { documentation as default };
|
|
181
|
+
//# sourceMappingURL=documentation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation.mjs","sources":["../../../server/src/controllers/documentation.ts"],"sourcesContent":["import path from 'path';\nimport bcrypt from 'bcryptjs';\nimport fs from 'fs-extra';\nimport _ from 'lodash';\nimport koaStatic from 'koa-static';\nimport { yup, validateYupSchema } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\n\nimport { getService } from '../utils';\nimport type { Config } from '../types';\n\nconst validation = {\n validateSettings: validateYupSchema(\n yup.object().shape({\n restrictedAccess: yup.boolean(),\n password: yup\n .string()\n .min(8)\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number')\n .when('restrictedAccess', (value, initSchema) => {\n return value ? initSchema.required('password is required') : initSchema;\n }),\n })\n ),\n};\n\nexport default {\n async getInfos(ctx: Koa.Context) {\n try {\n const docService = getService('documentation');\n const docVersions = docService.getDocumentationVersions();\n const documentationAccess = await docService.getDocumentationAccess();\n\n ctx.send({\n docVersions,\n currentVersion: docService.getDocumentationVersion(),\n prefix: '/documentation',\n documentationAccess,\n });\n } catch (err) {\n strapi.log.error(err);\n ctx.badRequest();\n }\n },\n\n async index(ctx: Koa.Context, next: Koa.Next) {\n try {\n /**\n * We don't expose the specs using koa-static or something else due to security reasons.\n * That's why, we need to read the file localy and send the specs through it when we serve the Swagger UI.\n */\n const { major, minor, patch } = ctx.params;\n const version =\n major && minor && patch\n ? `${major}.${minor}.${patch}`\n : getService('documentation').getDocumentationVersion();\n\n const openAPISpecsPath = path.join(\n strapi.dirs.app.extensions,\n 'documentation',\n 'documentation',\n version,\n 'full_documentation.json'\n );\n\n try {\n const documentation = fs.readFileSync(openAPISpecsPath, 'utf8');\n\n const layout = (await import('../public/index.html')).default;\n\n const filledLayout = _.template(layout)({\n backendUrl: strapi.config.server.url,\n spec: JSON.stringify(JSON.parse(documentation)),\n });\n\n try {\n const layoutPath = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public',\n 'index.html'\n );\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, filledLayout);\n\n // Serve the file.\n ctx.url = path.basename(`${ctx.url}/index.html`);\n\n try {\n const staticFolder = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public'\n );\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async loginView(ctx: Koa.Context, next: Koa.Next) {\n // lazy require cheerio\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const cheerio = require('cheerio');\n\n const { error } = ctx.query;\n\n try {\n const layout = (await import('../public/login.html')).default;\n\n const filledLayout = _.template(layout.toString())({\n actionUrl: `${strapi.config.server.url}/documentation/login`,\n });\n\n const $ = cheerio.load(filledLayout);\n\n $('.error').text(_.isEmpty(error) ? '' : 'Wrong password...');\n\n try {\n const layoutPath = path.resolve(\n strapi.dirs.app.extensions,\n 'documentation',\n 'public',\n 'login.html'\n );\n await fs.ensureFile(layoutPath);\n await fs.writeFile(layoutPath, $.html());\n\n ctx.url = path.basename(`${ctx.url}/login.html`);\n\n try {\n const staticFolder = path.resolve(strapi.dirs.app.extensions, 'documentation', 'public');\n return koaStatic(staticFolder)(ctx, next);\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n } catch (e) {\n strapi.log.error(e);\n }\n },\n\n async login(ctx: Koa.Context) {\n const {\n body: { password },\n } = ctx.request;\n\n const { password: hash } = (await strapi\n .store({ type: 'plugin', name: 'documentation', key: 'config' })\n .get()) as { password: string };\n\n const isValid = await bcrypt.compare(password, hash);\n\n let querystring = '?error=password';\n\n if (isValid && ctx.session) {\n ctx.session.documentation = {\n logged: true,\n };\n\n querystring = '';\n }\n\n ctx.redirect(`${strapi.config.server.url}/documentation${querystring}`);\n },\n\n async regenerateDoc(ctx: Koa.Context) {\n const { version } = ctx.request.body;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to generate does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.generateFullDoc(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async deleteDoc(ctx: Koa.Context) {\n const { version } = ctx.params;\n\n const service = getService('documentation');\n\n const documentationVersions = service.getDocumentationVersions().map((el) => el.version);\n\n if (_.isEmpty(version)) {\n return ctx.badRequest('Please provide a version.');\n }\n\n if (!documentationVersions.includes(version)) {\n return ctx.badRequest('The version you are trying to delete does not exist.');\n }\n\n try {\n strapi.reload.isWatching = false;\n await service.deleteDocumentation(version);\n ctx.send({ ok: true });\n } finally {\n strapi.reload.isWatching = true;\n }\n },\n\n async updateSettings(ctx: Koa.Context) {\n const pluginStore = strapi.store({ type: 'plugin', name: 'documentation' });\n\n const data = await validation.validateSettings(ctx.request.body);\n\n const config: Config = {\n restrictedAccess: Boolean(data.restrictedAccess),\n };\n\n if (data.password) {\n config.password = await bcrypt.hash(data.password, 10);\n }\n\n await pluginStore.set({ key: 'config', value: config });\n\n return ctx.send({ ok: true });\n },\n};\n"],"names":["validation","validateSettings","validateYupSchema","yup","object","shape","restrictedAccess","boolean","password","string","min","matches","when","value","initSchema","required","getInfos","ctx","docService","getService","docVersions","getDocumentationVersions","documentationAccess","getDocumentationAccess","send","currentVersion","getDocumentationVersion","prefix","err","strapi","log","error","badRequest","index","next","major","minor","patch","params","version","openAPISpecsPath","path","join","dirs","app","extensions","documentation","fs","readFileSync","layout","default","filledLayout","_","template","backendUrl","config","server","url","spec","JSON","stringify","parse","layoutPath","resolve","ensureFile","writeFile","basename","staticFolder","koaStatic","e","loginView","cheerio","require","query","toString","actionUrl","$","load","text","isEmpty","html","login","body","request","hash","store","type","name","key","get","isValid","bcrypt","compare","querystring","session","logged","redirect","regenerateDoc","service","documentationVersions","map","el","includes","reload","isWatching","generateFullDoc","ok","deleteDoc","deleteDocumentation","updateSettings","pluginStore","data","Boolean","set"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import documentation from './documentation';\n\nexport default {\n documentation,\n};\n"],"names":["documentation"],"mappings":";;;;AAEA,kBAAe;AACbA,IAAAA;AACF,CAAE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import documentation from './documentation';\n\nexport default {\n documentation,\n};\n"],"names":["documentation"],"mappings":";;AAEA,kBAAe;AACbA,IAAAA;AACF,CAAE;;;;"}
|