@frangoteam/fuxa-min 1.3.0 → 1.3.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/api/command/index.js +1 -1
- package/api/index.js +3 -0
- package/api/scripts/index.js +7 -3
- package/dist/assets/i18n/en.json +10 -3
- package/dist/assets/i18n/fr.json +2 -1
- package/dist/assets/i18n/ja.json +2 -1
- package/dist/assets/i18n/sv.json +2 -1
- package/dist/assets/i18n/zh-cn.json +2 -1
- package/dist/assets/i18n/zh-tw.json +2 -1
- package/dist/assets/lib/svgeditor/fuxa-editor.min.js +17 -23
- package/dist/index.html +1 -1
- package/dist/{main.bafae830903d548e.js → main.72bdfed42c527918.js} +6 -6
- package/docs/openapi.yaml +3 -0
- package/integrations/node-red/index.js +4 -5
- package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-get-tag.html +39 -35
- package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-get-tag.js +43 -17
- package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-set-tag.html +42 -34
- package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-set-tag.js +32 -12
- package/main.js +3 -0
- package/package.json +1 -1
- package/runtime/alarms/alarmstorage.js +45 -30
- package/runtime/apikeys/apiKeysStorage.js +34 -22
- package/runtime/devices/odbc/index.js +9 -4
- package/runtime/devices/s7/index.js +2 -2
- package/runtime/notificator/notifystorage.js +34 -23
- package/runtime/project/index.js +16 -0
- package/runtime/project/prjstorage.js +78 -40
- package/runtime/scripts/index.js +6 -2
- package/runtime/storage/calculator.js +17 -13
- package/runtime/storage/influxdb/index.js +8 -3
- package/runtime/storage/questdb/index.js +1 -1
- package/runtime/storage/sqlite/index.js +11 -8
- package/runtime/storage/tdengine/index.js +24 -9
- package/runtime/users/usrstorage.js +65 -61
- package/settings.default.js +3 -0
|
@@ -15,6 +15,18 @@ var settings // Application settings
|
|
|
15
15
|
var logger; // Application logger
|
|
16
16
|
var db_usr; // Database of users
|
|
17
17
|
|
|
18
|
+
function _run(sql, params = []) {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
db_usr.run(sql, params, function (err) {
|
|
21
|
+
if (err) {
|
|
22
|
+
reject(err);
|
|
23
|
+
} else {
|
|
24
|
+
resolve(this);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
18
30
|
/**
|
|
19
31
|
* Init and bind the database resource
|
|
20
32
|
* @param {*} _settings
|
|
@@ -96,16 +108,13 @@ function _checkUpdate(columnsToAdd) {
|
|
|
96
108
|
*/
|
|
97
109
|
function setDefault() {
|
|
98
110
|
return new Promise(function (resolve, reject) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
sql
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
} else {
|
|
107
|
-
resolve();
|
|
108
|
-
}
|
|
111
|
+
const sql = "INSERT OR REPLACE INTO users (username, fullname, password, groups) VALUES(?, ?, ?, ?)";
|
|
112
|
+
const params = ['admin', 'Administrator Account', bcrypt.hashSync('123456', 10), -1];
|
|
113
|
+
_run(sql, params).then(() => {
|
|
114
|
+
resolve();
|
|
115
|
+
}).catch((err) => {
|
|
116
|
+
logger.error(`usrstorage.set failed! ${err}`);
|
|
117
|
+
reject();
|
|
109
118
|
});
|
|
110
119
|
});
|
|
111
120
|
}
|
|
@@ -136,33 +145,33 @@ function getUsers(user) {
|
|
|
136
145
|
*/
|
|
137
146
|
function setUser(usr, fullname, pwd, groups, info) {
|
|
138
147
|
return new Promise(function (resolve, reject) {
|
|
139
|
-
// prepare query
|
|
140
|
-
var exist = false;
|
|
141
148
|
getUsers({ username: usr }).then(function (data) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
var sql = "";
|
|
149
|
+
const exist = data && data.length;
|
|
150
|
+
let sql = '';
|
|
151
|
+
let params = [];
|
|
146
152
|
if (pwd) {
|
|
147
|
-
|
|
153
|
+
const hashedPwd = bcrypt.hashSync(pwd, 10);
|
|
148
154
|
if (exist) {
|
|
149
|
-
sql = "UPDATE users SET password =
|
|
155
|
+
sql = "UPDATE users SET password = ?, info = ?, groups = ?, fullname = ? WHERE username = ?";
|
|
156
|
+
params = [hashedPwd, info, groups, fullname, usr];
|
|
157
|
+
} else {
|
|
158
|
+
sql = "INSERT OR REPLACE INTO users (username, fullname, password, groups, info) VALUES(?, ?, ?, ?, ?)";
|
|
159
|
+
params = [usr, fullname, hashedPwd, groups, info];
|
|
150
160
|
}
|
|
161
|
+
} else if (exist) {
|
|
162
|
+
sql = "UPDATE users SET groups = ?, info = ?, fullname = ? WHERE username = ?";
|
|
163
|
+
params = [groups, info, fullname, usr];
|
|
151
164
|
} else {
|
|
152
|
-
sql = "INSERT OR REPLACE INTO users (username, fullname, groups, info) VALUES(
|
|
153
|
-
|
|
154
|
-
sql = "UPDATE users SET groups = '" + groups + "', info = '" + info + "', fullname = '" + fullname + "' WHERE username = '" + usr + "';";
|
|
155
|
-
}
|
|
165
|
+
sql = "INSERT OR REPLACE INTO users (username, fullname, groups, info) VALUES(?, ?, ?, ?)";
|
|
166
|
+
params = [usr, fullname, groups, info];
|
|
156
167
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
resolve();
|
|
163
|
-
}
|
|
168
|
+
_run(sql, params).then(() => {
|
|
169
|
+
resolve();
|
|
170
|
+
}).catch((err) => {
|
|
171
|
+
logger.error(`usrstorage.set failed! ${err}`);
|
|
172
|
+
reject();
|
|
164
173
|
});
|
|
165
|
-
}).catch(function (
|
|
174
|
+
}).catch(function () {
|
|
166
175
|
reject();
|
|
167
176
|
});
|
|
168
177
|
});
|
|
@@ -173,15 +182,12 @@ function setUser(usr, fullname, pwd, groups, info) {
|
|
|
173
182
|
*/
|
|
174
183
|
function removeUser(usr) {
|
|
175
184
|
return new Promise(function (resolve, reject) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
} else {
|
|
183
|
-
resolve();
|
|
184
|
-
}
|
|
185
|
+
var sql = "DELETE FROM users WHERE username = ?";
|
|
186
|
+
_run(sql, [usr]).then(() => {
|
|
187
|
+
resolve();
|
|
188
|
+
}).catch((err) => {
|
|
189
|
+
logger.error(`usrstorage.remove failed! ${err}`);
|
|
190
|
+
reject();
|
|
185
191
|
});
|
|
186
192
|
});
|
|
187
193
|
}
|
|
@@ -207,18 +213,17 @@ function getRoles() {
|
|
|
207
213
|
*/
|
|
208
214
|
function setRoles(roles) {
|
|
209
215
|
return new Promise(async function (resolve, reject) {
|
|
210
|
-
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
try {
|
|
217
|
+
const sql = "INSERT OR REPLACE INTO roles (name, value) VALUES(?, ?)";
|
|
218
|
+
for (const role of roles) {
|
|
219
|
+
const value = JSON.stringify(role);
|
|
220
|
+
await _run(sql, [role.id, value]);
|
|
221
|
+
}
|
|
222
|
+
resolve();
|
|
223
|
+
} catch (err) {
|
|
224
|
+
logger.error(`usrstorage.set role failed! ${err}`);
|
|
225
|
+
reject();
|
|
220
226
|
}
|
|
221
|
-
resolve();
|
|
222
227
|
});
|
|
223
228
|
}
|
|
224
229
|
|
|
@@ -227,17 +232,16 @@ function setRoles(roles) {
|
|
|
227
232
|
*/
|
|
228
233
|
function removeRoles(roles) {
|
|
229
234
|
return new Promise(async function (resolve, reject) {
|
|
230
|
-
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
235
|
+
try {
|
|
236
|
+
const sql = "DELETE FROM roles WHERE name = ?";
|
|
237
|
+
for (const role of roles) {
|
|
238
|
+
await _run(sql, [role.id]);
|
|
239
|
+
}
|
|
240
|
+
resolve();
|
|
241
|
+
} catch (err) {
|
|
242
|
+
logger.error(`usrstorage.remove role failed! ${err}`);
|
|
243
|
+
reject();
|
|
239
244
|
}
|
|
240
|
-
resolve();
|
|
241
245
|
});
|
|
242
246
|
}
|
|
243
247
|
|
|
@@ -260,4 +264,4 @@ module.exports = {
|
|
|
260
264
|
getRoles: getRoles,
|
|
261
265
|
setRoles: setRoles,
|
|
262
266
|
removeRoles: removeRoles
|
|
263
|
-
};
|
|
267
|
+
};
|
package/settings.default.js
CHANGED
|
@@ -6,6 +6,9 @@ module.exports = {
|
|
|
6
6
|
// Standard language (editor)
|
|
7
7
|
language: 'en',
|
|
8
8
|
|
|
9
|
+
// Hide the editor onboarding wizard when entering editor mode
|
|
10
|
+
hideEditorOnboarding: false,
|
|
11
|
+
|
|
9
12
|
// The tcp port that the FUXA web server is listening on
|
|
10
13
|
uiPort: process.env.PORT || 1881,
|
|
11
14
|
|