@silexlabs/silex 3.0.0-alpha.39 → 3.0.0-alpha.41

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.
Files changed (110) hide show
  1. package/.silex.js +38 -8
  2. package/dist/client/client/config.d.ts +11 -41
  3. package/dist/client/client/grapesjs/LoginDialog.d.ts +13 -0
  4. package/dist/client/client/grapesjs/PublicationManager.d.ts +69 -0
  5. package/dist/client/client/grapesjs/PublicationUi.d.ts +58 -0
  6. package/dist/client/client/grapesjs/index.d.ts +18 -44
  7. package/dist/client/client/grapesjs/storage.d.ts +1 -0
  8. package/dist/client/client/services.d.ts +35 -0
  9. package/dist/client/constants.d.ts +17 -0
  10. package/dist/client/css/admin.css +86 -3
  11. package/dist/client/js/main.js +201 -90
  12. package/dist/client/js/main.js.LICENSE.txt +6 -0
  13. package/dist/client/types.d.ts +200 -29
  14. package/dist/constants.d.ts +21 -0
  15. package/dist/constants.js +38 -1
  16. package/dist/constants.js.map +1 -0
  17. package/dist/events.d.ts +2 -0
  18. package/dist/events.js +17 -0
  19. package/dist/events.js.map +1 -0
  20. package/dist/plugins/AuthPlugin.d.ts +1 -0
  21. package/dist/plugins/AuthPlugin.js +38 -0
  22. package/dist/plugins/AuthPlugin.js.map +1 -0
  23. package/dist/plugins/Cache.d.ts +2 -0
  24. package/dist/plugins/Cache.js +32 -0
  25. package/dist/plugins/Cache.js.map +1 -0
  26. package/dist/plugins/FtpBackend.d.ts +92 -0
  27. package/dist/plugins/FtpBackend.js +604 -0
  28. package/dist/plugins/FtpBackend.js.map +1 -0
  29. package/dist/plugins/HooksPlugin.d.ts +7 -0
  30. package/dist/plugins/HooksPlugin.js +76 -0
  31. package/dist/plugins/HooksPlugin.js.map +1 -0
  32. package/dist/plugins/PublicationPlugin.d.ts +17 -0
  33. package/dist/plugins/PublicationPlugin.js +170 -0
  34. package/dist/plugins/PublicationPlugin.js.map +1 -0
  35. package/dist/plugins/SslPlugin.d.ts +1 -0
  36. package/dist/plugins/SslPlugin.js +86 -0
  37. package/dist/plugins/SslPlugin.js.map +1 -0
  38. package/dist/plugins/StaticPlugin.d.ts +1 -0
  39. package/dist/plugins/StaticPlugin.js +66 -0
  40. package/dist/plugins/StaticPlugin.js.map +1 -0
  41. package/dist/plugins/WebsitePlugin.d.ts +14 -0
  42. package/dist/plugins/WebsitePlugin.js +302 -0
  43. package/dist/plugins/WebsitePlugin.js.map +1 -0
  44. package/dist/server/backends/FsBackend.d.ts +42 -0
  45. package/dist/server/backends/FsBackend.js +269 -0
  46. package/dist/server/backends/FsBackend.js.map +1 -0
  47. package/dist/server/backends/index.d.ts +95 -0
  48. package/dist/server/backends/index.js +255 -0
  49. package/dist/server/backends/index.js.map +1 -0
  50. package/dist/server/cli.js +0 -1
  51. package/dist/server/config.d.ts +58 -0
  52. package/dist/server/config.js +128 -24
  53. package/dist/server/config.js.map +1 -0
  54. package/dist/server/express.js +31 -3
  55. package/dist/server/index.js +9 -20
  56. package/dist/server/jobs.d.ts +6 -0
  57. package/dist/server/jobs.js +75 -0
  58. package/dist/server/jobs.js.map +1 -0
  59. package/dist/server/utils/validation.d.ts +7 -0
  60. package/dist/server/utils/validation.js +37 -0
  61. package/dist/server/utils/validation.js.map +1 -0
  62. package/dist/types.d.ts +270 -0
  63. package/dist/types.js +35 -28
  64. package/dist/types.js.map +1 -0
  65. package/package.json +19 -8
  66. package/public/silex.js +17 -0
  67. package/src/css/dialog.scss +9 -2
  68. package/src/css/grapesjs.scss +79 -0
  69. package/src/css/project-bar.scss +2 -2
  70. package/src/example-client-config.js +17 -0
  71. package/src/html/templates/includes.pug +0 -1
  72. package/src/ts/client/config.ts +7 -6
  73. package/src/ts/client/grapesjs/LoginDialog.ts +190 -0
  74. package/src/ts/client/grapesjs/PublicationManager.ts +333 -0
  75. package/src/ts/client/grapesjs/PublicationUi.ts +320 -0
  76. package/src/ts/client/grapesjs/index.ts +88 -85
  77. package/src/ts/client/grapesjs/storage.ts +110 -0
  78. package/src/ts/client/index.ts +5 -7
  79. package/src/ts/client/services.ts +129 -0
  80. package/src/ts/constants.ts +21 -0
  81. package/src/ts/plugins/AuthPlugin.ts +38 -0
  82. package/src/ts/plugins/Cache.ts +28 -0
  83. package/src/ts/plugins/FtpBackend.ts +689 -0
  84. package/src/ts/plugins/HooksPlugin.ts +79 -0
  85. package/src/ts/plugins/PublicationPlugin.ts +170 -0
  86. package/src/{plugins/SslPlugin.js → ts/plugins/SslPlugin.ts} +24 -6
  87. package/src/ts/plugins/StaticPlugin.ts +68 -0
  88. package/src/ts/plugins/WebsitePlugin.ts +318 -0
  89. package/src/ts/server/backends/FsBackend.ts +266 -0
  90. package/src/ts/server/backends/index.ts +309 -0
  91. package/src/ts/server/cli.ts +0 -2
  92. package/src/ts/server/config.ts +103 -33
  93. package/src/ts/server/express.ts +37 -3
  94. package/src/ts/server/index.ts +24 -14
  95. package/src/ts/server/jobs.test.ts +74 -0
  96. package/src/ts/server/jobs.ts +77 -0
  97. package/src/ts/server/utils/validation.ts +33 -0
  98. package/src/ts/types.ts +167 -59
  99. package/dist/client/client/grapesjs/publish.d.ts +0 -18
  100. package/dist/page.js +0 -15
  101. package/src/plugins/AuthPlugin.js +0 -21
  102. package/src/plugins/Cache.js +0 -11
  103. package/src/plugins/DefaultBackend.js +0 -149
  104. package/src/plugins/ExpressPlugin.js +0 -39
  105. package/src/plugins/HooksPlugin.js +0 -58
  106. package/src/plugins/PublishPlugin.js +0 -69
  107. package/src/plugins/StaticPlugin.js +0 -48
  108. package/src/plugins/WebsitePlugin.js +0 -207
  109. package/src/ts/client/grapesjs/publish.ts +0 -403
  110. /package/.silex/default/{.silex.data.json → website.json} +0 -0
