@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.
- package/.silex.js +38 -8
- package/dist/client/client/config.d.ts +11 -41
- package/dist/client/client/grapesjs/LoginDialog.d.ts +13 -0
- package/dist/client/client/grapesjs/PublicationManager.d.ts +69 -0
- package/dist/client/client/grapesjs/PublicationUi.d.ts +58 -0
- package/dist/client/client/grapesjs/index.d.ts +18 -44
- package/dist/client/client/grapesjs/storage.d.ts +1 -0
- package/dist/client/client/services.d.ts +35 -0
- package/dist/client/constants.d.ts +17 -0
- package/dist/client/css/admin.css +86 -3
- package/dist/client/js/main.js +201 -90
- package/dist/client/js/main.js.LICENSE.txt +6 -0
- package/dist/client/types.d.ts +200 -29
- package/dist/constants.d.ts +21 -0
- package/dist/constants.js +38 -1
- package/dist/constants.js.map +1 -0
- package/dist/events.d.ts +2 -0
- package/dist/events.js +17 -0
- package/dist/events.js.map +1 -0
- package/dist/plugins/AuthPlugin.d.ts +1 -0
- package/dist/plugins/AuthPlugin.js +38 -0
- package/dist/plugins/AuthPlugin.js.map +1 -0
- package/dist/plugins/Cache.d.ts +2 -0
- package/dist/plugins/Cache.js +32 -0
- package/dist/plugins/Cache.js.map +1 -0
- package/dist/plugins/FtpBackend.d.ts +92 -0
- package/dist/plugins/FtpBackend.js +604 -0
- package/dist/plugins/FtpBackend.js.map +1 -0
- package/dist/plugins/HooksPlugin.d.ts +7 -0
- package/dist/plugins/HooksPlugin.js +76 -0
- package/dist/plugins/HooksPlugin.js.map +1 -0
- package/dist/plugins/PublicationPlugin.d.ts +17 -0
- package/dist/plugins/PublicationPlugin.js +170 -0
- package/dist/plugins/PublicationPlugin.js.map +1 -0
- package/dist/plugins/SslPlugin.d.ts +1 -0
- package/dist/plugins/SslPlugin.js +86 -0
- package/dist/plugins/SslPlugin.js.map +1 -0
- package/dist/plugins/StaticPlugin.d.ts +1 -0
- package/dist/plugins/StaticPlugin.js +66 -0
- package/dist/plugins/StaticPlugin.js.map +1 -0
- package/dist/plugins/WebsitePlugin.d.ts +14 -0
- package/dist/plugins/WebsitePlugin.js +302 -0
- package/dist/plugins/WebsitePlugin.js.map +1 -0
- package/dist/server/backends/FsBackend.d.ts +42 -0
- package/dist/server/backends/FsBackend.js +269 -0
- package/dist/server/backends/FsBackend.js.map +1 -0
- package/dist/server/backends/index.d.ts +95 -0
- package/dist/server/backends/index.js +255 -0
- package/dist/server/backends/index.js.map +1 -0
- package/dist/server/cli.js +0 -1
- package/dist/server/config.d.ts +58 -0
- package/dist/server/config.js +128 -24
- package/dist/server/config.js.map +1 -0
- package/dist/server/express.js +31 -3
- package/dist/server/index.js +9 -20
- package/dist/server/jobs.d.ts +6 -0
- package/dist/server/jobs.js +75 -0
- package/dist/server/jobs.js.map +1 -0
- package/dist/server/utils/validation.d.ts +7 -0
- package/dist/server/utils/validation.js +37 -0
- package/dist/server/utils/validation.js.map +1 -0
- package/dist/types.d.ts +270 -0
- package/dist/types.js +35 -28
- package/dist/types.js.map +1 -0
- package/package.json +19 -8
- package/public/silex.js +17 -0
- package/src/css/dialog.scss +9 -2
- package/src/css/grapesjs.scss +79 -0
- package/src/css/project-bar.scss +2 -2
- package/src/example-client-config.js +17 -0
- package/src/html/templates/includes.pug +0 -1
- package/src/ts/client/config.ts +7 -6
- package/src/ts/client/grapesjs/LoginDialog.ts +190 -0
- package/src/ts/client/grapesjs/PublicationManager.ts +333 -0
- package/src/ts/client/grapesjs/PublicationUi.ts +320 -0
- package/src/ts/client/grapesjs/index.ts +88 -85
- package/src/ts/client/grapesjs/storage.ts +110 -0
- package/src/ts/client/index.ts +5 -7
- package/src/ts/client/services.ts +129 -0
- package/src/ts/constants.ts +21 -0
- package/src/ts/plugins/AuthPlugin.ts +38 -0
- package/src/ts/plugins/Cache.ts +28 -0
- package/src/ts/plugins/FtpBackend.ts +689 -0
- package/src/ts/plugins/HooksPlugin.ts +79 -0
- package/src/ts/plugins/PublicationPlugin.ts +170 -0
- package/src/{plugins/SslPlugin.js → ts/plugins/SslPlugin.ts} +24 -6
- package/src/ts/plugins/StaticPlugin.ts +68 -0
- package/src/ts/plugins/WebsitePlugin.ts +318 -0
- package/src/ts/server/backends/FsBackend.ts +266 -0
- package/src/ts/server/backends/index.ts +309 -0
- package/src/ts/server/cli.ts +0 -2
- package/src/ts/server/config.ts +103 -33
- package/src/ts/server/express.ts +37 -3
- package/src/ts/server/index.ts +24 -14
- package/src/ts/server/jobs.test.ts +74 -0
- package/src/ts/server/jobs.ts +77 -0
- package/src/ts/server/utils/validation.ts +33 -0
- package/src/ts/types.ts +167 -59
- package/dist/client/client/grapesjs/publish.d.ts +0 -18
- package/dist/page.js +0 -15
- package/src/plugins/AuthPlugin.js +0 -21
- package/src/plugins/Cache.js +0 -11
- package/src/plugins/DefaultBackend.js +0 -149
- package/src/plugins/ExpressPlugin.js +0 -39
- package/src/plugins/HooksPlugin.js +0 -58
- package/src/plugins/PublishPlugin.js +0 -69
- package/src/plugins/StaticPlugin.js +0 -48
- package/src/plugins/WebsitePlugin.js +0 -207
- package/src/ts/client/grapesjs/publish.ts +0 -403
- /package/.silex/default/{.silex.data.json → website.json} +0 -0
|
@@ -0,0 +1,302 @@
|
|
|
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
|
+
exports.WebsiteError = void 0;
|
|
23
|
+
const express_1 = require("express");
|
|
24
|
+
const formidable_1 = __importDefault(require("formidable"));
|
|
25
|
+
const Cache_1 = require("./Cache");
|
|
26
|
+
const constants_1 = require("../constants");
|
|
27
|
+
const fs_1 = require("fs");
|
|
28
|
+
const types_1 = require("../types");
|
|
29
|
+
const backends_1 = require("../server/backends");
|
|
30
|
+
const stream_1 = require("stream");
|
|
31
|
+
const validation_1 = require("../server/utils/validation");
|
|
32
|
+
const path_1 = require("path");
|
|
33
|
+
const events_1 = require("../events");
|
|
34
|
+
/**
|
|
35
|
+
* @fileoverview Website plugin for Silex
|
|
36
|
+
* This plugin provides the website API to Silex server
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* Error thrown by the website API
|
|
40
|
+
* @param message error message
|
|
41
|
+
* @param code http status code
|
|
42
|
+
*/
|
|
43
|
+
class WebsiteError extends Error {
|
|
44
|
+
code;
|
|
45
|
+
constructor(message, code) {
|
|
46
|
+
super(message);
|
|
47
|
+
this.code = code;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.WebsiteError = WebsiteError;
|
|
51
|
+
async function default_1(config, opts = {}) {
|
|
52
|
+
// Options with defaults
|
|
53
|
+
const options = {
|
|
54
|
+
// Default constants
|
|
55
|
+
assetsPath: '/assets',
|
|
56
|
+
// Options
|
|
57
|
+
...opts
|
|
58
|
+
};
|
|
59
|
+
config.on(events_1.EVENT_STARTUP_START, ({ app }) => {
|
|
60
|
+
// Create a new router
|
|
61
|
+
const router = (0, express_1.Router)();
|
|
62
|
+
app.use(Cache_1.noCache, router);
|
|
63
|
+
// Load website data
|
|
64
|
+
router.get(`/${constants_1.API_WEBSITE_READ}`, async (req, res) => {
|
|
65
|
+
const query = req.query;
|
|
66
|
+
const { id, backendId } = query;
|
|
67
|
+
try {
|
|
68
|
+
if (id) {
|
|
69
|
+
// Get website data
|
|
70
|
+
const websiteData = await readWebsite(req['session'], (0, validation_1.requiredParam)(id, 'Website id'), backendId);
|
|
71
|
+
if (websiteData instanceof stream_1.Readable) {
|
|
72
|
+
websiteData.pipe(res.type('application/json'));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
res.json(websiteData);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// List websites
|
|
80
|
+
const websites = await listWebsites(req['session'], query.backendId);
|
|
81
|
+
res.json(websites);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
console.error('Error getting website data', e);
|
|
86
|
+
if (e instanceof WebsiteError) {
|
|
87
|
+
res.status(e.code).json({ message: e.message });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
res.status(500).json({ message: e.message });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Save website data
|
|
95
|
+
router.post(`/${constants_1.API_WEBSITE_WRITE}`, async (req, res) => {
|
|
96
|
+
try {
|
|
97
|
+
const query = req.query;
|
|
98
|
+
const body = req.body;
|
|
99
|
+
const id = (0, validation_1.requiredParam)(query.id, 'Website id');
|
|
100
|
+
const websiteData = (0, validation_1.requiredParam)(body, 'Website data');
|
|
101
|
+
await writeWebsite(req['session'], id, websiteData, query.backendId);
|
|
102
|
+
res.status(200).json({ message: 'Website saved' });
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
console.error('Error saving website data', e);
|
|
106
|
+
if (e instanceof WebsiteError) {
|
|
107
|
+
res.status(e.code).json({ message: e.message });
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
res.status(500).json({ message: e.message });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Delete website
|
|
115
|
+
router.delete(`/${constants_1.API_WEBSITE_DELETE}`, async (req, res) => {
|
|
116
|
+
try {
|
|
117
|
+
const query = req.query;
|
|
118
|
+
const id = (0, validation_1.requiredParam)(query.id, 'Website id');
|
|
119
|
+
await deleteWebsite(req['session'], id, query.backendId);
|
|
120
|
+
res.status(200).json({ message: 'Website deleted' });
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
console.error('Error deleting website data', e);
|
|
124
|
+
if (e instanceof WebsiteError) {
|
|
125
|
+
res.status(e.code).json({ message: e.message });
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
res.status(500).json({ message: e.message });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// Load assets
|
|
133
|
+
router.get(`/${constants_1.API_WEBSITE_ASSETS_READ}`, async (req, res) => {
|
|
134
|
+
{
|
|
135
|
+
try {
|
|
136
|
+
const query = req.query;
|
|
137
|
+
const params = req.params;
|
|
138
|
+
const id = (0, validation_1.requiredParam)(query.id, 'Website id');
|
|
139
|
+
const path = (0, validation_1.requiredParam)(params.path, 'path');
|
|
140
|
+
const asset = await readAsset(req['session'], id, path, query.backendId);
|
|
141
|
+
// Set content type
|
|
142
|
+
res.contentType((0, path_1.basename)(asset.path));
|
|
143
|
+
// Send the file
|
|
144
|
+
if (asset.content instanceof stream_1.Readable) {
|
|
145
|
+
// Stream
|
|
146
|
+
asset.content.pipe(res);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Buffer or string
|
|
150
|
+
res.send(asset.content);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
console.error('Error getting asset', e);
|
|
155
|
+
if (e instanceof WebsiteError) {
|
|
156
|
+
res.status(e.code).json({ message: e.message });
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
res.status(500).json({ message: e.message });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
// Upload assets
|
|
165
|
+
router.post(`/${constants_1.API_WEBSITE_ASSETS_WRITE}`, async (req, res) => {
|
|
166
|
+
try {
|
|
167
|
+
const query = req.query;
|
|
168
|
+
const id = (0, validation_1.requiredParam)(query.id, 'Website id');
|
|
169
|
+
// Get the file data from the request
|
|
170
|
+
const form = (0, formidable_1.default)({
|
|
171
|
+
filename: (name, ext, part, _form) => `${name}${ext}`,
|
|
172
|
+
multiples: true,
|
|
173
|
+
keepExtensions: true,
|
|
174
|
+
});
|
|
175
|
+
const files = await new Promise((resolve, reject) => {
|
|
176
|
+
form.parse(req, async (err, fields, _files) => {
|
|
177
|
+
if (err) {
|
|
178
|
+
console.error('Error parsing upload data', err);
|
|
179
|
+
reject(new WebsiteError('Error parsing upload data: ' + err.message, 400));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const files = [].concat(_files['files[]'])
|
|
183
|
+
.map((file) => ({
|
|
184
|
+
path: `${options.assetsPath}/${file.originalFilename}`,
|
|
185
|
+
content: (0, fs_1.createReadStream)(file.filepath),
|
|
186
|
+
}));
|
|
187
|
+
resolve(files);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
// Write the files
|
|
192
|
+
console.log('Uploading assets', files);
|
|
193
|
+
const data = await writeAssets(req['session'], id, files, query.backendId);
|
|
194
|
+
console.log('Uploaded assets', data);
|
|
195
|
+
// Return the file URLs to insert in the website
|
|
196
|
+
res.json({
|
|
197
|
+
data, // As expected by grapesjs (https://grapesjs.com/docs/modules/Assets.html#uploading-assets)
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
console.error('Error uploading assets', e);
|
|
202
|
+
if (e instanceof WebsiteError) {
|
|
203
|
+
res.status(e.code).json({ message: e.message });
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
res.status(500).json({ message: e.message });
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
/**
|
|
212
|
+
* Get the desired backend
|
|
213
|
+
* Can be the default backend or a specific one
|
|
214
|
+
*/
|
|
215
|
+
async function getStorageProvider(session, backendId) {
|
|
216
|
+
const storageProvider = await (0, backends_1.getBackend)(config, session, types_1.BackendType.STORAGE, backendId); // ?? config.getStorageProviders()[0]
|
|
217
|
+
if (!storageProvider) {
|
|
218
|
+
throw new WebsiteError('No storage provider found', 404);
|
|
219
|
+
}
|
|
220
|
+
if (!await storageProvider.isLoggedIn(session)) {
|
|
221
|
+
throw new WebsiteError('Not logged in', 401);
|
|
222
|
+
}
|
|
223
|
+
return storageProvider;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Website a website data or list all websites
|
|
227
|
+
*/
|
|
228
|
+
async function readWebsite(session, id, backendId) {
|
|
229
|
+
// Get the desired backend
|
|
230
|
+
const storageProvider = await getStorageProvider(session, backendId);
|
|
231
|
+
// List websites or get a website
|
|
232
|
+
// Get a website data
|
|
233
|
+
const file = await storageProvider.readFile(session, id, constants_1.WEBSITE_DATA_FILE_NAME);
|
|
234
|
+
if (typeof file.content === 'string')
|
|
235
|
+
return JSON.parse(file.content);
|
|
236
|
+
else if (file.content instanceof Buffer)
|
|
237
|
+
return JSON.parse(file.content.toString());
|
|
238
|
+
else if (file.content instanceof stream_1.Readable)
|
|
239
|
+
return file.content;
|
|
240
|
+
throw new WebsiteError('Invalid website data', 500);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* List existing websites
|
|
244
|
+
*/
|
|
245
|
+
async function listWebsites(session, backendId) {
|
|
246
|
+
// Get the desired backend
|
|
247
|
+
const storageProvider = await getStorageProvider(session, backendId);
|
|
248
|
+
// List websites
|
|
249
|
+
return storageProvider.listWebsites(session);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Write the website data to the backend
|
|
253
|
+
*/
|
|
254
|
+
async function writeWebsite(session, id, websiteData, backendId) {
|
|
255
|
+
// Get the desired backend
|
|
256
|
+
const storageProvider = await getStorageProvider(session, backendId);
|
|
257
|
+
// Init the storage for this website (create the folder if it does not exist)
|
|
258
|
+
// FIXME: put this after login
|
|
259
|
+
// await storageProvider.init(session, id)
|
|
260
|
+
// Write the website data
|
|
261
|
+
await storageProvider.writeFiles(session, id, [{
|
|
262
|
+
path: constants_1.WEBSITE_DATA_FILE_NAME,
|
|
263
|
+
content: JSON.stringify(websiteData),
|
|
264
|
+
}]);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Delete a website
|
|
268
|
+
*/
|
|
269
|
+
async function deleteWebsite(session, id, backendId) {
|
|
270
|
+
// Get the desired backend
|
|
271
|
+
const storageProvider = await getStorageProvider(session, backendId);
|
|
272
|
+
// Delete the website
|
|
273
|
+
return await storageProvider.deleteDir(session, id, '/');
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Read an asset
|
|
277
|
+
*/
|
|
278
|
+
async function readAsset(session, id, fileName, backendId) {
|
|
279
|
+
//const { session } = req
|
|
280
|
+
//const id = req.query.id
|
|
281
|
+
//const fileName = req.params[0]
|
|
282
|
+
//const uploadDir = await assetsDir(id)
|
|
283
|
+
//res.sendFile(`${uploadDir}/${fileName}`)
|
|
284
|
+
// Get the desired backend
|
|
285
|
+
const storageProvider = await getStorageProvider(session, backendId);
|
|
286
|
+
// Read the asset from the backend
|
|
287
|
+
return await storageProvider.readFile(session, id, `/${options.assetsPath}/${fileName}`);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Write an asset to the backend
|
|
291
|
+
*/
|
|
292
|
+
async function writeAssets(session, id, files, backendId) {
|
|
293
|
+
// Get the desired backend
|
|
294
|
+
const storageProvider = await getStorageProvider(session, backendId);
|
|
295
|
+
// Write the asset to the backend
|
|
296
|
+
await storageProvider.writeFiles(session, id, files);
|
|
297
|
+
// Return the files URLs with the website id
|
|
298
|
+
return files.map(({ path }) => `${path}?id=${id}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
exports.default = default_1;
|
|
302
|
+
//# sourceMappingURL=WebsitePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebsitePlugin.js","sourceRoot":"","sources":["../../src/ts/plugins/WebsitePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { File, StorageProvider, HostingProvider, StatusCallback, BackendSession } from '.';
|
|
2
|
+
import { BackendData, BackendUser, WebsiteMeta, FileMeta, JobData, WebsiteId, BackendType } from '../../types';
|
|
3
|
+
import { ServerConfig } from '../config';
|
|
4
|
+
type FsSession = BackendSession;
|
|
5
|
+
interface FsOptions {
|
|
6
|
+
rootPath?: string;
|
|
7
|
+
type: BackendType;
|
|
8
|
+
}
|
|
9
|
+
export declare class FsBackend implements StorageProvider<FsSession>, HostingProvider<FsSession> {
|
|
10
|
+
id: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
icon: string;
|
|
13
|
+
rootPath: string;
|
|
14
|
+
disableLogout: boolean;
|
|
15
|
+
options: {
|
|
16
|
+
rootPath: string;
|
|
17
|
+
type: BackendType;
|
|
18
|
+
};
|
|
19
|
+
type: BackendType;
|
|
20
|
+
constructor(config: ServerConfig | null, opts: FsOptions);
|
|
21
|
+
updateStatus(filesStatuses: any, status: any, statusCbk: any): void;
|
|
22
|
+
initStatus(files: any): any;
|
|
23
|
+
getAdminUrl(session: FsSession, id: WebsiteId): Promise<string>;
|
|
24
|
+
getAuthorizeURL(session: FsSession): Promise<string>;
|
|
25
|
+
isLoggedIn(session: FsSession): Promise<boolean>;
|
|
26
|
+
login(session: FsSession): Promise<void>;
|
|
27
|
+
logout(session: FsSession): Promise<void>;
|
|
28
|
+
getUserData(session: FsSession): Promise<BackendUser>;
|
|
29
|
+
getSiteMeta(session: FsSession, id: string): Promise<WebsiteMeta>;
|
|
30
|
+
init(session: FsSession, id: WebsiteId): Promise<void>;
|
|
31
|
+
listWebsites(session: any): Promise<WebsiteMeta[]>;
|
|
32
|
+
readFile(session: FsSession, id: WebsiteId, path: string): Promise<File>;
|
|
33
|
+
writeFiles(session: FsSession, id: WebsiteId, files: File[], statusCbk?: StatusCallback): Promise<string[]>;
|
|
34
|
+
deleteFiles(session: FsSession, id: WebsiteId, paths: string[]): Promise<void>;
|
|
35
|
+
listDir(session: FsSession, id: WebsiteId, path: string): Promise<FileMeta[]>;
|
|
36
|
+
createDir(session: FsSession, id: WebsiteId, path: string): Promise<void>;
|
|
37
|
+
deleteDir(session: FsSession, id: WebsiteId, path: string): Promise<void>;
|
|
38
|
+
getFileUrl(session: FsSession, id: WebsiteId, path: string): Promise<string>;
|
|
39
|
+
publish(session: FsSession, id: WebsiteId, backendData: BackendData, files: File[]): Promise<JobData>;
|
|
40
|
+
getWebsiteUrl(session: FsSession, id: WebsiteId): Promise<string>;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,269 @@
|
|
|
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
21
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
22
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
23
|
+
}
|
|
24
|
+
Object.defineProperty(o, k2, desc);
|
|
25
|
+
}) : (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
o[k2] = m[k];
|
|
28
|
+
}));
|
|
29
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
30
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
31
|
+
}) : function(o, v) {
|
|
32
|
+
o["default"] = v;
|
|
33
|
+
});
|
|
34
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.FsBackend = void 0;
|
|
46
|
+
const promises_1 = __importStar(require("fs/promises"));
|
|
47
|
+
const fs_1 = require("fs");
|
|
48
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
49
|
+
const path_1 = require("path");
|
|
50
|
+
const types_1 = require("../../types");
|
|
51
|
+
const jobs_1 = require("../jobs");
|
|
52
|
+
const os_1 = require("os");
|
|
53
|
+
const constants_1 = require("../../constants");
|
|
54
|
+
const validation_1 = require("../utils/validation");
|
|
55
|
+
class FsBackend {
|
|
56
|
+
id = 'fs';
|
|
57
|
+
displayName = 'File system';
|
|
58
|
+
icon = 'file';
|
|
59
|
+
rootPath;
|
|
60
|
+
disableLogout = true;
|
|
61
|
+
options;
|
|
62
|
+
type;
|
|
63
|
+
constructor(config, opts) {
|
|
64
|
+
this.options = {
|
|
65
|
+
rootPath: __dirname + '/../../../.silex',
|
|
66
|
+
...opts,
|
|
67
|
+
};
|
|
68
|
+
this.type = this.options.type;
|
|
69
|
+
}
|
|
70
|
+
// ********************
|
|
71
|
+
// Utils methods
|
|
72
|
+
// ********************
|
|
73
|
+
updateStatus(filesStatuses, status, statusCbk) {
|
|
74
|
+
statusCbk && statusCbk({
|
|
75
|
+
message: `<p>Writing files:<ul><li>${filesStatuses.map(({ file, message }) => `${file.path}: ${message}`).join('</li><li>')}</li></ul></p>`,
|
|
76
|
+
status,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
initStatus(files) {
|
|
80
|
+
return files.map(file => ({
|
|
81
|
+
file,
|
|
82
|
+
message: 'Waiting',
|
|
83
|
+
status: types_1.JobStatus.IN_PROGRESS,
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
// ********************
|
|
87
|
+
// Backend interface
|
|
88
|
+
// ********************
|
|
89
|
+
async getAdminUrl(session, id) {
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
async getAuthorizeURL(session) {
|
|
93
|
+
return '';
|
|
94
|
+
}
|
|
95
|
+
async isLoggedIn(session) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
async login(session) { }
|
|
99
|
+
async logout(session) { }
|
|
100
|
+
async getUserData(session) {
|
|
101
|
+
const { username, } = (0, os_1.userInfo)();
|
|
102
|
+
return {
|
|
103
|
+
name: username,
|
|
104
|
+
picture: this.icon,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async getSiteMeta(session, id) {
|
|
108
|
+
const websiteId = (0, validation_1.requiredParam)(id, 'website id');
|
|
109
|
+
const files = await this.listDir(session, websiteId, '/');
|
|
110
|
+
const file = files.find(f => f.name === constants_1.WEBSITE_DATA_FILE_NAME);
|
|
111
|
+
if (!file)
|
|
112
|
+
throw new Error('Website not found');
|
|
113
|
+
return {
|
|
114
|
+
websiteId,
|
|
115
|
+
// url: await this.getFileUrl(session, websiteId, WEBSITE_DATA_FILE_NAME),
|
|
116
|
+
//metadata: {
|
|
117
|
+
// path: session.ftp.path,
|
|
118
|
+
//},
|
|
119
|
+
...file,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
async init(session, id) {
|
|
123
|
+
await promises_1.default.mkdir((0, path_1.join)(this.options.rootPath, id), { recursive: true });
|
|
124
|
+
}
|
|
125
|
+
// ********************
|
|
126
|
+
// Storage interface
|
|
127
|
+
// ********************
|
|
128
|
+
async listWebsites(session) {
|
|
129
|
+
const list = await promises_1.default.readdir(this.options.rootPath);
|
|
130
|
+
return Promise.all(list.map(async (fileName) => {
|
|
131
|
+
const filePath = (0, path_1.join)(this.options.rootPath, fileName);
|
|
132
|
+
const fileStat = await (0, promises_1.stat)(filePath);
|
|
133
|
+
return {
|
|
134
|
+
websiteId: fileName,
|
|
135
|
+
createdAt: fileStat.birthtime,
|
|
136
|
+
updatedAt: fileStat.mtime,
|
|
137
|
+
metadata: {
|
|
138
|
+
...fileStat,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
async readFile(session, id, path) {
|
|
144
|
+
const fullPath = (0, path_1.join)(this.options.rootPath, id, path);
|
|
145
|
+
const content = await promises_1.default.readFile(fullPath);
|
|
146
|
+
console.log('read file', path, fullPath, content.length);
|
|
147
|
+
return { path, content };
|
|
148
|
+
}
|
|
149
|
+
async writeFiles(session, id, files, statusCbk) {
|
|
150
|
+
const filesStatuses = this.initStatus(files);
|
|
151
|
+
let error = false;
|
|
152
|
+
const filePaths = [];
|
|
153
|
+
for (const fileStatus of filesStatuses) {
|
|
154
|
+
const { file } = fileStatus;
|
|
155
|
+
const path = (0, path_1.join)(this.options.rootPath, id, file.path);
|
|
156
|
+
filePaths.push(path);
|
|
157
|
+
if (typeof file.content === 'string') {
|
|
158
|
+
fileStatus.message = 'Writing';
|
|
159
|
+
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
160
|
+
try {
|
|
161
|
+
console.log('write file', path, file.content.length);
|
|
162
|
+
await promises_1.default.writeFile(path, file.content);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
fileStatus.message = `Error (${err})`;
|
|
166
|
+
console.log('write file stream', path, file.content.length);
|
|
167
|
+
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
168
|
+
error = true;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
fileStatus.message = 'Success';
|
|
172
|
+
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
fileStatus.message = 'Writing';
|
|
176
|
+
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
177
|
+
const writeStream = (0, fs_1.createWriteStream)(path);
|
|
178
|
+
file.content.pipe(writeStream);
|
|
179
|
+
await new Promise((resolve) => {
|
|
180
|
+
writeStream.on('finish', () => {
|
|
181
|
+
fileStatus.message = 'Success';
|
|
182
|
+
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
183
|
+
resolve(file);
|
|
184
|
+
});
|
|
185
|
+
writeStream.on('error', err => {
|
|
186
|
+
console.error('writeStream error', err);
|
|
187
|
+
fileStatus.message = `Error (${err})`;
|
|
188
|
+
this.updateStatus(filesStatuses, types_1.JobStatus.IN_PROGRESS, statusCbk);
|
|
189
|
+
error = true;
|
|
190
|
+
resolve(file);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.updateStatus(filesStatuses, error ? types_1.JobStatus.ERROR : types_1.JobStatus.SUCCESS, statusCbk);
|
|
196
|
+
return filePaths;
|
|
197
|
+
}
|
|
198
|
+
async deleteFiles(session, id, paths) {
|
|
199
|
+
for (const path of paths) {
|
|
200
|
+
await promises_1.default.unlink((0, path_1.join)(this.options.rootPath, id, path));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async listDir(session, id, path) {
|
|
204
|
+
const list = await promises_1.default.readdir((0, path_1.join)(this.options.rootPath, id, path));
|
|
205
|
+
return Promise.all(list.map(async (fileName) => {
|
|
206
|
+
const filePath = (0, path_1.join)(this.options.rootPath, id, path, fileName);
|
|
207
|
+
const fileStat = await (0, promises_1.stat)(filePath);
|
|
208
|
+
return {
|
|
209
|
+
name: fileName,
|
|
210
|
+
size: fileStat.size,
|
|
211
|
+
isDir: fileStat.isDirectory(),
|
|
212
|
+
createdAt: fileStat.birthtime,
|
|
213
|
+
updatedAt: fileStat.mtime,
|
|
214
|
+
};
|
|
215
|
+
}));
|
|
216
|
+
}
|
|
217
|
+
// async listDir(session: FsSession, id: string, path: string): Promise<FileMeta[]> {
|
|
218
|
+
// const fileNames = await fs.readdir(this.options.rootPath)
|
|
219
|
+
// // Filter directories only
|
|
220
|
+
// // That's a way to do an async filter
|
|
221
|
+
// const withType = await Promise.all(fileNames.map(async fileName => ({
|
|
222
|
+
// fileName,
|
|
223
|
+
// isDir: (await stat(join(this.options.rootPath, fileName))).isDirectory(),
|
|
224
|
+
// })))
|
|
225
|
+
// return withType
|
|
226
|
+
// .filter(({fileName, isDir}) => isDir)
|
|
227
|
+
// .map(({fileName}) => fileName as WebsiteId)
|
|
228
|
+
// }
|
|
229
|
+
async createDir(session, id, path) {
|
|
230
|
+
await promises_1.default.mkdir((0, path_1.join)(this.options.rootPath, id, path), { recursive: true });
|
|
231
|
+
}
|
|
232
|
+
async deleteDir(session, id, path) {
|
|
233
|
+
await fs_extra_1.default.remove((0, path_1.join)(this.options.rootPath, id, path));
|
|
234
|
+
}
|
|
235
|
+
async getFileUrl(session, id, path) {
|
|
236
|
+
const filePath = (0, path_1.join)(this.options.rootPath, id, path);
|
|
237
|
+
const fileUrl = new URL(filePath, 'file://');
|
|
238
|
+
return fileUrl.toString();
|
|
239
|
+
}
|
|
240
|
+
// ********************
|
|
241
|
+
// Hosting provider interface
|
|
242
|
+
// ********************
|
|
243
|
+
async publish(session, id, backendData, files) {
|
|
244
|
+
const job = (0, jobs_1.startJob)(`Publishing to ${this.displayName}`);
|
|
245
|
+
job.logs = [[`Publishing to ${this.displayName}`]];
|
|
246
|
+
job.errors = [[]];
|
|
247
|
+
this.writeFiles(session, id, files, async ({ status, message }) => {
|
|
248
|
+
// Update the job status
|
|
249
|
+
job.status = status;
|
|
250
|
+
job.message = message;
|
|
251
|
+
job.logs[0].push(message);
|
|
252
|
+
// Add the website url
|
|
253
|
+
job.url = await this.getFileUrl(session, id, 'index.html');
|
|
254
|
+
if (status === types_1.JobStatus.SUCCESS) {
|
|
255
|
+
(0, jobs_1.jobSuccess)(job.jobId, message);
|
|
256
|
+
}
|
|
257
|
+
else if (status === types_1.JobStatus.ERROR) {
|
|
258
|
+
job.errors[0].push(message);
|
|
259
|
+
(0, jobs_1.jobError)(job.jobId, message);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
return job;
|
|
263
|
+
}
|
|
264
|
+
async getWebsiteUrl(session, id) {
|
|
265
|
+
return this.getFileUrl(session, id, '/index.html');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
exports.FsBackend = FsBackend;
|
|
269
|
+
//# sourceMappingURL=FsBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FsBackend.js","sourceRoot":"","sources":["../../../src/ts/server/backends/FsBackend.ts"],"names":[],"mappings":"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"}
|