@silexlabs/silex 3.0.1-0 → 3.0.1
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/.env.default +3 -2
- package/.silex.js +39 -1
- package/README.md +37 -35
- package/dist/client/client/api.d.ts +8 -1
- package/dist/client/client/assetUrl.d.ts +54 -0
- package/dist/client/client/config.d.ts +60 -1
- package/dist/client/client/events.d.ts +19 -10
- package/dist/client/client/grapesjs/PublicationManager.d.ts +6 -8
- package/dist/client/client/grapesjs/PublicationUi.d.ts +8 -10
- package/dist/client/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/client/grapesjs/css-props.d.ts +6 -0
- package/dist/client/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/client/grapesjs/img.d.ts +6 -0
- package/dist/client/client/grapesjs/index.d.ts +6 -2
- package/dist/client/client/grapesjs/internal-links.d.ts +1 -1
- package/dist/client/client/grapesjs/keymaps.d.ts +123 -0
- package/dist/client/client/grapesjs/new-page-dialog.d.ts +1 -1
- package/dist/client/client/grapesjs/page-panel.d.ts +7 -1
- package/dist/client/client/grapesjs/project-bar.d.ts +20 -0
- package/dist/client/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/client/grapesjs/rich-text.d.ts +4 -1
- package/dist/client/client/grapesjs/semantic.d.ts +1 -1
- package/dist/client/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/client/grapesjs/settings.d.ts +3 -1
- package/dist/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/client/client/grapesjs/symbolDialogs.d.ts +1 -1
- package/dist/client/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/client/index.d.ts +5 -0
- package/dist/client/client/publication-transformers.d.ts +42 -0
- package/dist/client/client/publish-custom-code-block.d.ts +4 -0
- package/dist/client/client/publish-fonts.d.ts +4 -0
- package/dist/client/client/utils.d.ts +22 -1
- package/dist/client/constants.d.ts +3 -0
- package/dist/client/css/admin.css +1107 -411
- package/dist/client/css/admin.css.map +1 -0
- package/dist/client/grapesjs-filter-styles/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-fonts/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-fonts/src/commands.d.ts +3 -0
- package/dist/client/grapesjs-fonts/src/fonts.d.ts +4 -0
- package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +4 -0
- package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +4 -0
- package/dist/client/index.html +3 -2
- package/dist/client/js/main.js +305 -170
- package/dist/client/js/main.js.LICENSE.txt +21 -1
- package/dist/client/page.d.ts +1 -1
- package/dist/client/silex-lib/src/ts/client/api.d.ts +90 -0
- package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +54 -0
- package/dist/client/silex-lib/src/ts/client/config.d.ts +102 -0
- package/dist/client/silex-lib/src/ts/client/events.d.ts +23 -0
- package/dist/client/silex-lib/src/ts/client/expose.d.ts +8 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +15 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +73 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +59 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +6 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +6 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +123 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +9 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +21 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +16 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +3 -0
- package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +1 -0
- package/dist/client/silex-lib/src/ts/client/index.d.ts +10 -0
- package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +42 -0
- package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +4 -0
- package/dist/client/silex-lib/src/ts/client/utils.d.ts +22 -0
- package/dist/client/silex-lib/src/ts/constants.d.ts +32 -0
- package/dist/client/silex-lib/src/ts/page.d.ts +2 -0
- package/dist/client/silex-lib/src/ts/types.d.ts +339 -0
- package/dist/client/types.d.ts +59 -35
- package/dist/plugins/client/client/events.d.ts +19 -10
- package/dist/plugins/client/client/events.js +11 -0
- package/dist/plugins/client/client/events.js.map +1 -1
- package/dist/plugins/client/plugins/client/template.js +119 -71
- package/dist/plugins/client/plugins/client/template.js.map +1 -1
- package/dist/plugins/client/plugins/client/website-info.d.ts +1 -0
- package/dist/plugins/client/plugins/client/website-info.js +72 -0
- package/dist/plugins/client/plugins/client/website-info.js.map +1 -0
- package/dist/plugins/client/types.d.ts +59 -35
- package/dist/plugins/client/types.js +23 -0
- package/dist/plugins/client/types.js.map +1 -1
- package/dist/plugins/server/constants.d.ts +3 -0
- package/dist/plugins/server/constants.js +28 -1
- package/dist/plugins/server/constants.js.map +1 -1
- package/dist/plugins/server/plugins/server/Cache.js +9 -5
- package/dist/plugins/server/plugins/server/Cache.js.map +1 -1
- package/dist/plugins/server/plugins/server/DownloadConnector.d.ts +29 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js +127 -0
- package/dist/plugins/server/plugins/server/DownloadConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/FtpConnector.d.ts +5 -2
- package/dist/plugins/server/plugins/server/FtpConnector.js +38 -23
- package/dist/plugins/server/plugins/server/FtpConnector.js.map +1 -1
- package/dist/plugins/server/plugins/server/GitlabConnector.d.ts +63 -9
- package/dist/plugins/server/plugins/server/GitlabConnector.js +367 -91
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -1
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.d.ts +16 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.js +209 -0
- package/dist/plugins/server/plugins/server/GitlabHostingConnector.js.map +1 -0
- package/dist/plugins/server/plugins/server/SslPlugin.js +6 -6
- package/dist/plugins/server/plugins/server/SslPlugin.js.map +1 -1
- package/dist/plugins/server/plugins/server/StaticPlugin.d.ts +8 -1
- package/dist/plugins/server/plugins/server/StaticPlugin.js +5 -31
- package/dist/plugins/server/plugins/server/StaticPlugin.js.map +1 -1
- package/dist/plugins/server/server/config.js +8 -9
- package/dist/plugins/server/server/config.js.map +1 -1
- package/dist/plugins/server/server/connectors/FsHosting.d.ts +3 -2
- package/dist/plugins/server/server/connectors/FsHosting.js +18 -7
- package/dist/plugins/server/server/connectors/FsHosting.js.map +1 -1
- package/dist/plugins/server/server/connectors/FsStorage.d.ts +3 -1
- package/dist/plugins/server/server/connectors/FsStorage.js +35 -28
- package/dist/plugins/server/server/connectors/FsStorage.js.map +1 -1
- package/dist/plugins/server/server/connectors/connectors.d.ts +7 -7
- package/dist/plugins/server/server/connectors/connectors.js +6 -7
- package/dist/plugins/server/server/connectors/connectors.js.map +1 -1
- package/dist/plugins/server/server/events.js +16 -0
- package/dist/plugins/server/server/events.js.map +1 -1
- package/dist/plugins/server/server/jobs.d.ts +6 -0
- package/dist/plugins/server/server/jobs.js +12 -8
- package/dist/plugins/server/server/jobs.js.map +1 -1
- package/dist/plugins/server/server/utils/validation.js +1 -2
- package/dist/plugins/server/server/utils/validation.js.map +1 -1
- package/dist/plugins/server/types.d.ts +59 -35
- package/dist/plugins/server/types.js +24 -1
- package/dist/plugins/server/types.js.map +1 -1
- package/dist/server/constants.js +27 -1
- package/dist/server/plugins/server/Cache.js +9 -5
- package/dist/server/server/api/api.js +1 -1
- package/dist/server/server/api/connectorApi.js +154 -25
- package/dist/server/server/api/publicationApi.js +17 -25
- package/dist/server/server/api/websiteApi.js +30 -8
- package/dist/server/server/cli.js +9 -6
- package/dist/server/server/config.js +8 -9
- package/dist/server/server/connectors/FsHosting.js +17 -7
- package/dist/server/server/connectors/FsStorage.js +34 -28
- package/dist/server/server/connectors/connectors.js +6 -7
- package/dist/server/server/express.js +4 -5
- package/dist/server/server/index.js +5 -1
- package/dist/server/server/jobs.js +11 -8
- package/dist/server/server/utils/validation.js +1 -2
- package/dist/server/types.js +13 -1
- package/package.json +56 -42
- package/public/assets/download.png +0 -0
- package/public/assets/favicon.ico +0 -0
- package/public/assets/favicon.png +0 -0
- package/public/assets/ftp.png +0 -0
- package/public/assets/gitlab.png +0 -0
- package/public/assets/gitlab2.png +0 -0
- package/public/assets/laptop.png +0 -0
- package/public/assets/logo-silex-small.png +0 -0
- package/public/silex.js +5 -23
- package/src/css/_variables.scss +23 -20
- package/src/css/dialog.scss +27 -1
- package/src/css/fonts.scss +31 -0
- package/src/css/footer.scss +12 -0
- package/src/css/grapesjs-light.scss +180 -0
- package/src/css/grapesjs-plugins.scss +227 -0
- package/src/css/grapesjs.scss +84 -10
- package/src/css/index.scss +12 -1
- package/src/css/light.scss +7 -0
- package/src/css/project-bar.scss +32 -16
- package/src/css/silex.scss +79 -5
- package/src/css/website-info.scss +14 -0
- package/src/html/index.pug +3 -3
- package/src/ts/client/api.ts +38 -14
- package/src/ts/client/assetUrl.test.ts +164 -0
- package/src/ts/client/assetUrl.ts +254 -0
- package/src/ts/client/config.ts +133 -5
- package/src/ts/client/events.ts +21 -9
- package/src/ts/client/grapesjs/LoginDialog.ts +4 -2
- package/src/ts/client/grapesjs/PublicationManager.ts +180 -54
- package/src/ts/client/grapesjs/PublicationUi.ts +122 -86
- package/src/ts/client/grapesjs/breadcrumbs.ts +79 -0
- package/src/ts/client/grapesjs/css-props.ts +910 -0
- package/src/ts/client/grapesjs/eleventy.ts +11 -8
- package/{dist/plugins/client/page.js → src/ts/client/grapesjs/footer.ts} +24 -13
- package/src/ts/client/grapesjs/img.ts +147 -0
- package/src/ts/client/grapesjs/index.ts +234 -52
- package/src/ts/client/grapesjs/internal-links.test.ts +2 -1
- package/src/ts/client/grapesjs/internal-links.ts +14 -7
- package/src/ts/client/grapesjs/keymaps.ts +207 -0
- package/src/ts/client/grapesjs/new-page-dialog.ts +2 -3
- package/src/ts/client/grapesjs/page-panel.ts +92 -7
- package/src/ts/client/grapesjs/project-bar.ts +116 -72
- package/src/ts/client/grapesjs/resize-panel.ts +20 -0
- package/src/ts/client/grapesjs/rich-text.ts +21 -13
- package/src/ts/client/grapesjs/semantic.ts +3 -3
- package/src/ts/client/grapesjs/settings-sections.ts +117 -0
- package/src/ts/client/grapesjs/settings.ts +174 -96
- package/src/ts/client/grapesjs/storage.ts +98 -33
- package/src/ts/client/grapesjs/symbolDialogs.ts +3 -4
- package/src/ts/{plugins/server/AuthPlugin.ts → client/grapesjs/view-buttons.ts} +23 -19
- package/src/ts/client/index.ts +35 -16
- package/src/ts/client/publication-transformers.test.ts +207 -0
- package/src/ts/client/publication-transformers.ts +280 -0
- package/{dist/plugins/client/client/utils.js → src/ts/client/publish-custom-code-block.ts} +14 -8
- package/src/ts/client/publish-fonts.ts +36 -0
- package/src/ts/client/utils.ts +53 -1
- package/src/ts/constants.ts +31 -0
- package/src/ts/page.ts +2 -2
- package/src/ts/plugins/client/template.ts +125 -75
- package/src/ts/plugins/client/website-info.ts +84 -0
- package/src/ts/plugins/server/Cache.ts +6 -2
- package/src/ts/plugins/server/DownloadConnector.ts +146 -0
- package/src/ts/plugins/server/FtpConnector.ts +47 -21
- package/src/ts/plugins/server/GitlabConnector.ts +423 -108
- package/src/ts/plugins/server/GitlabHostingConnector.ts +215 -0
- package/src/ts/plugins/server/SslPlugin.ts +5 -5
- package/src/ts/plugins/server/StaticPlugin.ts +3 -30
- package/src/ts/server/api/connectorApi.ts +165 -28
- package/src/ts/server/api/publicationApi.ts +17 -24
- package/src/ts/server/api/websiteApi.ts +57 -14
- package/src/ts/server/cli.ts +7 -5
- package/src/ts/server/config.ts +9 -10
- package/src/ts/server/connectors/FsHosting.ts +14 -8
- package/src/ts/server/connectors/FsStorage.ts +40 -7
- package/src/ts/server/connectors/connectors.ts +8 -6
- package/src/ts/server/events.ts +17 -0
- package/src/ts/server/express.ts +2 -2
- package/src/ts/server/index.ts +6 -0
- package/src/ts/server/jobs.ts +14 -2
- package/src/ts/server/utils/BackwardCompat.ts +530 -529
- package/src/ts/types.ts +78 -34
- package/dist/plugins/client/client/utils.d.ts +0 -1
- package/dist/plugins/client/client/utils.js.map +0 -1
- package/dist/plugins/client/page.d.ts +0 -2
- package/dist/plugins/client/page.js.map +0 -1
- package/dist/plugins/client/plugins/client/publicationRenderer.d.ts +0 -2
- package/dist/plugins/client/plugins/client/publicationRenderer.js +0 -128
- package/dist/plugins/client/plugins/client/publicationRenderer.js.map +0 -1
- package/dist/plugins/server/plugins/server/AuthPlugin.d.ts +0 -1
- package/dist/plugins/server/plugins/server/AuthPlugin.js +0 -38
- package/dist/plugins/server/plugins/server/AuthPlugin.js.map +0 -1
- package/dist/plugins/server/plugins/server/HooksPlugin.d.ts +0 -7
- package/dist/plugins/server/plugins/server/HooksPlugin.js +0 -74
- package/dist/plugins/server/plugins/server/HooksPlugin.js.map +0 -1
- package/src/example-client-config.js +0 -64
- package/src/ts/plugins/client/publicationRenderer.ts +0 -128
- package/src/ts/plugins/server/HooksPlugin.ts +0 -76
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ts/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAmBH,MAAa,QAAS,SAAQ,KAAK;IACY;IAA7C,YAAY,OAAe,EAAkB,cAAsB;QACjE,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,mBAAc,GAAd,cAAc,CAAQ;QAEjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;IACpD,CAAC;CACF;AALD,4BAKC;AAgDD,KAAK;AACL,cAAc;AACD,QAAA,kBAAkB,GAAgB;AAC7C,YAAY;AACZ,aAAa;AACb,aAAa;AACb,eAAe;AACf,YAAY;AACZ,cAAc;AACd,kBAAkB;CACJ,CAAA;AAuDhB,0BAA0B;AAC1B,oDAAoD;AACpD,4BAA4B;AAC5B,GAAG;AACH,EAAE;AACF,8BAA8B;AAC9B,iBAAiB;AACjB,qBAAqB;AACrB,0CAA0C;AAC1C,4BAA4B;AAC5B,GAAG;AAEH,IAAY,IAEX;AAFD,WAAY,IAAI;IACd,iBAAS,CAAA;AACX,CAAC,EAFW,IAAI,oBAAJ,IAAI,QAEf;AAkCD,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,mCAAa,CAAA;IACb,qCAAe,CAAA;IACf,iCAAW,CAAA;IACX,qCAAe,CAAA;AACjB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B;AAED,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,wBAAW,CAAA;AACb,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AA2CD;;GAEG;AACH,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;AACrB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAuDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB"}
|
package/dist/server/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.API_WEBSITE_META_WRITE = exports.API_WEBSITE_META_READ = exports.API_WEBSITE_ASSETS_WRITE = exports.API_WEBSITE_ASSET_READ = exports.API_WEBSITE_LIST = exports.API_WEBSITE_DELETE = exports.API_WEBSITE_CREATE = exports.API_WEBSITE_WRITE = exports.API_WEBSITE_READ = exports.API_WEBSITE_PATH = exports.API_PUBLICATION_STATUS = exports.API_PUBLICATION_PUBLISH = exports.API_PUBLICATION_PATH = exports.API_CONNECTOR_LOGIN_CALLBACK = exports.API_CONNECTOR_SETTINGS = exports.API_CONNECTOR_LOGIN = exports.API_CONNECTOR_LOGOUT = exports.API_CONNECTOR_LIST = exports.API_CONNECTOR_USER = exports.API_CONNECTOR_PATH = exports.API_PATH = exports.CLIENT_CONFIG_FILE_NAME = exports.DEFAULT_LANGUAGE = exports.DEFAULT_WEBSITE_ID = exports.WEBSITE_META_DATA_FILE = exports.WEBSITE_DATA_FILE = void 0;
|
|
3
|
+
exports.DEV_MESSAGE = exports.SILEX_VERSION = exports.API_WEBSITE_META_WRITE = exports.API_WEBSITE_META_READ = exports.API_WEBSITE_ASSETS_WRITE = exports.API_WEBSITE_ASSET_READ = exports.API_WEBSITE_LIST = exports.API_WEBSITE_DUPLICATE = exports.API_WEBSITE_DELETE = exports.API_WEBSITE_CREATE = exports.API_WEBSITE_WRITE = exports.API_WEBSITE_READ = exports.API_WEBSITE_PATH = exports.API_PUBLICATION_STATUS = exports.API_PUBLICATION_PUBLISH = exports.API_PUBLICATION_PATH = exports.API_CONNECTOR_LOGIN_CALLBACK = exports.API_CONNECTOR_SETTINGS = exports.API_CONNECTOR_LOGIN = exports.API_CONNECTOR_LOGOUT = exports.API_CONNECTOR_LIST = exports.API_CONNECTOR_USER = exports.API_CONNECTOR_PATH = exports.API_PATH = exports.CLIENT_CONFIG_FILE_NAME = exports.DEFAULT_LANGUAGE = exports.DEFAULT_WEBSITE_ID = exports.WEBSITE_META_DATA_FILE = exports.WEBSITE_DATA_FILE = void 0;
|
|
4
4
|
exports.WEBSITE_DATA_FILE = 'website.json';
|
|
5
5
|
exports.WEBSITE_META_DATA_FILE = 'meta.json';
|
|
6
6
|
exports.DEFAULT_WEBSITE_ID = 'default';
|
|
@@ -22,8 +22,34 @@ exports.API_WEBSITE_READ = '/';
|
|
|
22
22
|
exports.API_WEBSITE_WRITE = '/';
|
|
23
23
|
exports.API_WEBSITE_CREATE = '/';
|
|
24
24
|
exports.API_WEBSITE_DELETE = '/';
|
|
25
|
+
exports.API_WEBSITE_DUPLICATE = '/duplicate';
|
|
25
26
|
exports.API_WEBSITE_LIST = '/';
|
|
26
27
|
exports.API_WEBSITE_ASSET_READ = '/assets';
|
|
27
28
|
exports.API_WEBSITE_ASSETS_WRITE = '/assets';
|
|
28
29
|
exports.API_WEBSITE_META_READ = '/meta';
|
|
29
30
|
exports.API_WEBSITE_META_WRITE = '/meta';
|
|
31
|
+
try {
|
|
32
|
+
exports.SILEX_VERSION = SILEX_VERSION_ENV;
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
exports.SILEX_VERSION = exports.SILEX_VERSION || '3.0.0';
|
|
36
|
+
}
|
|
37
|
+
exports.DEV_MESSAGE = `
|
|
38
|
+
__________________________________________________________
|
|
39
|
+
|
|
40
|
+
Create static websites visually, with dynamic content,
|
|
41
|
+
in the free spirit of the web.
|
|
42
|
+
|
|
43
|
+
███████ ██ ██ ███████ ██ ██ ██ ██ ██████
|
|
44
|
+
██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
45
|
+
███████ ██ ██ █████ ███ ██ ██ █████
|
|
46
|
+
██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
47
|
+
███████ ██ ███████ ███████ ██ ██ ████ ██████ ${exports.SILEX_VERSION.slice(1)}
|
|
48
|
+
|
|
49
|
+
Users are expected to contribute:
|
|
50
|
+
|
|
51
|
+
* Web designers: https://docs.silex.me/en/user/contribute
|
|
52
|
+
* Developers: https://docs.silex.me/en/dev/contribute
|
|
53
|
+
|
|
54
|
+
__________________________________________________________
|
|
55
|
+
`;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.noCache = noCache;
|
|
4
|
+
exports.withCache = withCache;
|
|
4
5
|
function noCache(req, res, next) {
|
|
5
6
|
res.header('Cache-Control', 'private,no-cache,no-store,must-revalidate,proxy-revalidate');
|
|
6
7
|
res.header('Expires', '-1');
|
|
7
8
|
res.header('Pragma', 'no-cache');
|
|
8
9
|
next();
|
|
9
10
|
}
|
|
10
|
-
exports.noCache = noCache;
|
|
11
11
|
function withCache(req, res, next) {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
if (req.url.endsWith('.html') || req.url.endsWith('/')) {
|
|
13
|
+
noCache(req, res, next);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
res.header('Cache-Control', 'public,max-age=86400,immutable');
|
|
17
|
+
next();
|
|
18
|
+
}
|
|
14
19
|
}
|
|
15
|
-
exports.withCache = withCache;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = default_1;
|
|
6
7
|
const express_1 = require("express");
|
|
7
8
|
const Cache_1 = require("../../plugins/server/Cache");
|
|
8
9
|
const connectorApi_1 = __importDefault(require("./connectorApi"));
|
|
@@ -17,4 +18,3 @@ function default_1(config) {
|
|
|
17
18
|
router.use(constants_1.API_PUBLICATION_PATH, (0, publicationApi_1.default)(config));
|
|
18
19
|
return router;
|
|
19
20
|
}
|
|
20
|
-
exports.default = default_1;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = default_1;
|
|
3
4
|
const express_1 = require("express");
|
|
4
5
|
const constants_1 = require("../../constants");
|
|
5
6
|
const validation_1 = require("../utils/validation");
|
|
@@ -14,7 +15,17 @@ function default_1(config) {
|
|
|
14
15
|
router.post(constants_1.API_CONNECTOR_LOGOUT, routeLogout);
|
|
15
16
|
return router;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
function validateStatus(status, _default = 500) {
|
|
19
|
+
if (!status) {
|
|
20
|
+
console.warn(`Status code is undefined, returning default ${_default}`);
|
|
21
|
+
return _default;
|
|
22
|
+
}
|
|
23
|
+
status = parseInt(status.toString());
|
|
24
|
+
if (status >= 100 && status < 600)
|
|
25
|
+
return status;
|
|
26
|
+
console.warn(`Invalid status code ${status}, returning default ${_default}}`);
|
|
27
|
+
return _default;
|
|
28
|
+
}
|
|
18
29
|
async function routeUser(req, res) {
|
|
19
30
|
try {
|
|
20
31
|
const config = (0, validation_1.requiredParam)(req.app.get('config'), 'Config object on express js APP');
|
|
@@ -44,8 +55,8 @@ async function routeUser(req, res) {
|
|
|
44
55
|
res.json(user);
|
|
45
56
|
}
|
|
46
57
|
catch (error) {
|
|
47
|
-
console.error('Error in the
|
|
48
|
-
res.status(error
|
|
58
|
+
console.error('Error in the user request', error, error.code);
|
|
59
|
+
res.status(validateStatus(error.code ?? error.httpStatusCode, 500)).json({
|
|
49
60
|
error: true,
|
|
50
61
|
message: error.message,
|
|
51
62
|
});
|
|
@@ -64,7 +75,7 @@ async function routeListConnectors(req, res) {
|
|
|
64
75
|
}
|
|
65
76
|
catch (error) {
|
|
66
77
|
console.error('Error while listing connectors', error);
|
|
67
|
-
res.status(error?.code ?? error?.httpStatusCode
|
|
78
|
+
res.status(validateStatus(error?.code ?? error?.httpStatusCode, 500)).json({
|
|
68
79
|
error: true,
|
|
69
80
|
message: 'Error while listing connectors: ' + error.message,
|
|
70
81
|
});
|
|
@@ -72,7 +83,7 @@ async function routeListConnectors(req, res) {
|
|
|
72
83
|
}
|
|
73
84
|
catch (error) {
|
|
74
85
|
console.error('Error in the list connectors request', error);
|
|
75
|
-
res.status(error?.code ?? error?.httpStatusCode
|
|
86
|
+
res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
|
|
76
87
|
error: true,
|
|
77
88
|
message: 'Error in the list connectors request: ' + error.message,
|
|
78
89
|
});
|
|
@@ -89,7 +100,7 @@ async function routeLogin(req, res) {
|
|
|
89
100
|
if (!connector)
|
|
90
101
|
throw new Error(`Connector not found ${connectorId} ${type}`);
|
|
91
102
|
if (await connector.isLoggedIn(session)) {
|
|
92
|
-
res.redirect(`${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`);
|
|
103
|
+
res.redirect(`${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`);
|
|
93
104
|
return;
|
|
94
105
|
}
|
|
95
106
|
const oauthUrl = await connector.getOAuthUrl(session);
|
|
@@ -98,14 +109,14 @@ async function routeLogin(req, res) {
|
|
|
98
109
|
}
|
|
99
110
|
else {
|
|
100
111
|
const redirectTo = await connector.getSettingsForm(session, '') ?
|
|
101
|
-
`${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_SETTINGS}?connectorId=${connectorId}&type=${type}` :
|
|
102
|
-
`${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`;
|
|
112
|
+
`${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_SETTINGS}?connectorId=${connectorId}&type=${type}` :
|
|
113
|
+
`${config.url}${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGIN_CALLBACK}?connectorId=${connectorId}&type=${type}`;
|
|
103
114
|
res.send(await connector.getLoginForm(session, redirectTo));
|
|
104
115
|
}
|
|
105
116
|
}
|
|
106
117
|
catch (error) {
|
|
107
118
|
console.error('Error in the login request', error);
|
|
108
|
-
res.status(error?.code ?? error?.httpStatusCode
|
|
119
|
+
res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
|
|
109
120
|
error: true,
|
|
110
121
|
message: 'Error in the login request: ' + error.message,
|
|
111
122
|
});
|
|
@@ -133,12 +144,12 @@ async function routeLoginSuccess(req, res) {
|
|
|
133
144
|
...body,
|
|
134
145
|
});
|
|
135
146
|
}
|
|
136
|
-
res.send(getEndAuthHtml('Logged in', false, connectorId, connector.getOptions(body)));
|
|
147
|
+
res.send(getEndAuthHtml('Logged in', false, connectorId, type, connector.getOptions(body)));
|
|
137
148
|
}
|
|
138
149
|
catch (error) {
|
|
139
150
|
res
|
|
140
|
-
.status(error?.code ?? error?.httpStatusCode
|
|
141
|
-
.send(getEndAuthHtml(error.message, true));
|
|
151
|
+
.status(validateStatus(error?.code ?? error?.httpStatusCode, 500))
|
|
152
|
+
.send(getEndAuthHtml(error.message, true, req.query.connectorId, req.query.type));
|
|
142
153
|
}
|
|
143
154
|
}
|
|
144
155
|
async function routeLogout(req, res) {
|
|
@@ -160,7 +171,7 @@ async function routeLogout(req, res) {
|
|
|
160
171
|
}
|
|
161
172
|
catch (error) {
|
|
162
173
|
console.error('Error while logging out', error);
|
|
163
|
-
res.status(error?.code ?? error?.httpStatusCode
|
|
174
|
+
res.status(validateStatus(error?.code ?? error?.httpStatusCode, 500)).json({
|
|
164
175
|
error: true,
|
|
165
176
|
message: 'Error while logging out: ' + error.message,
|
|
166
177
|
});
|
|
@@ -169,36 +180,154 @@ async function routeLogout(req, res) {
|
|
|
169
180
|
}
|
|
170
181
|
catch (error) {
|
|
171
182
|
console.error('Error in the logout request', error);
|
|
172
|
-
res.status(error?.code ?? error?.httpStatusCode
|
|
183
|
+
res.status(validateStatus(error?.code ?? error?.httpStatusCode, 400)).json({
|
|
173
184
|
error: true,
|
|
174
185
|
message: 'Error in the logout request: ' + error.message,
|
|
175
186
|
});
|
|
176
187
|
return;
|
|
177
188
|
}
|
|
178
189
|
}
|
|
179
|
-
function getEndAuthHtml(message, error, connectorId, options) {
|
|
190
|
+
function getEndAuthHtml(message, error, connectorId, connectorType, options) {
|
|
180
191
|
const data = {
|
|
181
192
|
type: 'login',
|
|
182
193
|
error,
|
|
183
194
|
message,
|
|
184
195
|
connectorId,
|
|
196
|
+
connectorType,
|
|
185
197
|
options,
|
|
186
198
|
};
|
|
199
|
+
const status = error ? 'Error' : 'Success';
|
|
187
200
|
return `
|
|
188
|
-
|
|
201
|
+
<!DOCTYPE html><html lang="en">
|
|
189
202
|
<head>
|
|
190
|
-
<
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
203
|
+
<title>Authentication ${status}</title>
|
|
204
|
+
<style>
|
|
205
|
+
:root {
|
|
206
|
+
--primaryColor: #333333;
|
|
207
|
+
--secondaryColor: #ddd;
|
|
208
|
+
--tertiaryColor: #8873FE;
|
|
209
|
+
--quaternaryColor: #A291FF;
|
|
210
|
+
--darkerPrimaryColor: #292929;
|
|
211
|
+
--lighterPrimaryColor: #575757;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
body {
|
|
215
|
+
font-family: Arial, sans-serif;
|
|
216
|
+
text-align: center;
|
|
217
|
+
margin: 50px;
|
|
218
|
+
color: var(--primaryColor);
|
|
219
|
+
background-color: var(--secondaryColor);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
h1 {
|
|
223
|
+
color: var(--tertiaryColor);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
p {
|
|
227
|
+
font-size: 18px;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
a {
|
|
231
|
+
color: var(--tertiaryColor);
|
|
232
|
+
text-decoration: none;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
a:hover {
|
|
236
|
+
text-decoration: underline;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.container {
|
|
240
|
+
max-width: 600px;
|
|
241
|
+
margin: auto;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.button {
|
|
245
|
+
display: inline-block;
|
|
246
|
+
margin-top: 20px;
|
|
247
|
+
padding: 10px 20px;
|
|
248
|
+
font-size: 16px;
|
|
249
|
+
color: var(--secondaryColor);
|
|
250
|
+
background-color: var(--tertiaryColor);
|
|
251
|
+
border: none;
|
|
252
|
+
border-radius: 5px;
|
|
253
|
+
text-decoration: none;
|
|
254
|
+
cursor: pointer;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.button:hover {
|
|
258
|
+
background-color: var(--quaternaryColor); /* Slightly lighter shade of tertiary color */
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.error {
|
|
262
|
+
display: none;
|
|
263
|
+
margin-top: 20px;
|
|
264
|
+
padding: 15px;
|
|
265
|
+
border: 1px solid var(--tertiaryColor);
|
|
266
|
+
border-radius: 5px;
|
|
267
|
+
text-wrap: wrap;
|
|
196
268
|
}
|
|
197
|
-
|
|
269
|
+
|
|
270
|
+
</style>
|
|
198
271
|
</head>
|
|
199
272
|
<body>
|
|
200
|
-
<
|
|
201
|
-
|
|
273
|
+
<div class="container">
|
|
274
|
+
<div id="message">
|
|
275
|
+
<h1>Authentication ${status}</h1>
|
|
276
|
+
<p>${error ? '' : message}</p>
|
|
277
|
+
</div>
|
|
278
|
+
${error ? `
|
|
279
|
+
<p><a data-link-to href="/">click here to continue</a>.</p>
|
|
280
|
+
<a data-link-to href="/" class="button">Retry</a>
|
|
281
|
+
<pre id="error-container" class="error">${message}</pre>
|
|
282
|
+
<script>
|
|
283
|
+
document.getElementById('error-container').style.display = "block";
|
|
284
|
+
fetch("${constants_1.API_PATH}${constants_1.API_CONNECTOR_PATH}${constants_1.API_CONNECTOR_LOGOUT}?connectorId=${connectorId}&type=${connectorType}", {
|
|
285
|
+
method: 'POST',
|
|
286
|
+
headers: {
|
|
287
|
+
'Content-Type': 'application/json',
|
|
288
|
+
credentials: 'include', // sends the cookies with the request
|
|
289
|
+
},
|
|
290
|
+
})
|
|
291
|
+
if(window.opener && window.opener !== window) {
|
|
292
|
+
const linksTo = document.querySelectorAll('[data-link-to]');
|
|
293
|
+
linksTo.forEach(link => {
|
|
294
|
+
link.addEventListener('click', (e) => {
|
|
295
|
+
e.preventDefault();
|
|
296
|
+
const data = ${JSON.stringify(data)};
|
|
297
|
+
window.opener.postMessage(data, '*');
|
|
298
|
+
window.close();
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
</script>
|
|
303
|
+
` : `
|
|
304
|
+
<p>If this window doesn’t close automatically, <a href="/">click here to return to the homepage</a>.</p>
|
|
305
|
+
<a href="/" class="button">Go to Homepage</a>
|
|
306
|
+
<pre id="error-container" class="error"></pre>
|
|
307
|
+
<script>
|
|
308
|
+
const data = ${JSON.stringify(data)};
|
|
309
|
+
const errorContainer = document.getElementById('error-container');
|
|
310
|
+
const messageContainer = document.getElementById('message');
|
|
311
|
+
|
|
312
|
+
// Check if the window was opened programmatically and is valid
|
|
313
|
+
if (window.opener && window.opener !== window) {
|
|
314
|
+
try {
|
|
315
|
+
// Send a postMessage to the opener
|
|
316
|
+
window.opener.postMessage(data, '*');
|
|
317
|
+
// Attempt to close the window
|
|
318
|
+
window.close();
|
|
319
|
+
} catch (e) {
|
|
320
|
+
// Display error message if closing fails
|
|
321
|
+
errorContainer.innerText = "Unable to close the window. Please close it manually.";
|
|
322
|
+
errorContainer.style.display = "block";
|
|
323
|
+
}
|
|
324
|
+
} else {
|
|
325
|
+
messageContainer.innerHTML = '<h1>Redirecting, please wait...</h1>';
|
|
326
|
+
window.location.href = '/'
|
|
327
|
+
}
|
|
328
|
+
</script>
|
|
329
|
+
`}
|
|
330
|
+
</div>
|
|
202
331
|
</body>
|
|
203
332
|
</html>
|
|
204
333
|
`;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.PublicationError = void 0;
|
|
4
|
+
exports.getHostingConnector = getHostingConnector;
|
|
5
|
+
exports.getStorageConnector = getStorageConnector;
|
|
6
|
+
exports.default = default_1;
|
|
4
7
|
const express_1 = require("express");
|
|
5
8
|
const constants_1 = require("../../constants");
|
|
6
|
-
const jobs_1 = require("../jobs");
|
|
7
9
|
const types_1 = require("../../types");
|
|
8
10
|
const connectors_1 = require("../connectors/connectors");
|
|
9
11
|
const validation_1 = require("../utils/validation");
|
|
10
12
|
const events_1 = require("../events");
|
|
13
|
+
const jobs_1 = require("../jobs");
|
|
11
14
|
class PublicationError extends Error {
|
|
12
15
|
code;
|
|
13
16
|
constructor(message, code) {
|
|
@@ -27,7 +30,6 @@ async function getHostingConnector(session, config, connectorId) {
|
|
|
27
30
|
}
|
|
28
31
|
return hostingConnector;
|
|
29
32
|
}
|
|
30
|
-
exports.getHostingConnector = getHostingConnector;
|
|
31
33
|
async function getStorageConnector(session, config, connectorId) {
|
|
32
34
|
const storageConnector = await (0, connectors_1.getConnector)(config, session, types_1.ConnectorType.STORAGE, connectorId);
|
|
33
35
|
if (!storageConnector) {
|
|
@@ -38,7 +40,6 @@ async function getStorageConnector(session, config, connectorId) {
|
|
|
38
40
|
}
|
|
39
41
|
return storageConnector;
|
|
40
42
|
}
|
|
41
|
-
exports.getStorageConnector = getStorageConnector;
|
|
42
43
|
function default_1(config) {
|
|
43
44
|
const router = (0, express_1.Router)();
|
|
44
45
|
router.get(constants_1.API_PUBLICATION_STATUS, async function (req, res) {
|
|
@@ -66,35 +67,27 @@ function default_1(config) {
|
|
|
66
67
|
const hostingId = (0, validation_1.requiredParam)(query.hostingId, 'hostingId in query');
|
|
67
68
|
const session = (0, validation_1.requiredParam)(req['session'], 'session on express request');
|
|
68
69
|
const data = body;
|
|
69
|
-
const { files
|
|
70
|
-
if (!files
|
|
71
|
-
throw new PublicationError('Missing
|
|
70
|
+
const { files } = data;
|
|
71
|
+
if (!files) {
|
|
72
|
+
throw new PublicationError('Missing files in body', 400);
|
|
72
73
|
}
|
|
73
74
|
config.emit(events_1.ServerEvent.PUBLISH_START, data);
|
|
74
75
|
const hostingConnector = await getHostingConnector(session, config, hostingId);
|
|
75
76
|
const storage = await getStorageConnector(session, config, storageId);
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!
|
|
80
|
-
throw new PublicationError('Missing src in
|
|
81
|
-
const
|
|
82
|
-
const src = asset.src.startsWith(prefix) ? asset.src.substring(prefix.length) : asset.src;
|
|
77
|
+
const filesList = await Promise.all(files.map(async (file) => {
|
|
78
|
+
const fileWithContent = file;
|
|
79
|
+
const fileWithSrc = file;
|
|
80
|
+
if (!fileWithContent.content && !fileWithSrc.src)
|
|
81
|
+
throw new PublicationError('Missing content or src in file', 400);
|
|
82
|
+
const src = fileWithSrc.src;
|
|
83
83
|
return {
|
|
84
|
-
path:
|
|
85
|
-
content: await storage.readAsset(session, websiteId, src),
|
|
84
|
+
path: file.permalink ?? file.path,
|
|
85
|
+
content: fileWithContent.content ?? await storage.readAsset(session, websiteId, fileWithSrc.src),
|
|
86
86
|
};
|
|
87
87
|
}));
|
|
88
|
-
const filesList = files.flatMap(file => ([{
|
|
89
|
-
path: file.htmlPath,
|
|
90
|
-
content: file.html,
|
|
91
|
-
}, {
|
|
92
|
-
path: file.cssPath,
|
|
93
|
-
content: file.css,
|
|
94
|
-
}])).concat(assetsFiles);
|
|
95
88
|
res.json({
|
|
96
89
|
url: await hostingConnector.getUrl(session, websiteId),
|
|
97
|
-
job: await hostingConnector.publish(session, websiteId, filesList),
|
|
90
|
+
job: await hostingConnector.publish(session, websiteId, filesList, jobs_1.jobManager),
|
|
98
91
|
});
|
|
99
92
|
}
|
|
100
93
|
catch (err) {
|
|
@@ -111,4 +104,3 @@ function default_1(config) {
|
|
|
111
104
|
});
|
|
112
105
|
return router;
|
|
113
106
|
}
|
|
114
|
-
exports.default = default_1;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = default_1;
|
|
6
7
|
const express_1 = require("express");
|
|
7
8
|
const formidable_1 = __importDefault(require("formidable"));
|
|
8
9
|
const constants_1 = require("../../constants");
|
|
@@ -175,6 +176,23 @@ function default_1(config, opts = {}) {
|
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
178
|
});
|
|
179
|
+
router.post(constants_1.API_WEBSITE_DUPLICATE, async (req, res) => {
|
|
180
|
+
try {
|
|
181
|
+
const query = req.query;
|
|
182
|
+
const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'New website id');
|
|
183
|
+
await duplicateWebsite(req['session'], websiteId, query.connectorId);
|
|
184
|
+
res.status(200).json({ message: 'Website duplicated' });
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
console.error('Error duplicating website data', e);
|
|
188
|
+
if (e.httpStatusCode) {
|
|
189
|
+
res.status(e.httpStatusCode).json({ message: e.message });
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
res.status(500).json({ message: e.message });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
});
|
|
178
196
|
router.get(constants_1.API_WEBSITE_ASSET_READ + '/:path', async (req, res) => {
|
|
179
197
|
{
|
|
180
198
|
try {
|
|
@@ -207,7 +225,6 @@ function default_1(config, opts = {}) {
|
|
|
207
225
|
const query = req.query;
|
|
208
226
|
const websiteId = (0, validation_1.requiredParam)(query.websiteId, 'Website id');
|
|
209
227
|
const form = (0, formidable_1.default)({
|
|
210
|
-
filename: (name, ext, part, _form) => `${name}${ext}`,
|
|
211
228
|
multiples: true,
|
|
212
229
|
keepExtensions: true,
|
|
213
230
|
});
|
|
@@ -230,11 +247,12 @@ function default_1(config, opts = {}) {
|
|
|
230
247
|
});
|
|
231
248
|
});
|
|
232
249
|
config.emit(events_1.ServerEvent.WEBSITE_ASSET_STORE_START, { files, websiteId, connectorId });
|
|
233
|
-
await writeAssets(req['session'], websiteId, files, connectorId);
|
|
250
|
+
const result = await writeAssets(req['session'], websiteId, files, connectorId);
|
|
251
|
+
const baseUrl = new URL(config.url).pathname.replace(/\/$/, '');
|
|
252
|
+
const data = result.map(path => (0, path_1.join)(baseUrl, constants_1.API_PATH, constants_1.API_WEBSITE_PATH, constants_1.API_WEBSITE_ASSET_READ, path)
|
|
253
|
+
+ `?websiteId=${websiteId}&connectorId=${connectorId ? connectorId : ''}`);
|
|
234
254
|
res.json({
|
|
235
|
-
data
|
|
236
|
-
+ file.path
|
|
237
|
-
+ `?websiteId=${websiteId}&connectorId=${connectorId ? connectorId : ''}`),
|
|
255
|
+
data,
|
|
238
256
|
});
|
|
239
257
|
config.emit(events_1.ServerEvent.WEBSITE_ASSET_STORE_END, null);
|
|
240
258
|
}
|
|
@@ -275,6 +293,10 @@ function default_1(config, opts = {}) {
|
|
|
275
293
|
const storageConnector = await getStorageConnector(session, connectorId);
|
|
276
294
|
return storageConnector.deleteWebsite(session, websiteId);
|
|
277
295
|
}
|
|
296
|
+
async function duplicateWebsite(session, websiteId, connectorId) {
|
|
297
|
+
const storageConnector = await getStorageConnector(session, connectorId);
|
|
298
|
+
return storageConnector.duplicateWebsite(session, websiteId);
|
|
299
|
+
}
|
|
278
300
|
async function readAsset(session, websiteId, fileName, connectorId) {
|
|
279
301
|
const storageConnector = await getStorageConnector(session, connectorId);
|
|
280
302
|
return storageConnector.readAsset(session, websiteId, `/${fileName}`);
|
|
@@ -285,9 +307,9 @@ function default_1(config, opts = {}) {
|
|
|
285
307
|
...file,
|
|
286
308
|
path: file.path.replace('/assets/', '/'),
|
|
287
309
|
}));
|
|
288
|
-
await storageConnector.writeAssets(session, websiteId, cleanPathFiles);
|
|
289
|
-
return files
|
|
310
|
+
const result = await storageConnector.writeAssets(session, websiteId, cleanPathFiles);
|
|
311
|
+
return files
|
|
312
|
+
.map(({ path }, idx) => result && result[idx] ? result[idx] : path);
|
|
290
313
|
}
|
|
291
314
|
return router;
|
|
292
315
|
}
|
|
293
|
-
exports.default = default_1;
|
|
@@ -11,11 +11,12 @@ const options = (0, cli_1.parse)({
|
|
|
11
11
|
'host': ['', 'Sets the host param of the express module "cookie-session".', 'string'],
|
|
12
12
|
'port': ['p', 'Port to listen to', 'int'],
|
|
13
13
|
'protocol': ['', 'Sets the protocol param of the express module "cookie-session".', 'string'],
|
|
14
|
-
'config': ['
|
|
15
|
-
'client-config': ['', 'Path to client config file to be served on .silex-client.js', '
|
|
16
|
-
'fs-root': ['', 'Path to the root folder where to store websites. Used by the default connector (fs).', 'string'],
|
|
14
|
+
'server-config': ['s', 'Path for the server side config file to load at startup', 'file'],
|
|
15
|
+
'client-config': ['c', 'Path to client config file to be served on .silex-client.js', 'file'],
|
|
16
|
+
'fs-root': ['', 'Path to the root folder where to store websites. Used by the default storage connector (fs).', 'string'],
|
|
17
|
+
'fs-hosting-root': ['', 'Path to the root folder where to publish websites. Used by the default hosting connector (fs).', 'string'],
|
|
17
18
|
'session-name': ['', 'Sets the name param of the express module "cookie-session".', 'string'],
|
|
18
|
-
'session-secret': ['
|
|
19
|
+
'session-secret': ['', 'Session secret', 'string'],
|
|
19
20
|
'ssl-port': [false, 'Port to listen to for SSL/HTTPS', 'int'],
|
|
20
21
|
'force-https': [false, 'Force HTTPS', 'boolean'],
|
|
21
22
|
'ssl-private-key': [false, 'Path to private key for SSL', 'file'],
|
|
@@ -35,12 +36,14 @@ if (options.port)
|
|
|
35
36
|
process.env.SILEX_PORT = options.port;
|
|
36
37
|
if (options['protocol'])
|
|
37
38
|
process.env.SILEX_PROTOCOL = options['protocol'];
|
|
38
|
-
if (options
|
|
39
|
-
process.env.
|
|
39
|
+
if (options['server-config'])
|
|
40
|
+
process.env.SILEX_SERVER_CONFIG = options['server-config'];
|
|
40
41
|
if (options['client-config'])
|
|
41
42
|
process.env.SILEX_CLIENT_CONFIG = options['client-config'];
|
|
42
43
|
if (options['fs-root'])
|
|
43
44
|
process.env.SILEX_FS_ROOT = options['fs-root'];
|
|
45
|
+
if (options['fs-hosting-root'])
|
|
46
|
+
process.env.SILEX_FS_HOSTING_ROOT = options['fs-hosting-root'];
|
|
44
47
|
if (options['session-name'])
|
|
45
48
|
process.env.SILEX_SESSION_NAME = options['session-name'];
|
|
46
49
|
if (options['session-secret'])
|
|
@@ -20,8 +20,8 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
20
20
|
};
|
|
21
21
|
port = process.env.SILEX_PORT;
|
|
22
22
|
debug = process.env.SILEX_DEBUG === 'true';
|
|
23
|
-
url = process.env.SILEX_URL ?? `${process.env.SILEX_PROTOCOL}://${process.env.SILEX_HOST}:${process.env.SILEX_PORT}`;
|
|
24
|
-
userConfigPath = process.env.
|
|
23
|
+
url = process.env.SILEX_URL?.replace(/\/$/, '') ?? `${process.env.SILEX_PROTOCOL}://${process.env.SILEX_HOST}:${process.env.SILEX_PORT}`;
|
|
24
|
+
userConfigPath = process.env.SILEX_SERVER_CONFIG;
|
|
25
25
|
configFilePath = (0, path_1.resolve)(__dirname, '../../../.silex.js');
|
|
26
26
|
getConnectors(type = null) {
|
|
27
27
|
if (!type) {
|
|
@@ -56,12 +56,12 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
56
56
|
async addRoutes(app) {
|
|
57
57
|
const path = process.env.SILEX_CLIENT_CONFIG;
|
|
58
58
|
if (path) {
|
|
59
|
-
console.
|
|
59
|
+
console.info(`> Serving client side config ${path} at ${constants_1.CLIENT_CONFIG_FILE_NAME}`);
|
|
60
60
|
try {
|
|
61
61
|
let clientConfig = (await (0, promises_1.readFile)(path)).toString();
|
|
62
62
|
app.get(`/${constants_1.CLIENT_CONFIG_FILE_NAME}`, async (req, res) => {
|
|
63
63
|
if (this.debug) {
|
|
64
|
-
console.
|
|
64
|
+
console.info('[Debug mode] Reloading config file', path);
|
|
65
65
|
clientConfig = (await (0, promises_1.readFile)(path)).toString();
|
|
66
66
|
}
|
|
67
67
|
res
|
|
@@ -81,7 +81,7 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
81
81
|
}
|
|
82
82
|
async loadUserConfig() {
|
|
83
83
|
if (this.userConfigPath) {
|
|
84
|
-
console.
|
|
84
|
+
console.info('> Loading user config', this.userConfigPath);
|
|
85
85
|
try {
|
|
86
86
|
await this.addPlugin(this.userConfigPath, {});
|
|
87
87
|
}
|
|
@@ -91,12 +91,11 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
async loadSilexConfig() {
|
|
94
|
-
console.
|
|
94
|
+
console.info('> Loading config', this.configFilePath);
|
|
95
95
|
try {
|
|
96
96
|
await this.addPlugin(this.configFilePath, {});
|
|
97
97
|
}
|
|
98
98
|
catch (e) {
|
|
99
|
-
console.log(e.requireStack[0]);
|
|
100
99
|
if (e.code === 'MODULE_NOT_FOUND' && (!e.requireStack || !e.requireStack.find(path => path === this.configFilePath))) {
|
|
101
100
|
console.info('> /!\\ Config file not found', this.configFilePath);
|
|
102
101
|
}
|
|
@@ -108,12 +107,12 @@ class ServerConfig extends silex_plugins_1.Config {
|
|
|
108
107
|
async initDefaultConnectors() {
|
|
109
108
|
if (!this.storageConnectors.length) {
|
|
110
109
|
this.addStorageConnector(new FsStorage_1.FsStorage(null, {
|
|
111
|
-
path: process.env.SILEX_FS_ROOT,
|
|
110
|
+
path: process.env.SILEX_FS_ROOT || (0, path_1.join)(process.cwd(), '/silex/storage'),
|
|
112
111
|
}));
|
|
113
112
|
}
|
|
114
113
|
if (!this.hostingConnectors.length) {
|
|
115
114
|
this.addHostingConnector(new FsHosting_1.FsHosting(null, {
|
|
116
|
-
path: process.env.
|
|
115
|
+
path: process.env.SILEX_FS_HOSTING_ROOT || (0, path_1.join)(process.cwd(), '/silex/hosting'),
|
|
117
116
|
}));
|
|
118
117
|
}
|
|
119
118
|
}
|