@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.
Files changed (35) hide show
  1. package/api/command/index.js +1 -1
  2. package/api/index.js +3 -0
  3. package/api/scripts/index.js +7 -3
  4. package/dist/assets/i18n/en.json +10 -3
  5. package/dist/assets/i18n/fr.json +2 -1
  6. package/dist/assets/i18n/ja.json +2 -1
  7. package/dist/assets/i18n/sv.json +2 -1
  8. package/dist/assets/i18n/zh-cn.json +2 -1
  9. package/dist/assets/i18n/zh-tw.json +2 -1
  10. package/dist/assets/lib/svgeditor/fuxa-editor.min.js +17 -23
  11. package/dist/index.html +1 -1
  12. package/dist/{main.bafae830903d548e.js → main.72bdfed42c527918.js} +6 -6
  13. package/docs/openapi.yaml +3 -0
  14. package/integrations/node-red/index.js +4 -5
  15. package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-get-tag.html +39 -35
  16. package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-get-tag.js +43 -17
  17. package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-set-tag.html +42 -34
  18. package/integrations/node-red/node-red-contrib-fuxa/nodes/fuxa-set-tag.js +32 -12
  19. package/main.js +3 -0
  20. package/package.json +1 -1
  21. package/runtime/alarms/alarmstorage.js +45 -30
  22. package/runtime/apikeys/apiKeysStorage.js +34 -22
  23. package/runtime/devices/odbc/index.js +9 -4
  24. package/runtime/devices/s7/index.js +2 -2
  25. package/runtime/notificator/notifystorage.js +34 -23
  26. package/runtime/project/index.js +16 -0
  27. package/runtime/project/prjstorage.js +78 -40
  28. package/runtime/scripts/index.js +6 -2
  29. package/runtime/storage/calculator.js +17 -13
  30. package/runtime/storage/influxdb/index.js +8 -3
  31. package/runtime/storage/questdb/index.js +1 -1
  32. package/runtime/storage/sqlite/index.js +11 -8
  33. package/runtime/storage/tdengine/index.js +24 -9
  34. package/runtime/users/usrstorage.js +65 -61
  35. 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
- // prepare query
100
- var sql = "";
101
- sql += "INSERT OR REPLACE INTO users (username, fullname, password, groups) VALUES('admin', 'Administrator Account', '" + bcrypt.hashSync('123456', 10) + "','-1');";
102
- db_usr.exec(sql, function (err) {
103
- if (err) {
104
- logger.error(`usrstorage.set failed! ${err}`);
105
- reject();
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
- if (data && data.length) {
143
- exist = true;
144
- }
145
- var sql = "";
149
+ const exist = data && data.length;
150
+ let sql = '';
151
+ let params = [];
146
152
  if (pwd) {
147
- sql = "INSERT OR REPLACE INTO users (username, fullname, password, groups, info) VALUES('" + usr + "','" + fullname + "','" + bcrypt.hashSync(pwd, 10) + "','" + groups + "','" + info + "');";
153
+ const hashedPwd = bcrypt.hashSync(pwd, 10);
148
154
  if (exist) {
149
- sql = "UPDATE users SET password = '" + bcrypt.hashSync(pwd, 10) + "', info = '" + info + "', groups = '" + groups + "', fullname = '" + fullname + "' WHERE username = '" + usr + "';";
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('" + usr + "','" + fullname + "','" + groups + "','" + info + "');";
153
- if (exist) {
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
- db_usr.exec(sql, function (err) {
158
- if (err) {
159
- logger.error(`usrstorage.set failed! ${err}`);
160
- reject();
161
- } else {
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 (err) {
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
- // prepare query
177
- var sql = "DELETE FROM users WHERE username = '" + usr + "'";
178
- db_usr.exec(sql, function (err) {
179
- if (err) {
180
- logger.error(`usrstorage.remove failed! ${err}`);
181
- reject();
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
- for (var i = 0; i < roles.length; i++) {
211
- const role = roles[i];
212
- var value = JSON.stringify(role).replace(/\'/g,"''");
213
- var sql = "INSERT OR REPLACE INTO roles (name, value) VALUES('" + role.id + "','"+ value + "');";
214
- await db_usr.exec(sql, function (err) {
215
- if (err) {
216
- logger.error(`usrstorage.set role failed! ${err}`);
217
- reject();
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
- for (var i = 0; i < roles.length; i++) {
231
- const role = roles[i];
232
- var sql = "DELETE FROM roles WHERE name = '" + role.id + "'";
233
- await db_usr.exec(sql, function (err) {
234
- if (err) {
235
- logger.error(`usrstorage.remove role failed! ${err}`);
236
- reject();
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
+ };
@@ -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