studiocms 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/CHANGELOG.md +122 -0
- package/dist/cli/add/index.d.ts +2 -2
- package/dist/cli/add/index.js +4 -3
- package/dist/cli/add/npm-utils.d.ts +6 -6
- package/dist/cli/add/tryToInstallPlugins.d.ts +1 -1
- package/dist/cli/add/tryToInstallPlugins.js +6 -5
- package/dist/cli/add/updateStudioCMSConfig.d.ts +1 -1
- package/dist/cli/add/updateStudioCMSConfig.js +3 -4
- package/dist/cli/add/validatePlugins.d.ts +1 -2
- package/dist/cli/add/validatePlugins.js +15 -9
- package/dist/cli/crypto/genJWT/index.d.ts +1 -1
- package/dist/cli/crypto/genJWT/index.js +8 -9
- package/dist/cli/crypto/index.d.ts +1 -1
- package/dist/cli/init/steps/env.js +14 -4
- package/dist/cli/init/steps/next.d.ts +1 -1
- package/dist/cli/init/steps/next.js +6 -5
- package/dist/cli/migrator/index.d.ts +1 -1
- package/dist/cli/migrator/index.js +2 -2
- package/dist/cli/users/index.d.ts +1 -1
- package/dist/cli/users/shared.js +2 -2
- package/dist/cli/users/steps/createUsers.js +7 -7
- package/dist/cli/users/steps/modifyUsers.js +2 -2
- package/dist/cli/users/steps/next.d.ts +1 -1
- package/dist/cli/utils/checkRequiredEnvVars.js +2 -2
- package/dist/cli/utils/context.d.ts +2 -4
- package/dist/cli/utils/context.js +1 -3
- package/dist/cli/utils/getCliDbClient.d.ts +1 -1
- package/dist/cli/utils/intro.d.ts +1 -1
- package/dist/cli/utils/loadConfig.d.ts +54 -49
- package/dist/cli/utils/loadConfig.js +5 -8
- package/dist/cli/utils/logger.js +3 -3
- package/dist/cli/utils/user-utils.d.ts +1 -1
- package/dist/cli/utils/user-utils.js +4 -3
- package/dist/client/apiClient.d.ts +4923 -0
- package/dist/client/apiClient.js +72 -0
- package/dist/config.d.ts +1734 -1
- package/dist/consts.d.ts +5 -5
- package/dist/consts.js +3 -2
- package/dist/db/plugins.d.ts +1 -1
- package/dist/db/plugins.js +5 -8
- package/dist/handlers/frontend/routes.d.ts +4 -18
- package/dist/handlers/frontend/routes.js +13 -152
- package/dist/handlers/frontend/types.d.ts +1 -1
- package/dist/handlers/frontend/utils.js +0 -18
- package/dist/handlers/pluginHandler.d.ts +34 -257
- package/dist/handlers/pluginHandler.js +92 -46
- package/dist/handlers/routeHandler.js +32 -11
- package/dist/handlers/setupDbStudio.d.ts +3 -1
- package/dist/handlers/setupDbStudio.js +19 -10
- package/dist/handlers/storage-manager/core/effectify-astro-context.d.ts +25 -0
- package/dist/handlers/storage-manager/core/effectify-astro-context.js +78 -0
- package/dist/handlers/storage-manager/no-op.d.ts +2 -2
- package/dist/handlers/storage-manager/no-op.js +2 -3
- package/dist/index.d.ts +0 -1
- package/dist/index.js +10 -20
- package/dist/integrations/robots/index.d.ts +2 -2
- package/dist/integrations/robots/index.js +1 -3
- package/dist/integrations/robots/schema.d.ts +102 -273
- package/dist/integrations/robots/schema.js +220 -209
- package/dist/plugins/analytics/assets/schemas.d.ts +14 -9
- package/dist/plugins/analytics/assets/schemas.js +25 -17
- package/dist/plugins/analytics/db-client.d.ts +1 -1
- package/dist/plugins/analytics/index.d.ts +823 -3
- package/dist/plugins/analytics/index.js +4 -5
- package/dist/plugins/analytics/schemas.d.ts +54 -62
- package/dist/plugins/analytics/schemas.js +64 -13
- package/dist/plugins/analytics/table.d.ts +1 -1
- package/dist/plugins.d.ts +0 -1
- package/dist/schemas/config/api.d.ts +17 -0
- package/dist/schemas/config/api.js +14 -0
- package/dist/schemas/config/auth.d.ts +55 -59
- package/dist/schemas/config/auth.js +34 -11
- package/dist/schemas/config/dashboard.d.ts +43 -79
- package/dist/schemas/config/dashboard.js +43 -12
- package/dist/schemas/config/db.d.ts +15 -17
- package/dist/schemas/config/db.js +13 -5
- package/dist/schemas/config/developer.d.ts +33 -45
- package/dist/schemas/config/developer.js +22 -5
- package/dist/schemas/config/index.d.ts +398 -521
- package/dist/schemas/config/index.js +115 -57
- package/dist/schemas/config/sdk.d.ts +50 -196
- package/dist/schemas/config/sdk.js +61 -73
- package/dist/schemas/custom.d.ts +40 -0
- package/dist/schemas/custom.js +41 -0
- package/dist/schemas/external-schemas.d.ts +171 -0
- package/dist/schemas/external-schemas.js +179 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/plugins/i18n.d.ts +59 -39
- package/dist/schemas/plugins/i18n.js +42 -5
- package/dist/schemas/plugins/index.d.ts +7126 -10296
- package/dist/schemas/plugins/index.js +260 -276
- package/dist/schemas/plugins/shared.d.ts +1293 -3718
- package/dist/schemas/plugins/shared.js +320 -329
- package/dist/test-utils.d.ts +15 -4
- package/dist/test-utils.js +27 -11
- package/dist/toolbar/db-viewer/db-shared-types.d.ts +6 -6
- package/dist/toolbar/db-viewer/studio/connection.d.ts +8 -4
- package/dist/toolbar/db-viewer/studio/connection.js +2 -28
- package/dist/toolbar/db-viewer/studio/env/libsql.d.ts +7 -0
- package/dist/toolbar/db-viewer/studio/env/libsql.js +17 -0
- package/dist/toolbar/db-viewer/studio/env/mysql.d.ts +7 -0
- package/dist/toolbar/db-viewer/studio/env/mysql.js +23 -0
- package/dist/toolbar/db-viewer/studio/env/postgres.d.ts +7 -0
- package/dist/toolbar/db-viewer/studio/env/postgres.js +23 -0
- package/dist/toolbar/db-viewer/studio/index.js +20 -56
- package/dist/toolbar/db-viewer/studio/type.d.ts +1 -2
- package/dist/toolbar/db-viewer/studio/virtual-connection/libsql.d.ts +3 -0
- package/dist/toolbar/db-viewer/studio/virtual-connection/libsql.js +24 -0
- package/dist/toolbar/db-viewer/studio/virtual-connection/mysql.d.ts +3 -0
- package/dist/toolbar/db-viewer/studio/virtual-connection/mysql.js +9 -0
- package/dist/toolbar/db-viewer/studio/virtual-connection/postgres.d.ts +3 -0
- package/dist/toolbar/db-viewer/studio/virtual-connection/postgres.js +9 -0
- package/dist/toolbar/db-viewer/viewer.js +20 -21
- package/dist/types.d.ts +30 -0
- package/dist/utils/effects/smtp.d.ts +1 -1
- package/dist/utils/lang-helper.d.ts +10 -2
- package/dist/virtual.d.ts +35 -28
- package/dist/virtuals/auth/core.d.ts +5 -5
- package/dist/virtuals/auth/verify-email.d.ts +6 -6
- package/dist/virtuals/components/Generator.astro +2 -2
- package/dist/virtuals/components/Renderer.astro +9 -1
- package/dist/virtuals/components/renderFn.d.ts +3 -1
- package/dist/virtuals/components/renderFn.js +18 -0
- package/dist/virtuals/lib/headDefaults.d.ts +4 -2
- package/dist/virtuals/lib/headDefaults.js +0 -2
- package/dist/virtuals/lib/routeMap.d.ts +0 -12
- package/dist/virtuals/lib/routeMap.js +2 -14
- package/dist/virtuals/mailer/index.d.ts +3 -3
- package/dist/virtuals/notifier/index.d.ts +5 -5
- package/dist/virtuals/plugins/dashboard-pages.d.ts +2 -64
- package/dist/virtuals/scripts/StorageFileBrowser.d.ts +1 -172
- package/dist/virtuals/scripts/StorageFileBrowser.js +216 -119
- package/dist/virtuals/template-engine/index.d.ts +4 -4
- package/frontend/components/dashboard/configuration/ConfigForm.astro +218 -110
- package/frontend/components/dashboard/content-mgmt/ContentSearch.astro +21 -22
- package/frontend/components/dashboard/content-mgmt/CreateFolder.astro +66 -54
- package/frontend/components/dashboard/content-mgmt/CreatePage.astro +58 -104
- package/frontend/components/dashboard/content-mgmt/EditFolder.astro +65 -67
- package/frontend/components/dashboard/content-mgmt/EditPage.astro +86 -134
- package/frontend/components/dashboard/content-mgmt/InnerSidebarElement.astro +0 -1
- package/frontend/components/dashboard/content-mgmt/PageHeader.astro +33 -52
- package/frontend/components/dashboard/content-mgmt/PageTypeHandler.astro +2 -2
- package/frontend/components/dashboard/profile/APITokens.astro +219 -158
- package/frontend/components/dashboard/profile/BasicInfo.astro +165 -106
- package/frontend/components/dashboard/profile/Notifications.astro +27 -18
- package/frontend/components/dashboard/profile/UpdatePassword.astro +134 -94
- package/frontend/components/dashboard/sidebar/VersionCheck.astro +31 -16
- package/frontend/components/dashboard/sidebar/VersionCheckChangelog.astro +18 -11
- package/frontend/components/dashboard/sidebar-modals/VersionModal.astro +2 -2
- package/frontend/components/dashboard/smtp-config/TemplateEditor.astro +14 -14
- package/frontend/components/dashboard/taxonomy/InnerSidebarElement.astro +0 -1
- package/frontend/components/dashboard/taxonomy/MetaContainer.astro +0 -2
- package/frontend/components/dashboard/taxonomy/PageHeader.astro +16 -24
- package/frontend/components/dashboard/taxonomy/TaxonomySearch.astro +23 -27
- package/frontend/components/dashboard/user-mgmt/InnerSidebarElement.astro +111 -104
- package/frontend/components/dashboard/user-mgmt/UserListItem.astro +9 -22
- package/frontend/components/dashboard/user-mgmt/UserListItems.astro +18 -0
- package/frontend/components/first-time-setup/snippets/{opt2-studiocms.config.diff → studiocms.config.diff} +1 -0
- package/frontend/components/shared/Code.astro +1 -4
- package/frontend/components/shared/DynamicSettingsRenderer.astro +1 -1
- package/frontend/components/shared/SSRUser.astro +2 -4
- package/frontend/components/shared/foldertree/FolderTreeNode.astro +0 -6
- package/frontend/components/shared/storage-manager/StorageCopyOutput.astro +0 -1
- package/frontend/components/shared/taxonomy/TaxonomyTreeNode.astro +0 -6
- package/frontend/layouts/DashboardLayout.astro +1 -10
- package/frontend/layouts/TaxonomyLayout.astro +0 -1
- package/frontend/middleware/index.ts +102 -61
- package/frontend/pages/404.astro +5 -9
- package/frontend/pages/[dashboard]/[...pluginPage].astro +10 -1
- package/frontend/pages/[dashboard]/configuration.astro +10 -1
- package/frontend/pages/[dashboard]/content-management/createfolder.astro +10 -1
- package/frontend/pages/[dashboard]/content-management/createpage.astro +10 -1
- package/frontend/pages/[dashboard]/content-management/diff.astro +39 -14
- package/frontend/pages/[dashboard]/content-management/editfolder.astro +10 -1
- package/frontend/pages/[dashboard]/content-management/editpage.astro +10 -1
- package/frontend/pages/[dashboard]/content-management/index.astro +10 -1
- package/frontend/pages/[dashboard]/index.astro +10 -1
- package/frontend/pages/[dashboard]/login.astro +86 -25
- package/frontend/pages/[dashboard]/password-reset.astro +22 -16
- package/frontend/pages/[dashboard]/plugins/[plugin].astro +10 -1
- package/frontend/pages/[dashboard]/profile.astro +10 -1
- package/frontend/pages/[dashboard]/signup.astro +153 -52
- package/frontend/pages/[dashboard]/smtp-configuration.astro +77 -75
- package/frontend/pages/[dashboard]/system-management.astro +10 -1
- package/frontend/pages/[dashboard]/taxonomy/categories.astro +30 -41
- package/frontend/pages/[dashboard]/taxonomy/index.astro +10 -0
- package/frontend/pages/[dashboard]/taxonomy/tags.astro +33 -43
- package/frontend/pages/[dashboard]/unverified-email.astro +29 -21
- package/frontend/pages/[dashboard]/user-management/edit.astro +170 -90
- package/frontend/pages/[dashboard]/user-management/index.astro +10 -1
- package/frontend/pages/studiocms_api/[...all].ts +106 -0
- package/frontend/pages/studiocms_api/_handlers/_utils/auth.ts +26 -0
- package/frontend/pages/studiocms_api/_handlers/_utils/changelog.ts +147 -0
- package/frontend/pages/studiocms_api/_handlers/_utils/db-studio-driver.ts +46 -0
- package/frontend/pages/studiocms_api/_handlers/_utils/parseLogLevel.ts +27 -0
- package/frontend/pages/studiocms_api/_handlers/auth/auth.ts +459 -0
- package/frontend/pages/studiocms_api/_handlers/auth/index.ts +17 -0
- package/frontend/pages/studiocms_api/_handlers/auth/oauth.ts +91 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/_shared.ts +57 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/apiTokens.ts +134 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/config.ts +64 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/content.ts +741 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/create.ts +480 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/emailNotifications.ts +49 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/index.ts +45 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/mailer.ts +136 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/plugins.ts +80 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/profile.ts +275 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/resetPassword.ts +140 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/search.ts +63 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/taxonomy.ts +285 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/templates.ts +75 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/users.ts +312 -0
- package/frontend/pages/studiocms_api/_handlers/dashboard/verifyEndpoints.ts +307 -0
- package/frontend/pages/studiocms_api/_handlers/integration/dbStudio.ts +98 -0
- package/frontend/pages/studiocms_api/_handlers/integration/index.ts +17 -0
- package/frontend/pages/studiocms_api/_handlers/integration/storageManager.ts +107 -0
- package/frontend/pages/studiocms_api/_handlers/rest-api/index.ts +8 -0
- package/frontend/pages/studiocms_api/_handlers/rest-api/v1/_shared.ts +41 -0
- package/frontend/pages/studiocms_api/_handlers/rest-api/v1/index.ts +17 -0
- package/frontend/pages/studiocms_api/_handlers/rest-api/v1/public.ts +195 -0
- package/frontend/pages/studiocms_api/_handlers/rest-api/v1/secure.ts +1726 -0
- package/frontend/pages/studiocms_api/_handlers/sdk.ts +129 -0
- package/frontend/pages/studiocms_api/_middleware/astroLocals.ts +36 -0
- package/frontend/pages/studiocms_api/_middleware/restApi.ts +56 -0
- package/frontend/pages/studiocms_api/integrations/[...all].ts +8 -0
- package/frontend/scripts/formdata.ts +219 -0
- package/frontend/setup-pages/3-done.astro +4 -20
- package/frontend/setup-pages/studiocms_api/dashboard/step-2.ts +3 -6
- package/frontend/styles/dashboard-base.css +0 -1
- package/frontend/web-vitals/endpoint.ts +2 -1
- package/package.json +35 -31
- package/dist/global.d.ts +0 -9
- package/frontend/components/dashboard/LoginChecker.astro +0 -68
- package/frontend/components/dashboard/user-mgmt/RankCheck.astro +0 -57
- package/frontend/components/first-time-setup/snippets/opt1-astro.config.diff +0 -14
- package/frontend/components/first-time-setup/snippets/opt2-astro.config.diff +0 -9
- package/frontend/middleware/_authmap.ts +0 -63
- package/frontend/pages/studiocms_api/auth/[path].ts +0 -390
- package/frontend/pages/studiocms_api/auth/[provider]/[...id].ts +0 -64
- package/frontend/pages/studiocms_api/auth/[provider]/_effects/index.ts +0 -101
- package/frontend/pages/studiocms_api/auth/_shared.ts +0 -52
- package/frontend/pages/studiocms_api/dashboard/api-tokens.ts +0 -115
- package/frontend/pages/studiocms_api/dashboard/config.ts +0 -74
- package/frontend/pages/studiocms_api/dashboard/content/diff.ts +0 -73
- package/frontend/pages/studiocms_api/dashboard/content/folder.ts +0 -220
- package/frontend/pages/studiocms_api/dashboard/content/page.ts +0 -359
- package/frontend/pages/studiocms_api/dashboard/create-reset-link.ts +0 -77
- package/frontend/pages/studiocms_api/dashboard/create-user-invite.ts +0 -231
- package/frontend/pages/studiocms_api/dashboard/create-user.ts +0 -186
- package/frontend/pages/studiocms_api/dashboard/email-notification-settings-site.ts +0 -74
- package/frontend/pages/studiocms_api/dashboard/mailer/check-email.ts +0 -75
- package/frontend/pages/studiocms_api/dashboard/mailer/config.ts +0 -136
- package/frontend/pages/studiocms_api/dashboard/plugins/[plugin].ts +0 -80
- package/frontend/pages/studiocms_api/dashboard/profile.ts +0 -245
- package/frontend/pages/studiocms_api/dashboard/resend-verify-email.ts +0 -77
- package/frontend/pages/studiocms_api/dashboard/reset-password.ts +0 -124
- package/frontend/pages/studiocms_api/dashboard/search-list.ts +0 -59
- package/frontend/pages/studiocms_api/dashboard/taxonomy-search.ts +0 -47
- package/frontend/pages/studiocms_api/dashboard/taxonomy.ts +0 -230
- package/frontend/pages/studiocms_api/dashboard/templates.ts +0 -74
- package/frontend/pages/studiocms_api/dashboard/update-user-notifications.ts +0 -86
- package/frontend/pages/studiocms_api/dashboard/users.ts +0 -236
- package/frontend/pages/studiocms_api/dashboard/verify-email.ts +0 -83
- package/frontend/pages/studiocms_api/dashboard/verify-session.ts +0 -187
- package/frontend/pages/studiocms_api/integrations/[type]/[...id].ts +0 -15
- package/frontend/pages/studiocms_api/integrations/[type]/_routes/db-studio.ts +0 -173
- package/frontend/pages/studiocms_api/integrations/[type]/_routes/storage.ts +0 -88
- package/frontend/pages/studiocms_api/partials/editor.astro +0 -74
- package/frontend/pages/studiocms_api/partials/render.astro +0 -39
- package/frontend/pages/studiocms_api/partials/user-list-items.astro +0 -43
- package/frontend/pages/studiocms_api/rest/utils/auth-token.ts +0 -59
- package/frontend/pages/studiocms_api/rest/v1/[type]/[...id].ts +0 -23
- package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/categories.ts +0 -267
- package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/folders.ts +0 -283
- package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/pages.ts +0 -505
- package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/settings.ts +0 -100
- package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/tags.ts +0 -229
- package/frontend/pages/studiocms_api/rest/v1/[type]/_routes/users.ts +0 -553
- package/frontend/pages/studiocms_api/rest/v1/public/[type]/[...id].ts +0 -19
- package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/categories.ts +0 -74
- package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/folders.ts +0 -85
- package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/pages.ts +0 -103
- package/frontend/pages/studiocms_api/rest/v1/public/[type]/_routes/tags.ts +0 -67
- package/frontend/pages/studiocms_api/sdk/[...path].ts +0 -97
- package/frontend/pages/studiocms_api/sdk/utils/changelog.ts +0 -119
- package/frontend/scripts/auth/formListener.ts +0 -81
- package/frontend/scripts/formdata-utils.ts +0 -116
- package/frontend/utils/build-partial-schema.ts +0 -46
- package/frontend/utils/errors.ts +0 -6
- package/frontend/utils/param-extractor.ts +0 -83
- package/frontend/utils/rest-router.ts +0 -444
|
@@ -3,7 +3,7 @@ import { getAvatarUrl } from "@withstudiocms/auth-kit/utils/libravatar";
|
|
|
3
3
|
import { StudioCMSColorwayInfo } from "@withstudiocms/cli-kit/colors";
|
|
4
4
|
import { group, log, password, select, text } from "@withstudiocms/effect/clack";
|
|
5
5
|
import { StudioCMSPermissions, StudioCMSUsersTable } from "@withstudiocms/sdk/tables";
|
|
6
|
-
import {
|
|
6
|
+
import { isValidEmail } from "#schemas/external-schemas";
|
|
7
7
|
import { Effect, runEffect, Schema } from "../../../effect.js";
|
|
8
8
|
import { StudioCMSCliError } from "../../utils/errors.js";
|
|
9
9
|
import { getCliDbClient } from "../../utils/getCliDbClient.js";
|
|
@@ -50,7 +50,7 @@ const createUsers = Effect.fn(function* (context, _debug, dryRun) {
|
|
|
50
50
|
message: "Username",
|
|
51
51
|
placeholder: "johndoe",
|
|
52
52
|
validate: (user) => {
|
|
53
|
-
const u = user
|
|
53
|
+
const u = user?.trim();
|
|
54
54
|
const isUser = currentUsers.find(({ username: username2 }) => username2 === u);
|
|
55
55
|
if (isUser) return "Username is already in use, please try another one";
|
|
56
56
|
return void 0;
|
|
@@ -90,9 +90,9 @@ const createUsers = Effect.fn(function* (context, _debug, dryRun) {
|
|
|
90
90
|
message: "E-Mail Address",
|
|
91
91
|
placeholder: "john@doe.tld",
|
|
92
92
|
validate: (email2) => {
|
|
93
|
-
const e = email2
|
|
94
|
-
|
|
95
|
-
const response =
|
|
93
|
+
const e = email2?.trim().toLowerCase();
|
|
94
|
+
if (!e) return "Email is required";
|
|
95
|
+
const response = isValidEmail(e);
|
|
96
96
|
if (!response.success) return response.error.message;
|
|
97
97
|
if (currentUsers.find((user) => user.email === e)) {
|
|
98
98
|
return "There is already a user with that email.";
|
|
@@ -121,7 +121,7 @@ const createUsers = Effect.fn(function* (context, _debug, dryRun) {
|
|
|
121
121
|
);
|
|
122
122
|
const { confirmPassword, email, name, newPassword, rank, username } = inputData;
|
|
123
123
|
if (newPassword !== confirmPassword) {
|
|
124
|
-
yield* log.error(
|
|
124
|
+
yield* log.error(styleText("red", "Passwords do not match, exiting..."));
|
|
125
125
|
return yield* context.exit(1);
|
|
126
126
|
}
|
|
127
127
|
const newUserId = crypto.randomUUID();
|
|
@@ -166,7 +166,7 @@ const createUsers = Effect.fn(function* (context, _debug, dryRun) {
|
|
|
166
166
|
message("Failed to create user or assign permissions");
|
|
167
167
|
return await runEffect(context.exit(1));
|
|
168
168
|
}
|
|
169
|
-
message(
|
|
169
|
+
message(styleText("green", "User created successfully!"));
|
|
170
170
|
} catch (error) {
|
|
171
171
|
await runEffect(log.error(`Failed to create user: ${error.message}`));
|
|
172
172
|
return await runEffect(context.exit(1));
|
|
@@ -80,7 +80,7 @@ const modifyUsers = Effect.fn(function* (context, _debug, dryRun) {
|
|
|
80
80
|
message: "Enter the new username",
|
|
81
81
|
placeholder: "johndoe",
|
|
82
82
|
validate: (user) => {
|
|
83
|
-
const u = user
|
|
83
|
+
const u = user?.trim();
|
|
84
84
|
const isUser = currentUsers.find(({ username }) => username === u);
|
|
85
85
|
if (isUser) return "Username is already in use, please try another one";
|
|
86
86
|
return void 0;
|
|
@@ -119,7 +119,7 @@ const modifyUsers = Effect.fn(function* (context, _debug, dryRun) {
|
|
|
119
119
|
const newDisplayName = yield* text({
|
|
120
120
|
message: "Enter new display name",
|
|
121
121
|
placeholder: currentUsers.find((u) => u.id === userSelection)?.name || "John Doe",
|
|
122
|
-
validate: (v) => v
|
|
122
|
+
validate: (v) => v?.trim().length === 0 ? "Display name cannot be empty" : void 0
|
|
123
123
|
});
|
|
124
124
|
if (typeof newDisplayName === "symbol") {
|
|
125
125
|
return yield* context.pCancel(newDisplayName);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Effect } from '../../../effect.js';
|
|
2
|
-
export declare const next: (debug: boolean) => Effect.Effect<void, import("effect/
|
|
2
|
+
export declare const next: (debug: boolean) => Effect.Effect<void, import("effect/ConfigError").ConfigError | import("effect/Cause").UnknownException | import("@withstudiocms/effect/clack").ClackError, never>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { styleText } from "node:util";
|
|
1
2
|
import { log } from "@withstudiocms/effect/clack";
|
|
2
|
-
import chalk from "chalk";
|
|
3
3
|
import { Effect } from "../../effect.js";
|
|
4
4
|
const checkRequiredEnvVarsEffect = Effect.fn(function* (envVars) {
|
|
5
5
|
const missingVars = [];
|
|
@@ -11,7 +11,7 @@ const checkRequiredEnvVarsEffect = Effect.fn(function* (envVars) {
|
|
|
11
11
|
});
|
|
12
12
|
if (missingVars.length > 0) {
|
|
13
13
|
yield* log.error(
|
|
14
|
-
`${
|
|
14
|
+
`${styleText(["red", "bold"], "Missing environment variables:")} ${missingVars.map((v) => styleText("red", v)).join(", ")}`
|
|
15
15
|
);
|
|
16
16
|
return yield* Effect.try(() => process.exit(1));
|
|
17
17
|
}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import { type ClackError, type Task } from '@withstudiocms/effect/clack';
|
|
2
|
-
import chalk from 'chalk';
|
|
3
2
|
import { Context, Effect, Layer, Option } from '../../effect.js';
|
|
4
3
|
export interface BaseContext {
|
|
5
|
-
chalk: typeof chalk;
|
|
6
4
|
cwd: string;
|
|
7
5
|
packageManager: string;
|
|
8
6
|
username: string;
|
|
9
7
|
tasks: Task[];
|
|
10
8
|
pCancel(val: symbol): Effect.Effect<void, ClackError, never>;
|
|
11
9
|
pOnCancel(): Effect.Effect<void, ClackError, never>;
|
|
12
|
-
exit(code: number): Effect.Effect<
|
|
10
|
+
exit(code: number): Effect.Effect<void, never, never>;
|
|
13
11
|
}
|
|
14
12
|
declare const CliContext_base: Context.TagClass<CliContext, "CliContext", BaseContext>;
|
|
15
13
|
export declare class CliContext extends CliContext_base {
|
|
16
14
|
static makeLayer: (context: BaseContext) => Layer.Layer<CliContext, never, never>;
|
|
17
15
|
static makeProvide: (context: BaseContext) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, CliContext>>;
|
|
18
16
|
}
|
|
19
|
-
export declare const genContext: Effect.Effect<BaseContext, import("effect/
|
|
17
|
+
export declare const genContext: Effect.Effect<BaseContext, import("effect/ConfigError").ConfigError | import("effect/Cause").UnknownException, never>;
|
|
20
18
|
export declare const parseDebug: (debugOpt: false | Option.Option<boolean>) => Effect.Effect<boolean, never, never>;
|
|
21
19
|
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { detectPackageManager } from "@withstudiocms/cli-kit/context";
|
|
2
2
|
import { cancelMessage, getName } from "@withstudiocms/cli-kit/messages";
|
|
3
3
|
import { cancel, isCancel } from "@withstudiocms/effect/clack";
|
|
4
|
-
import chalk from "chalk";
|
|
5
4
|
import { Context, Effect, genLogger, Layer, Option } from "../../effect.js";
|
|
6
5
|
class CliContext extends Context.Tag("CliContext")() {
|
|
7
6
|
static makeLayer = (context) => Layer.succeed(this, this.of(context));
|
|
@@ -18,9 +17,8 @@ const genContext = genLogger("studiocms/cli/utils/context.genContext")(function*
|
|
|
18
17
|
);
|
|
19
18
|
const cwd = process.cwd();
|
|
20
19
|
const username = yield* Effect.tryPromise(() => getName());
|
|
21
|
-
const exit = (code) => Effect.try(() => process.exit(code)).pipe(Effect.catchAll(() => Effect.
|
|
20
|
+
const exit = (code) => Effect.try(() => process.exit(code)).pipe(Effect.catchAll(() => Effect.void));
|
|
22
21
|
const context = {
|
|
23
|
-
chalk,
|
|
24
22
|
cwd,
|
|
25
23
|
packageManager,
|
|
26
24
|
username,
|
|
@@ -124,4 +124,4 @@ export declare const getCliDbClient: (context: BaseContext) => Effect.Effect<imp
|
|
|
124
124
|
readonly isPermanent: import("kysely").ColumnType<number, boolean, boolean>;
|
|
125
125
|
readonly expiresAt?: number | null | undefined;
|
|
126
126
|
};
|
|
127
|
-
}>, import("effect/
|
|
127
|
+
}>, import("effect/ParseResult").ParseError | import("effect/ConfigError").ConfigError | import("effect/Cause").UnknownException | import("../../db/index.js").UnsupportedDialectError | import("../../db/index.js").DriverImportError, never>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Effect } from '../../effect.js';
|
|
2
2
|
import { CliContext } from './context.js';
|
|
3
3
|
export declare const random: (...arr: any[]) => any;
|
|
4
|
-
export declare const intro: (debug: boolean) => Effect.Effect<void, import("effect/
|
|
4
|
+
export declare const intro: (debug: boolean) => Effect.Effect<void, import("effect/ConfigError").ConfigError | import("effect/Cause").UnknownException, CliContext>;
|
|
@@ -6,67 +6,72 @@ import { Effect } from 'effect';
|
|
|
6
6
|
* @returns An Effect that resolves to the merged StudioCMSOptions.
|
|
7
7
|
*/
|
|
8
8
|
export declare const loadConfig: (root: URL) => Effect.Effect<{
|
|
9
|
-
dbStartPage: boolean;
|
|
10
|
-
verbose: boolean;
|
|
11
|
-
logLevel: "All" | "Fatal" | "Error" | "Warning" | "Info" | "Debug" | "Trace" | "None";
|
|
12
|
-
db: {
|
|
13
|
-
dialect: "libsql" | "postgres" | "mysql";
|
|
9
|
+
readonly dbStartPage: boolean;
|
|
10
|
+
readonly verbose: boolean;
|
|
11
|
+
readonly logLevel: "All" | "Fatal" | "Error" | "Warning" | "Info" | "Debug" | "Trace" | "None";
|
|
12
|
+
readonly db: {
|
|
13
|
+
readonly dialect: "libsql" | "postgres" | "mysql";
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
readonly plugins?: import("../../schemas/index.js").StudioCMSPluginSchema[] | undefined;
|
|
16
|
+
readonly storageManager?: import("../../schemas/index.js").StudioCMSStorageManagerSchema | undefined;
|
|
17
|
+
readonly componentRegistry?: {
|
|
18
|
+
readonly [x: string]: string;
|
|
19
|
+
} | undefined;
|
|
20
|
+
readonly locale: {
|
|
21
|
+
readonly dateLocale: string;
|
|
22
|
+
readonly dateTimeFormat: import("../../schemas/external-schemas.js").DateTimeFormatOptions;
|
|
23
|
+
readonly i18n: {
|
|
24
|
+
readonly defaultLocale: string;
|
|
20
25
|
};
|
|
21
26
|
};
|
|
22
|
-
features: {
|
|
23
|
-
robotsTXT: boolean | {
|
|
24
|
-
host?: string | boolean | undefined;
|
|
25
|
-
sitemap?: string | boolean | string[] | undefined;
|
|
26
|
-
policy?: {
|
|
27
|
-
userAgent?: "360Spider" | "360Spider-Image" | "360Spider-Video" | "HaoSouSpider" | "AdsBot-Google" | "AdsBot-Google-Mobile" | "AdsBot-Google-Mobile-Apps" | "Googlebot" | "Googlebot-Image" | "Googlebot-Mobile" | "Googlebot-News" | "Googlebot-Video" | "Mediapartners-Google" | "adidxbot" | "bingbot" | "BingPreview" | "MicrosoftPreview" | "msnbot" | "msnbot-media" | "Applebot" | "AppleNewsBot" | "Baiduspider" | "Baiduspider-image" | "Baiduspider-mobile" | "Baiduspider-news" | "Baiduspider-video" | "coccoc" | "coccocbot-image" | "coccocbot-web" | "DuckDuckBot" | "DuckDuckGo-Favicons-Bot" | "facebookcatalog" | "facebookexternalhit" | "Facebot" | "gooblog" | "ichiro" | "Sogou blog" | "Sogou inst spider" | "Sogou News Spider" | "Sogou Orion spider" | "Sogou spider2" | "Sogou web spider" | "Yandex" | "YandexMobileBot" | "Algolia Crawler" | "BublupBot" | "CCBot" | "Cliqzbot" | "Daumoa" | "DeuSu" | "EuripBot" | "Exploratodo" | "Feedly" | "Findxbot" | "istellabot" | "JikeSpider" | "Lycos" | "Mail.Ru" | "MojeekBot" | "OrangeBot" | "Pinterest" | "Plukkie" | "Qwantify" | "Rambler" | "SemanticScholarBot" | "
|
|
28
|
-
allow?: string | string[] | undefined;
|
|
29
|
-
disallow?: string | string[] | undefined;
|
|
30
|
-
crawlDelay?: number | undefined;
|
|
31
|
-
cleanParam?: string | string[] | undefined;
|
|
27
|
+
readonly features: {
|
|
28
|
+
readonly robotsTXT: boolean | {
|
|
29
|
+
readonly host?: string | boolean | undefined;
|
|
30
|
+
readonly sitemap?: string | boolean | readonly string[] | undefined;
|
|
31
|
+
readonly policy?: readonly {
|
|
32
|
+
readonly userAgent?: "360Spider" | "360Spider-Image" | "360Spider-Video" | "HaoSouSpider" | "AdsBot-Google" | "AdsBot-Google-Mobile" | "AdsBot-Google-Mobile-Apps" | "Googlebot" | "Googlebot-Image" | "Googlebot-Mobile" | "Googlebot-News" | "Googlebot-Video" | "Mediapartners-Google" | "adidxbot" | "bingbot" | "BingPreview" | "MicrosoftPreview" | "msnbot" | "msnbot-media" | "Applebot" | "AppleNewsBot" | "Baiduspider" | "Baiduspider-image" | "Baiduspider-mobile" | "Baiduspider-news" | "Baiduspider-video" | "coccoc" | "coccocbot-image" | "coccocbot-web" | "DuckDuckBot" | "DuckDuckGo-Favicons-Bot" | "facebookcatalog" | "facebookexternalhit" | "Facebot" | "gooblog" | "ichiro" | "Sogou blog" | "Sogou inst spider" | "Sogou News Spider" | "Sogou Orion spider" | "Sogou spider2" | "Sogou web spider" | "Yandex" | "YandexMobileBot" | "Algolia Crawler" | "BublupBot" | "CCBot" | "Cliqzbot" | "Daumoa" | "DeuSu" | "EuripBot" | "Exploratodo" | "Feedly" | "Findxbot" | "istellabot" | "JikeSpider" | "Lycos" | "Mail.Ru" | "MojeekBot" | "OrangeBot" | "Pinterest" | "Plukkie" | "Qwantify" | "Rambler" | "SemanticScholarBot" | "SeSchemanamBot" | "Sosospider" | "Slurp" | "Twitterbot" | "WhatsApp" | "yacybot" | "YepBot" | "Yeti" | "YioopBot" | "yooSchemaBot" | "YoudaoBot" | "*" | readonly ("360Spider" | "360Spider-Image" | "360Spider-Video" | "HaoSouSpider" | "AdsBot-Google" | "AdsBot-Google-Mobile" | "AdsBot-Google-Mobile-Apps" | "Googlebot" | "Googlebot-Image" | "Googlebot-Mobile" | "Googlebot-News" | "Googlebot-Video" | "Mediapartners-Google" | "adidxbot" | "bingbot" | "BingPreview" | "MicrosoftPreview" | "msnbot" | "msnbot-media" | "Applebot" | "AppleNewsBot" | "Baiduspider" | "Baiduspider-image" | "Baiduspider-mobile" | "Baiduspider-news" | "Baiduspider-video" | "coccoc" | "coccocbot-image" | "coccocbot-web" | "DuckDuckBot" | "DuckDuckGo-Favicons-Bot" | "facebookcatalog" | "facebookexternalhit" | "Facebot" | "gooblog" | "ichiro" | "Sogou blog" | "Sogou inst spider" | "Sogou News Spider" | "Sogou Orion spider" | "Sogou spider2" | "Sogou web spider" | "Yandex" | "YandexMobileBot" | "Algolia Crawler" | "BublupBot" | "CCBot" | "Cliqzbot" | "Daumoa" | "DeuSu" | "EuripBot" | "Exploratodo" | "Feedly" | "Findxbot" | "istellabot" | "JikeSpider" | "Lycos" | "Mail.Ru" | "MojeekBot" | "OrangeBot" | "Pinterest" | "Plukkie" | "Qwantify" | "Rambler" | "SemanticScholarBot" | "SeSchemanamBot" | "Sosospider" | "Slurp" | "Twitterbot" | "WhatsApp" | "yacybot" | "YepBot" | "Yeti" | "YioopBot" | "yooSchemaBot" | "YoudaoBot" | "*")[] | undefined;
|
|
33
|
+
readonly allow?: string | readonly string[] | undefined;
|
|
34
|
+
readonly disallow?: string | readonly string[] | undefined;
|
|
35
|
+
readonly crawlDelay?: number | undefined;
|
|
36
|
+
readonly cleanParam?: string | readonly string[] | undefined;
|
|
32
37
|
}[] | undefined;
|
|
33
38
|
};
|
|
34
|
-
injectQuickActionsMenu: boolean;
|
|
35
|
-
sdk: {
|
|
36
|
-
cacheConfig: {
|
|
37
|
-
lifetime: number;
|
|
38
|
-
enabled: boolean;
|
|
39
|
+
readonly injectQuickActionsMenu: boolean;
|
|
40
|
+
readonly sdk: {
|
|
41
|
+
readonly cacheConfig: {
|
|
42
|
+
readonly lifetime: number;
|
|
43
|
+
readonly enabled: boolean;
|
|
39
44
|
};
|
|
40
45
|
};
|
|
41
|
-
dashboardConfig: {
|
|
42
|
-
dashboardEnabled: boolean;
|
|
43
|
-
inject404Route: boolean;
|
|
44
|
-
faviconURL: string;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
readonly dashboardConfig: {
|
|
47
|
+
readonly dashboardEnabled: boolean;
|
|
48
|
+
readonly inject404Route: boolean;
|
|
49
|
+
readonly faviconURL: string;
|
|
50
|
+
readonly dashboardRouteOverride?: string | undefined;
|
|
51
|
+
readonly versionCheck: boolean;
|
|
52
|
+
readonly security: {
|
|
53
|
+
readonly hideGeneratorTags: boolean;
|
|
48
54
|
};
|
|
49
|
-
dashboardRouteOverride?: string | undefined;
|
|
50
55
|
};
|
|
51
|
-
authConfig: {
|
|
52
|
-
enabled: boolean;
|
|
53
|
-
providers: {
|
|
54
|
-
usernameAndPassword: boolean;
|
|
55
|
-
usernameAndPasswordConfig: {
|
|
56
|
-
allowUserRegistration: boolean;
|
|
56
|
+
readonly authConfig: {
|
|
57
|
+
readonly enabled: boolean;
|
|
58
|
+
readonly providers: {
|
|
59
|
+
readonly usernameAndPassword: boolean;
|
|
60
|
+
readonly usernameAndPasswordConfig: {
|
|
61
|
+
readonly allowUserRegistration: boolean;
|
|
57
62
|
};
|
|
58
63
|
};
|
|
59
64
|
};
|
|
60
|
-
developerConfig: {
|
|
61
|
-
demoMode:
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
readonly developerConfig: {
|
|
66
|
+
readonly demoMode: boolean | {
|
|
67
|
+
readonly password: string;
|
|
68
|
+
readonly username: string;
|
|
64
69
|
};
|
|
65
70
|
};
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
readonly preferredImageService?: string | undefined;
|
|
72
|
+
readonly webVitals: boolean;
|
|
73
|
+
readonly api: {
|
|
74
|
+
readonly apiDocs: boolean;
|
|
75
|
+
};
|
|
68
76
|
};
|
|
69
|
-
|
|
70
|
-
storageManager?: import("../../plugins.js").StudioCMSStorageManager | undefined;
|
|
71
|
-
componentRegistry?: Record<string, string> | undefined;
|
|
72
|
-
}, import("effect/Cause").UnknownException, never>;
|
|
77
|
+
}, import("effect/ParseResult").ParseError | import("effect/Cause").UnknownException, never>;
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
parseAndMerge as _parseAndMerge
|
|
4
|
-
} from "@withstudiocms/config-utils";
|
|
5
|
-
import { Effect } from "effect";
|
|
1
|
+
import { loadConfigFile as _loadConfigFile } from "@withstudiocms/config-utils";
|
|
2
|
+
import { Effect, Schema } from "effect";
|
|
6
3
|
import { configPaths } from "../../consts.js";
|
|
7
4
|
import { StudioCMSOptionsSchema } from "../../schemas/index.js";
|
|
8
5
|
const loadConfigFile = Effect.fn(
|
|
9
6
|
(root) => Effect.tryPromise(() => _loadConfigFile(root, configPaths, "migrator"))
|
|
10
7
|
);
|
|
11
|
-
const
|
|
12
|
-
(config) =>
|
|
8
|
+
const parse = Effect.fn(
|
|
9
|
+
(config) => Schema.decode(StudioCMSOptionsSchema)(config ?? {})
|
|
13
10
|
);
|
|
14
|
-
const loadConfig = (root) => loadConfigFile(root).pipe(Effect.flatMap(
|
|
11
|
+
const loadConfig = (root) => loadConfigFile(root).pipe(Effect.flatMap(parse));
|
|
15
12
|
export {
|
|
16
13
|
loadConfig
|
|
17
14
|
};
|
package/dist/cli/utils/logger.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { styleText } from "node:util";
|
|
1
2
|
import { supportsColor } from "@withstudiocms/cli-kit/colors";
|
|
2
3
|
import { date } from "@withstudiocms/cli-kit/messages";
|
|
3
|
-
import chalk from "chalk";
|
|
4
4
|
import { Effect } from "effect";
|
|
5
5
|
let stdout = process.stdout;
|
|
6
6
|
function setStdout(writable) {
|
|
@@ -14,7 +14,7 @@ const logger = {
|
|
|
14
14
|
send(`DEBUG [${date}]: ${message}`);
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
send(`${
|
|
17
|
+
send(`${styleText(["blue", "bold"], `DEBUG [${date}]:`)} ${message}`);
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
const buildDebugLogger = Effect.fn(function* (debug) {
|
|
@@ -25,7 +25,7 @@ const buildDebugLogger = Effect.fn(function* (debug) {
|
|
|
25
25
|
send(`DEBUG [${date}]: ${message}`);
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
send(`${
|
|
28
|
+
send(`${styleText(["blue", "bold"], `DEBUG [${date}]:`)} ${message}`);
|
|
29
29
|
})
|
|
30
30
|
);
|
|
31
31
|
});
|
|
@@ -14,7 +14,7 @@ import { Effect } from '../../effect.js';
|
|
|
14
14
|
*
|
|
15
15
|
* @throws If the password module options or Scrypt configuration fail to initialize.
|
|
16
16
|
*/
|
|
17
|
-
declare const hashPassword: (password: string, _salt?: string | undefined) => Effect.Effect<string, import("
|
|
17
|
+
declare const hashPassword: (password: string, _salt?: string | undefined) => Effect.Effect<string, import("effectify/scrypt").ScryptError, never>, verifyPasswordStrength: (pass: string) => Effect.Effect<string | true, import("@withstudiocms/auth-kit/errors").PasswordError | import("@withstudiocms/auth-kit/errors").CheckIfUnsafeError | import("@effect/platform/HttpClientError").ResponseError, never>;
|
|
18
18
|
declare const getCheckers: Effect.Effect<{
|
|
19
19
|
username: (val: string) => Effect.Effect<boolean, import("@withstudiocms/auth-kit/errors").CheckIfUnsafeError, never>;
|
|
20
20
|
password: (val: string) => Effect.Effect<boolean, import("@withstudiocms/auth-kit/errors").CheckIfUnsafeError, never>;
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import { styleText } from "node:util";
|
|
1
2
|
import { makeScrypt, Password } from "@withstudiocms/auth-kit";
|
|
2
3
|
import { PasswordModOptions } from "@withstudiocms/auth-kit/config";
|
|
3
4
|
import { CheckIfUnsafe } from "@withstudiocms/auth-kit/utils/unsafeCheck";
|
|
4
|
-
import chalk from "chalk";
|
|
5
5
|
import dotenv from "dotenv";
|
|
6
6
|
import { Effect, runEffect } from "../../effect.js";
|
|
7
7
|
dotenv.config({ quiet: true });
|
|
8
8
|
let { CMS_ENCRYPTION_KEY } = process.env;
|
|
9
9
|
if (!CMS_ENCRYPTION_KEY) {
|
|
10
10
|
console.warn(
|
|
11
|
-
`${
|
|
11
|
+
`${styleText(["yellow", "bold"], "Warning:")} ${styleText(
|
|
12
|
+
"yellow",
|
|
12
13
|
"CMS_ENCRYPTION_KEY is not set... "
|
|
13
|
-
)}${
|
|
14
|
+
)}${styleText("gray", "Some commands may be disabled.")}`
|
|
14
15
|
);
|
|
15
16
|
CMS_ENCRYPTION_KEY = "+URKVIiIM1kmG6g9Znb10g==";
|
|
16
17
|
}
|