@saltcorn/server 0.8.1-rc.2 → 0.8.1-rc.3
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/auth/admin.js +1 -0
- package/auth/routes.js +1 -0
- package/auth/testhelp.js +5 -3
- package/locales/da.json +4 -1
- package/locales/en.json +4 -1
- package/package.json +8 -8
- package/routes/admin.js +2 -1
- package/routes/fields.js +2 -1
- package/routes/files.js +7 -0
- package/routes/utils.js +12 -3
- package/routes/viewedit.js +1 -1
- package/serve.js +1 -1
package/auth/admin.js
CHANGED
package/auth/routes.js
CHANGED
|
@@ -1061,6 +1061,7 @@ router.post(
|
|
|
1061
1061
|
else req.session.cookie.expires = false;
|
|
1062
1062
|
}
|
|
1063
1063
|
Trigger.emitEvent("Login", null, req.user);
|
|
1064
|
+
res?.cookie?.("loggedin", "true");
|
|
1064
1065
|
req.flash("success", req.__("Welcome, %s!", req.user.email));
|
|
1065
1066
|
if (req.smr) {
|
|
1066
1067
|
const dbUser = await User.findOne({ id: req.user.id });
|
package/auth/testhelp.js
CHANGED
|
@@ -88,6 +88,9 @@ const toNotInclude =
|
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
+
const resToLoginCookie = (res) =>
|
|
92
|
+
res.headers["set-cookie"].find((c) => c.includes("connect.sid"));
|
|
93
|
+
|
|
91
94
|
/**
|
|
92
95
|
*
|
|
93
96
|
* @returns {Promise<void>}
|
|
@@ -99,7 +102,7 @@ const getStaffLoginCookie = async () => {
|
|
|
99
102
|
.send("email=staff@foo.com")
|
|
100
103
|
.send("password=ghrarhr54hg");
|
|
101
104
|
if (res.statusCode !== 302) console.log(res.text);
|
|
102
|
-
return res
|
|
105
|
+
return resToLoginCookie(res);
|
|
103
106
|
};
|
|
104
107
|
|
|
105
108
|
/**
|
|
@@ -113,8 +116,7 @@ const getAdminLoginCookie = async () => {
|
|
|
113
116
|
.send("email=admin@foo.com")
|
|
114
117
|
.send("password=AhGGr6rhu45");
|
|
115
118
|
if (res.statusCode !== 302) console.log(res.text);
|
|
116
|
-
|
|
117
|
-
return res.headers["set-cookie"][0];
|
|
119
|
+
return resToLoginCookie(res);
|
|
118
120
|
};
|
|
119
121
|
|
|
120
122
|
/**
|
package/locales/da.json
CHANGED
|
@@ -555,5 +555,8 @@
|
|
|
555
555
|
"Create database view": "Create database view",
|
|
556
556
|
"Create an SQL view in the database with the fields in this list": "Create an SQL view in the database with the fields in this list",
|
|
557
557
|
"Rows per page": "Rows per page",
|
|
558
|
-
"List options": "List options"
|
|
558
|
+
"List options": "List options",
|
|
559
|
+
"Modules": "Modules",
|
|
560
|
+
"File not found": "File not found",
|
|
561
|
+
"Welcome, %s!": "Welcome, %s!"
|
|
559
562
|
}
|
package/locales/en.json
CHANGED
|
@@ -1077,5 +1077,8 @@
|
|
|
1077
1077
|
"Saved 2FA policy for role": "Saved 2FA policy for role",
|
|
1078
1078
|
"HTTP settings updated": "HTTP settings updated",
|
|
1079
1079
|
"%s configuration": "%s configuration",
|
|
1080
|
-
"Save indicator": "Save indicator"
|
|
1080
|
+
"Save indicator": "Save indicator",
|
|
1081
|
+
"Public cache TTL (minutes)": "Public cache TTL (minutes)",
|
|
1082
|
+
"Cache-control max-age for public views and pages. 0 to disable": "Cache-control max-age for public views and pages. 0 to disable",
|
|
1083
|
+
"Files accept filter": "Files accept filter"
|
|
1081
1084
|
}
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "0.8.1-rc.
|
|
3
|
+
"version": "0.8.1-rc.3",
|
|
4
4
|
"description": "Server app for Saltcorn, open-source no-code platform",
|
|
5
5
|
"homepage": "https://saltcorn.com",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@saltcorn/base-plugin": "0.8.1-rc.
|
|
10
|
-
"@saltcorn/builder": "0.8.1-rc.
|
|
11
|
-
"@saltcorn/data": "0.8.1-rc.
|
|
12
|
-
"@saltcorn/admin-models": "0.8.1-rc.
|
|
13
|
-
"@saltcorn/filemanager": "0.8.1-rc.
|
|
14
|
-
"@saltcorn/markup": "0.8.1-rc.
|
|
15
|
-
"@saltcorn/sbadmin2": "0.8.1-rc.
|
|
9
|
+
"@saltcorn/base-plugin": "0.8.1-rc.3",
|
|
10
|
+
"@saltcorn/builder": "0.8.1-rc.3",
|
|
11
|
+
"@saltcorn/data": "0.8.1-rc.3",
|
|
12
|
+
"@saltcorn/admin-models": "0.8.1-rc.3",
|
|
13
|
+
"@saltcorn/filemanager": "0.8.1-rc.3",
|
|
14
|
+
"@saltcorn/markup": "0.8.1-rc.3",
|
|
15
|
+
"@saltcorn/sbadmin2": "0.8.1-rc.3",
|
|
16
16
|
"@socket.io/cluster-adapter": "^0.1.0",
|
|
17
17
|
"@socket.io/sticky": "^1.0.1",
|
|
18
18
|
"aws-sdk": "^2.1037.0",
|
package/routes/admin.js
CHANGED
|
@@ -97,6 +97,7 @@ const View = require("@saltcorn/data/models/view");
|
|
|
97
97
|
const { getConfigFile } = require("@saltcorn/data/db/connect");
|
|
98
98
|
const os = require("os");
|
|
99
99
|
const Page = require("@saltcorn/data/models/page");
|
|
100
|
+
const { getSafeSaltcornCmd } = require("@saltcorn/data/utils");
|
|
100
101
|
|
|
101
102
|
const router = new Router();
|
|
102
103
|
module.exports = router;
|
|
@@ -1659,7 +1660,7 @@ router.post(
|
|
|
1659
1660
|
// end http call, return the out directory name
|
|
1660
1661
|
// the gui polls for results
|
|
1661
1662
|
res.json({ build_dir_name: outDirName });
|
|
1662
|
-
const child = spawn(
|
|
1663
|
+
const child = spawn(getSafeSaltcornCmd(), spawnParams, {
|
|
1663
1664
|
stdio: ["ignore", "pipe", "pipe"],
|
|
1664
1665
|
cwd: ".",
|
|
1665
1666
|
});
|
package/routes/fields.js
CHANGED
|
@@ -996,7 +996,8 @@ router.post(
|
|
|
996
996
|
formStyle: "vert",
|
|
997
997
|
fields: formFields,
|
|
998
998
|
});
|
|
999
|
-
if (_columndef
|
|
999
|
+
if (_columndef && _columndef !== "undefined")
|
|
1000
|
+
form.values = JSON.parse(_columndef);
|
|
1000
1001
|
res.send(mkFormContentNoLayout(form));
|
|
1001
1002
|
})
|
|
1002
1003
|
);
|
package/routes/files.js
CHANGED
|
@@ -393,6 +393,13 @@ router.post(
|
|
|
393
393
|
f.s3_store ? s3storage.unlinkObject : undefined
|
|
394
394
|
);
|
|
395
395
|
if (result && result.error) {
|
|
396
|
+
if (req.xhr) {
|
|
397
|
+
const root = path.join(db.connectObj.file_store, db.getTenantSchema());
|
|
398
|
+
res.json({
|
|
399
|
+
error: result.error.replaceAll(root, ""),
|
|
400
|
+
});
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
396
403
|
req.flash("error", result.error);
|
|
397
404
|
}
|
|
398
405
|
res.redirect(`/files?dir=${encodeURIComponent(f.current_folder)}`);
|
package/routes/utils.js
CHANGED
|
@@ -76,7 +76,7 @@ const setLanguage = (req, res, state) => {
|
|
|
76
76
|
} else if (req.cookies?.lang) {
|
|
77
77
|
req.setLocale(req.cookies?.lang);
|
|
78
78
|
}
|
|
79
|
-
set_custom_http_headers(res, state);
|
|
79
|
+
set_custom_http_headers(res, req, state);
|
|
80
80
|
};
|
|
81
81
|
|
|
82
82
|
/**
|
|
@@ -85,8 +85,17 @@ const setLanguage = (req, res, state) => {
|
|
|
85
85
|
* @param {string} state
|
|
86
86
|
* @returns {void}
|
|
87
87
|
*/
|
|
88
|
-
const set_custom_http_headers = (res, state) => {
|
|
89
|
-
const
|
|
88
|
+
const set_custom_http_headers = (res, req, state) => {
|
|
89
|
+
const state1 = state || getState();
|
|
90
|
+
const hdrs = state1.getConfig("custom_http_headers");
|
|
91
|
+
if (!req.user) {
|
|
92
|
+
const public_cache_maxage = +state1.getConfig("public_cache_maxage", 0);
|
|
93
|
+
if (public_cache_maxage)
|
|
94
|
+
res.header(
|
|
95
|
+
"Cache-Control",
|
|
96
|
+
`public, max-age=${public_cache_maxage * 60}`
|
|
97
|
+
);
|
|
98
|
+
}
|
|
90
99
|
if (!hdrs) return;
|
|
91
100
|
for (const ln of hdrs.split("\n")) {
|
|
92
101
|
const [k, v] = ln.split(":");
|
package/routes/viewedit.js
CHANGED
|
@@ -464,7 +464,7 @@ const respondWorkflow = (view, wf, wfres, req, res) => {
|
|
|
464
464
|
type: "breadcrumbs",
|
|
465
465
|
crumbs: [
|
|
466
466
|
{ text: req.__("Views"), href: "/viewedit" },
|
|
467
|
-
{ href: `/
|
|
467
|
+
{ href: `/view/${view.name}`, text: view.name },
|
|
468
468
|
{ workflow: wf, step: wfres },
|
|
469
469
|
],
|
|
470
470
|
},
|
package/serve.js
CHANGED
|
@@ -377,7 +377,7 @@ const setupSocket = (...servers) => {
|
|
|
377
377
|
const view = View.findOne({ name: viewname });
|
|
378
378
|
if (view.viewtemplateObj.authorize_join) {
|
|
379
379
|
view.viewtemplateObj
|
|
380
|
-
.authorize_join(view
|
|
380
|
+
.authorize_join(view, room_id, socket.request.user)
|
|
381
381
|
.then((authorized) => {
|
|
382
382
|
if (authorized) socket.join(`${ten}_${viewname}_${room_id}`);
|
|
383
383
|
});
|