@@ -0,0 +1,604 @@
1
+ "use strict";
2
+ /*
3
+ * Silex website builder, free/libre no-code tool for makers.
4
+ * Copyright (c) 2023 lexoyo and Silex Labs foundation
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License as published by
8
+ * the Free Software Foundation, either version 3 of the License, or any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ var __importDefault = (this && this.__importDefault) || function (mod) {
19
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ const jsftp_1 = __importDefault(require("jsftp"));
23
+ const stream_1 = require("stream");
24
+ const express_1 = __importDefault(require("express"));
25
+ const backends_1 = require("../server/backends");
26
+ const validation_1 = require("../server/utils/validation");
27
+ const constants_1 = require("../constants");
28
+ const types_1 = require("../types");
29
+ const events_1 = require("../events");
30
+ const jobs_1 = require("../server/jobs");
31
+ const path_1 = require("path");
32
+ // **
33
+ // Utils methos
34
+ function updateStatus(filesStatuses, status, statusCbk) {
35
+ statusCbk && statusCbk({
36
+ message: `Writing files:<ul><li>${filesStatuses.map(({ file, message }) => `${file.path}: ${message}`).join('</li><li>')}</li></ul>`,
37
+ status,
38
+ });
39
+ }
40
+ function initStatus(files) {
41
+ return files.map(file => ({
42
+ file,
43
+ message: 'Waiting',
44
+ status: types_1.JobStatus.IN_PROGRESS,
45
+ }));
46
+ }
47
+ function handleInitError(err) {
48
+ if (err.code !== 550) {
49
+ console.error('Error creating folder', err);
50
+ throw err;
51
+ }
52
+ else {
53
+ console.log('Folder already exists', err.message);
54
+ }
55
+ }
56
+ function formHtml(type, { host, user, pass, port, secure, storageRootPath, publicationPath, websiteUrl }, err = '') {
57
+ return `
58
+ ${err && `<div class="error">${err || ''}</div>`}
59
+ <form method="post">
60
+ <label for="host">Host</label>
61
+ <input placeholder="ftp.example.com" type="text" name="host" value="${host || ''}" />
62
+ <label for="user">User</label>
63
+ <input placeholder="user" type="text" name="user" value="${user || ''}" />
64
+ <label for="pass">Pass</label>
65
+ <input placeholder="****" type="password" name="pass" value="${pass || ''}" />
66
+ <label for="port">Port</label>
67
+ <input placeholder="21" type="number" name="port" value="${port || '21'}" />
68
+ <div class="checkbox-container">
69
+ <input class="checkbox" type="checkbox" name="secure" value="true" ${secure ? 'checked' : ''} />
70
+ <label for="secure">Secure</label>
71
+ </div>
72
+ ${type === types_1.BackendType.STORAGE ? `
73
+ <details>
74
+ <summary>Storage options</summary>
75
+ <p>If you are not sure, don't change this</p>
76
+ <label for="storageRootPath">Root path where to store the website files</label>
77
+ <input placeholder="/silex/" type="text" name="storageRootPath" value="${storageRootPath || '/silex/'}" />
78
+ </details>
79
+ ` : ''}
80
+ ${type === types_1.BackendType.HOSTING ? `
81
+ <fieldset>
82
+ <legend>Publication options</legend>
83
+ <label for="publicationPath">Path where to publish</label>
84
+ <input placeholder="/public_html/" type="text" name="publicationPath" value="${publicationPath || ''}" />
85
+ <label for="websiteUrl">URL where to the site will be accessible</label>
86
+ <input placeholder="https://mysite.com/" type="text" name="websiteUrl" value="${websiteUrl || ''}" />
87
+ </fieldset>
88
+ ` : ''}
89
+ <div class="button-container">
90
+ <button type="submit" class="primary-button">Login</button>
91
+ <button type="button" class="secondary-button">Cancel</button>
92
+ </div>
93
+ </form>
94
+ `;
95
+ }
96
+ const formCss = `
97
+ /* Reset default form styles */
98
+ form {
99
+ margin: 0;
100
+ padding: 0;
101
+ }
102
+
103
+ /* Center the form */
104
+ body {
105
+ display: flex;
106
+ justify-content: center;
107
+ align-items: center;
108
+ height: 100vh;
109
+ background-color: #f5f5f5;
110
+ }
111
+
112
+ /* Style form container */
113
+ form {
114
+ width: 400px;
115
+ padding: 20px;
116
+ border-radius: 4px;
117
+ background-color: white;
118
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
119
+ }
120
+
121
+ /* Style form labels */
122
+ label {
123
+ font-weight: bold;
124
+ margin-bottom: 5px;
125
+ color: #333;
126
+ }
127
+
128
+ /* Style form inputs */
129
+ input {
130
+ width: 100%;
131
+ padding: 8px;
132
+ margin-bottom: 10px;
133
+ border: 1px solid #ccc;
134
+ border-radius: 4px;
135
+ }
136
+ input.checkbox {
137
+ width: 20px;
138
+ height: 20px;
139
+ }
140
+ fieldset {
141
+ padding: 20px;
142
+ }
143
+
144
+ /* Style form buttons */
145
+ .button-container {
146
+ display: flex;
147
+ justify-content: space-between;
148
+ margin-top: 20px;
149
+ }
150
+
151
+ .primary-button,
152
+ .secondary-button {
153
+ width: 48%;
154
+ padding: 10px;
155
+ border: none;
156
+ border-radius: 4px;
157
+ cursor: pointer;
158
+ transition: background-color 0.3s ease;
159
+ }
160
+
161
+ .primary-button {
162
+ background-color: #4caf50;
163
+ color: white;
164
+ }
165
+
166
+ .secondary-button {
167
+ background-color: #e0e0e0;
168
+ color: #333;
169
+ }
170
+
171
+ .primary-button:hover,
172
+ .secondary-button:hover {
173
+ background-color: #388e3c;
174
+ }
175
+
176
+ /* Style form checkbox */
177
+ .checkbox-container {
178
+ display: flex;
179
+ align-items: center;
180
+ margin-bottom: 10px;
181
+ margin: 20px 0;
182
+ }
183
+
184
+ .checkbox-container label {
185
+ margin-left: 5px;
186
+ color: #333;
187
+ }
188
+
189
+ /* Style details and summary elements */
190
+ details {
191
+ margin-top: 20px;
192
+ color: #333;
193
+ }
194
+
195
+ summary {
196
+ font-weight: bold;
197
+ cursor: pointer;
198
+ }
199
+
200
+ details > p {
201
+ margin-top: 10px;
202
+ }
203
+
204
+ `;
205
+ /**
206
+ * @class FtpBackend
207
+ * @implements {HostingProvider}
208
+ * @implements {StorageProvider}
209
+ */
210
+ class FtpBackend {
211
+ id = 'ftp';
212
+ displayName = 'Ftp';
213
+ icon = 'ftp';
214
+ options;
215
+ type;
216
+ constructor(config, opts) {
217
+ this.options = {
218
+ rootPath: '',
219
+ authorizeUrl: '/api/authorize/ftp/',
220
+ authorizePath: '/api/authorize/ftp/',
221
+ ...opts,
222
+ };
223
+ this.type = this.options.type;
224
+ config.on(events_1.EVENT_STARTUP_START, ({ app }) => {
225
+ const router = express_1.default.Router();
226
+ app.use(router);
227
+ router.post(this.options.authorizePath, express_1.default.urlencoded(), async (req, res, next) => {
228
+ if (req.query.type !== this.options.type) {
229
+ next();
230
+ return;
231
+ }
232
+ try {
233
+ const session = req['session'];
234
+ req['session'] = {
235
+ ...session,
236
+ ...await this.authorize(session, req.body),
237
+ };
238
+ res.redirect(`/${constants_1.API_BACKEND_LOGIN_CALLBACK}?backendId=${encodeURIComponent(this.id)}&type=${encodeURIComponent(this.type)}`);
239
+ }
240
+ catch (err) {
241
+ console.error('FTP auth failed', err);
242
+ res
243
+ .status(403)
244
+ .redirect(`/${constants_1.API_BACKEND_LOGIN_CALLBACK}?error=${encodeURIComponent(err.message)}&type=${encodeURIComponent(this.type)}`);
245
+ }
246
+ });
247
+ router.get(this.options.authorizePath, async (req, res, next) => {
248
+ if (req.query.type !== this.options.type) {
249
+ next();
250
+ return;
251
+ }
252
+ const session = req['session'];
253
+ // Check if the user is already logged in
254
+ const { host, user, pass, port, secure } = this.sessionData(session);
255
+ if (host && user && pass && port && secure) {
256
+ try {
257
+ await this.checkAuth({ host, user, pass, port, secure });
258
+ res.redirect(constants_1.API_BACKEND_LOGIN_CALLBACK + '?backendId=' + encodeURIComponent(this.id));
259
+ return;
260
+ }
261
+ catch (err) {
262
+ // TODO: check if the error is a 401
263
+ console.log('User not logged in yet, let\'s display the login form', err.message);
264
+ }
265
+ }
266
+ // If not, display the login form
267
+ res.send(await this.authorizeForm(session, req.query));
268
+ });
269
+ });
270
+ }
271
+ sessionData(session) {
272
+ return session[this.options.type] ?? {};
273
+ }
274
+ storageRootPath(session) {
275
+ return this.type === types_1.BackendType.STORAGE ? (0, validation_1.requiredParam)(this.sessionData(session).storageRootPath, 'storage root path') : (0, validation_1.requiredParam)(this.sessionData(session).publicationPath, 'publication path');
276
+ }
277
+ // **
278
+ // Ftp specific methods
279
+ async checkAuth({ host, user, pass, port, secure }) {
280
+ const ftp = await this.getClient({ host, user, pass, port, secure });
281
+ }
282
+ async authorizeForm(session, query) {
283
+ const { host, user, pass, port, secure, publicationPath, storageRootPath, websiteUrl } = this.sessionData(session);
284
+ const { error, type } = query;
285
+ (0, validation_1.requiredParam)(type, 'backend type');
286
+ return `
287
+ <html>
288
+ <head>
289
+ <title>FTP auth</title>
290
+ <style>
291
+ ${formCss}
292
+ </style>
293
+ </head>
294
+ <body>
295
+ ${formHtml((0, backends_1.toBackendEnum)(type), { host, user, pass, port, secure, publicationPath, storageRootPath, websiteUrl }, error)}
296
+ </body>
297
+ </html>
298
+ `;
299
+ }
300
+ async getClient({ host, user, pass, port, secure }) {
301
+ return new Promise((resolve, reject) => {
302
+ const ftp = new jsftp_1.default({
303
+ host,
304
+ port,
305
+ user,
306
+ pass,
307
+ });
308
+ ftp['on']('close', (err) => {
309
+ console.error('FTP CONNEXION close', err);
310
+ });
311
+ ftp['on']('error', (err) => {
312
+ console.error('FTP CONNEXION error', err);
313
+ reject(err);
314
+ });
315
+ ftp['on']('connect', () => {
316
+ ftp.auth(user, pass, (err) => {
317
+ if (err) {
318
+ console.error('FTP AUTH error', err);
319
+ reject(err);
320
+ }
321
+ else {
322
+ resolve(ftp);
323
+ }
324
+ });
325
+ });
326
+ });
327
+ }
328
+ // **
329
+ // Backend interface
330
+ // **
331
+ async authorize(session, body) {
332
+ const { host, user, pass, port, secure = false, publicationPath, storageRootPath, websiteUrl } = body;
333
+ (0, validation_1.requiredParam)(session, 'session');
334
+ (0, validation_1.requiredParam)(host, 'host');
335
+ (0, validation_1.requiredParam)(user, 'user');
336
+ (0, validation_1.requiredParam)(pass, 'pass');
337
+ (0, validation_1.requiredParam)(port, 'port');
338
+ await this.checkAuth({ host, user, pass, port, secure });
339
+ return {
340
+ [this.options.type]: { host, user, pass, port, secure, publicationPath, storageRootPath, websiteUrl },
341
+ };
342
+ }
343
+ async getUserData(session) {
344
+ return {
345
+ name: this.sessionData(session).user,
346
+ picture: this.icon,
347
+ };
348
+ }
349
+ async getSiteMeta(session, id) {
350
+ try {
351
+ const websiteId = (0, validation_1.requiredParam)(id, 'website id');
352
+ const files = await this.listDir(session, websiteId, '/');
353
+ const file = files.find(f => f.name === constants_1.WEBSITE_DATA_FILE_NAME);
354
+ if (!file) {
355
+ const storageRootPath = this.storageRootPath(session);
356
+ const dirPath = (0, path_1.join)(this.options.rootPath, storageRootPath, websiteId, '/');
357
+ console.error('Website data file not found', { websiteId, WEBSITE_DATA_FILE_NAME: constants_1.WEBSITE_DATA_FILE_NAME, dirPath, storageRootPath }, this.options);
358
+ throw new Error(`Website data file not found: ${constants_1.WEBSITE_DATA_FILE_NAME} in ${dirPath}`);
359
+ }
360
+ return {
361
+ websiteId,
362
+ //url: await this.getFileUrl(session, websiteId, WEBSITE_DATA_FILE_NAME),
363
+ createdAt: file.createdAt,
364
+ updatedAt: file.updatedAt,
365
+ metadata: file.metadata,
366
+ };
367
+ }
368
+ catch (err) {
369
+ console.error(err);
370
+ throw err;
371
+ }
372
+ }
373
+ async isLoggedIn(session) {
374
+ try {
375
+ if (!session[this.options.type]) {
376
+ return false;
377
+ }
378
+ //await this.checkAuth(this.sessionData(session))
379
+ }
380
+ catch (err) {
381
+ return false;
382
+ }
383
+ return true;
384
+ }
385
+ async getAuthorizeURL(session) {
386
+ return `${this.options.authorizeUrl}?type=${this.type}`;
387
+ }
388
+ //async login(session: FtpSession, userData): Promise<void> {
389
+ // await this.checkAuth(userData)
390
+ // session[this.options.sessionKey] = userData
391
+ // console.log('login success', userData, this.sessionData(session))
392
+ //}
393
+ async logout(session) {
394
+ delete session[this.options.type];
395
+ }
396
+ async getAdminUrl(session, id) {
397
+ return null;
398
+ }
399
+ // **
400
+ // Storage interface
401
+ /**
402
+ * Create necessary folders
403
+ * Assets and root folders
404
+ */
405
+ async init(session, id) {
406
+ // create root folder
407
+ const ftp = await this.getClient(this.sessionData(session));
408
+ try {
409
+ await this.createDir(session, id, '/');
410
+ }
411
+ catch (err) {
412
+ handleInitError(err);
413
+ }
414
+ try {
415
+ await this.createDir(session, id, '/assets');
416
+ }
417
+ catch (err) {
418
+ handleInitError(err);
419
+ }
420
+ }
421
+ async readFile(session, id, path) {
422
+ return new Promise((resolve, reject) => {
423
+ if (!this.sessionData(session))
424
+ throw new Error('Not logged in');
425
+ const storageRootPath = this.storageRootPath(session);
426
+ this.getClient(this.sessionData(session))
427
+ .then(ftp => {
428
+ const dirPath = (0, path_1.join)(this.options.rootPath, storageRootPath, id, path);
429
+ ftp.get(dirPath, (err, socket) => {
430
+ if (err) {
431
+ return reject(err);
432
+ }
433
+ resolve({
434
+ path,
435
+ content: stream_1.Readable.from(socket),
436
+ });
437
+ socket.resume();
438
+ });
439
+ })
440
+ .catch(err => {
441
+ console.error(`Error reading file ${path}: ${err.message}`);
442
+ reject(err);
443
+ });
444
+ });
445
+ }
446
+ async writeFiles(session, id, files, statusCbk) {
447
+ statusCbk && statusCbk({
448
+ message: 'Connecting to FTP server',
449
+ status: types_1.JobStatus.IN_PROGRESS,
450
+ });
451
+ const ftp = await this.getClient(this.sessionData(session));
452
+ const filesStatuses = initStatus(files);
453
+ const storageRootPath = this.storageRootPath(session);
454
+ return Promise.all(filesStatuses.map((fileStatus) => {
455
+ const { file } = fileStatus;
456
+ return new Promise((resolve, reject) => {
457
+ fileStatus.message = 'Upload started';
458
+ updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
459
+ const content = typeof file.content === 'string' ? Buffer.from(file.content) : file.content;
460
+ const dstPath = (0, path_1.join)(this.options.rootPath, storageRootPath, id, file.path);
461
+ ftp.put(content, dstPath, (err) => {
462
+ if (err) {
463
+ const errMsg = `Error writing file ${dstPath}: ${err.message}`;
464
+ console.error(errMsg);
465
+ //fileStatus.message = `Error ${err.message}`
466
+ //updateStatus(filesStatuses, JobStatus.ERROR, statusCbk)
467
+ statusCbk && statusCbk({
468
+ message: errMsg,
469
+ status: types_1.JobStatus.ERROR,
470
+ });
471
+ return reject(new Error(errMsg));
472
+ }
473
+ fileStatus.message = 'Upload complete';
474
+ updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
475
+ resolve(dstPath);
476
+ });
477
+ });
478
+ }))
479
+ .catch((err) => {
480
+ // Not sure why it never gets here
481
+ console.error(err);
482
+ statusCbk && statusCbk({
483
+ message: err.message,
484
+ status: types_1.JobStatus.ERROR,
485
+ });
486
+ return [];
487
+ });
488
+ }
489
+ async deleteFiles(session, id, paths) {
490
+ const storageRootPath = this.storageRootPath(session);
491
+ const ftp = await this.getClient(this.sessionData(session));
492
+ await Promise.all(paths.map((path) => new Promise((resolve, reject) => {
493
+ const dstPath = (0, path_1.join)(this.options.rootPath, storageRootPath, id, path);
494
+ ftp.raw('dele', dstPath, (err) => {
495
+ if (err) {
496
+ console.error(`Error deleting file ${dstPath}: ${err.message}`);
497
+ return reject(err);
498
+ }
499
+ resolve();
500
+ });
501
+ })));
502
+ }
503
+ async listWebsites(session) {
504
+ const storageRootPath = this.storageRootPath(session);
505
+ const ftp = await this.getClient(this.sessionData(session));
506
+ return new Promise((resolve, reject) => {
507
+ ftp.ls((0, path_1.join)(this.options.rootPath, storageRootPath), (err, res) => {
508
+ if (err) {
509
+ console.error(`Error listing websites: ${err.message}`);
510
+ return reject(err);
511
+ }
512
+ resolve(res.map((file) => ({
513
+ websiteId: file.name,
514
+ createdAt: new Date(file.time),
515
+ updatedAt: new Date(file.time),
516
+ metadata: {
517
+ ...file,
518
+ },
519
+ })));
520
+ });
521
+ });
522
+ }
523
+ async listDir(session, id, path) {
524
+ const ftp = await this.getClient(this.sessionData(session));
525
+ const storageRootPath = this.storageRootPath(session);
526
+ return new Promise((resolve, reject) => {
527
+ const dstPath = (0, path_1.join)(this.options.rootPath, storageRootPath, id, path);
528
+ ftp.ls(dstPath, (err, res) => {
529
+ if (err) {
530
+ console.error(`Error listing folder ${dstPath}: ${err.message}`);
531
+ return reject(err);
532
+ }
533
+ resolve(res.map((file) => ({
534
+ name: file.name,
535
+ isDir: file.type === 1,
536
+ size: file.size,
537
+ createdAt: new Date(file.time),
538
+ updatedAt: new Date(file.time),
539
+ metaData: {
540
+ size: file.size,
541
+ },
542
+ })));
543
+ });
544
+ });
545
+ }
546
+ async createDir(session, id, path) {
547
+ const storageRootPath = this.storageRootPath(session);
548
+ const ftp = await this.getClient(this.sessionData(session));
549
+ return new Promise((resolve, reject) => {
550
+ const dirPath = (0, path_1.join)(this.options.rootPath, storageRootPath, id, path);
551
+ ftp.raw('mkd', dirPath, (err) => {
552
+ if (err) {
553
+ console.error(`Error creating folder ${dirPath}: ${err.message}`);
554
+ return reject(err);
555
+ }
556
+ resolve();
557
+ });
558
+ });
559
+ }
560
+ async deleteDir(session, id, path) {
561
+ const storageRootPath = this.storageRootPath(session);
562
+ const ftp = await this.getClient(this.sessionData(session));
563
+ return new Promise((resolve, reject) => {
564
+ const dirPath = (0, path_1.join)(this.options.rootPath, storageRootPath, id, path);
565
+ ftp.raw('rmd', dirPath, (err) => {
566
+ if (err) {
567
+ console.error(`Error deleting folder ${dirPath}: ${err.message}`);
568
+ return reject(err);
569
+ }
570
+ resolve();
571
+ });
572
+ });
573
+ }
574
+ // **
575
+ // Hosting interface
576
+ async getWebsiteUrl(session, id) {
577
+ // FIXME: do not store websiteUrl in the session, but in the website data
578
+ console.warn('FIXME: do not store websiteUrl in the session, but in the website data');
579
+ return this.sessionData(session).websiteUrl ?? '';
580
+ }
581
+ async publish(session, id, backendData, files) {
582
+ const job = (0, jobs_1.startJob)(`Publishing to ${this.displayName}`);
583
+ job.logs = [[`Publishing to ${this.displayName}`]];
584
+ job.errors = [[]];
585
+ this.writeFiles(session, '', files, async ({ status, message }) => {
586
+ // Update the job status
587
+ job.status = status;
588
+ job.message = message;
589
+ job.logs[0].push(message);
590
+ // Add the website url
591
+ job.url = await this.getWebsiteUrl(session, id);
592
+ if (status === types_1.JobStatus.SUCCESS) {
593
+ (0, jobs_1.jobSuccess)(job.jobId, message);
594
+ }
595
+ else if (status === types_1.JobStatus.ERROR) {
596
+ job.errors[0].push(message);
597
+ (0, jobs_1.jobError)(job.jobId, message);
598
+ }
599
+ });
600
+ return job;
601
+ }
602
+ }
603
+ exports.default = FtpBackend;
604
+ //# sourceMappingURL=FtpBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FtpBackend.js","sourceRoot":"","sources":["../../src/ts/plugins/FtpBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ServerConfig } from '../server/config';
2
+ type HooksOptions = {
3
+ gitUrl?: string;
4
+ buildUrl?: string;
5
+ };
6
+ export default function (config: ServerConfig, opts?: HooksOptions): Promise<void>;
7
+ export {};