@saltcorn/server 1.1.1-beta.6 → 1.1.1-beta.7

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 (137) hide show
  1. package/markup/blockly.js +4 -4
  2. package/package.json +9 -9
  3. package/public/blockly/blockly_compressed.js +2016 -0
  4. package/public/blockly/blockly_compressed.js.map +1 -0
  5. package/public/blockly/blocks_compressed.js +212 -0
  6. package/public/blockly/blocks_compressed.js.map +1 -0
  7. package/public/blockly/javascript_compressed.js +121 -0
  8. package/public/blockly/javascript_compressed.js.map +1 -0
  9. package/public/blockly/msg/ab.js +440 -0
  10. package/public/blockly/msg/ace.js +440 -0
  11. package/public/blockly/msg/af.js +440 -0
  12. package/public/blockly/msg/am.js +440 -0
  13. package/public/blockly/msg/ar.js +440 -0
  14. package/public/blockly/msg/ast.js +440 -0
  15. package/public/blockly/msg/az.js +440 -0
  16. package/public/blockly/msg/ba.js +440 -0
  17. package/public/blockly/msg/bcc.js +440 -0
  18. package/public/blockly/msg/be-tarask.js +440 -0
  19. package/public/blockly/msg/be.js +440 -0
  20. package/public/blockly/msg/bg.js +440 -0
  21. package/public/blockly/msg/bn.js +440 -0
  22. package/public/blockly/msg/br.js +440 -0
  23. package/public/blockly/msg/bs.js +440 -0
  24. package/public/blockly/msg/ca.js +440 -0
  25. package/public/blockly/msg/cdo.js +440 -0
  26. package/public/blockly/msg/cs.js +440 -0
  27. package/public/blockly/msg/da.js +440 -0
  28. package/public/blockly/msg/de.js +440 -0
  29. package/public/blockly/msg/diq.js +440 -0
  30. package/public/blockly/msg/dty.js +440 -0
  31. package/public/blockly/msg/ee.js +440 -0
  32. package/public/blockly/msg/el.js +440 -0
  33. package/public/blockly/msg/en-gb.js +440 -0
  34. package/public/blockly/msg/en.js +440 -0
  35. package/public/blockly/msg/eo.js +440 -0
  36. package/public/blockly/msg/es.js +440 -0
  37. package/public/blockly/msg/et.js +440 -0
  38. package/public/blockly/msg/eu.js +440 -0
  39. package/public/blockly/msg/fa.js +440 -0
  40. package/public/blockly/msg/fi.js +440 -0
  41. package/public/blockly/msg/fo.js +440 -0
  42. package/public/blockly/msg/fr.js +440 -0
  43. package/public/blockly/msg/frr.js +440 -0
  44. package/public/blockly/msg/gl.js +440 -0
  45. package/public/blockly/msg/gn.js +440 -0
  46. package/public/blockly/msg/gor.js +440 -0
  47. package/public/blockly/msg/ha.js +440 -0
  48. package/public/blockly/msg/hak.js +440 -0
  49. package/public/blockly/msg/he.js +440 -0
  50. package/public/blockly/msg/hi.js +440 -0
  51. package/public/blockly/msg/hr.js +440 -0
  52. package/public/blockly/msg/hrx.js +440 -0
  53. package/public/blockly/msg/hu.js +440 -0
  54. package/public/blockly/msg/hy.js +440 -0
  55. package/public/blockly/msg/ia.js +440 -0
  56. package/public/blockly/msg/id.js +440 -0
  57. package/public/blockly/msg/ig.js +440 -0
  58. package/public/blockly/msg/inh.js +440 -0
  59. package/public/blockly/msg/is.js +440 -0
  60. package/public/blockly/msg/it.js +440 -0
  61. package/public/blockly/msg/ja.js +440 -0
  62. package/public/blockly/msg/ka.js +440 -0
  63. package/public/blockly/msg/kab.js +440 -0
  64. package/public/blockly/msg/kbd-cyrl.js +440 -0
  65. package/public/blockly/msg/km.js +440 -0
  66. package/public/blockly/msg/kn.js +440 -0
  67. package/public/blockly/msg/ko.js +440 -0
  68. package/public/blockly/msg/ksh.js +440 -0
  69. package/public/blockly/msg/ku-latn.js +440 -0
  70. package/public/blockly/msg/ky.js +440 -0
  71. package/public/blockly/msg/la.js +440 -0
  72. package/public/blockly/msg/lb.js +440 -0
  73. package/public/blockly/msg/lki.js +440 -0
  74. package/public/blockly/msg/lo.js +440 -0
  75. package/public/blockly/msg/lrc.js +440 -0
  76. package/public/blockly/msg/lt.js +440 -0
  77. package/public/blockly/msg/lv.js +440 -0
  78. package/public/blockly/msg/mg.js +440 -0
  79. package/public/blockly/msg/mk.js +440 -0
  80. package/public/blockly/msg/ml.js +440 -0
  81. package/public/blockly/msg/mnw.js +440 -0
  82. package/public/blockly/msg/ms.js +440 -0
  83. package/public/blockly/msg/msg.d.ts +444 -0
  84. package/public/blockly/msg/my.js +440 -0
  85. package/public/blockly/msg/mzn.js +440 -0
  86. package/public/blockly/msg/nb.js +440 -0
  87. package/public/blockly/msg/ne.js +440 -0
  88. package/public/blockly/msg/nl.js +440 -0
  89. package/public/blockly/msg/oc.js +440 -0
  90. package/public/blockly/msg/olo.js +440 -0
  91. package/public/blockly/msg/pa.js +440 -0
  92. package/public/blockly/msg/pl.js +440 -0
  93. package/public/blockly/msg/pms.js +440 -0
  94. package/public/blockly/msg/ps.js +440 -0
  95. package/public/blockly/msg/pt-br.js +440 -0
  96. package/public/blockly/msg/pt.js +440 -0
  97. package/public/blockly/msg/ro.js +440 -0
  98. package/public/blockly/msg/ru.js +440 -0
  99. package/public/blockly/msg/sc.js +440 -0
  100. package/public/blockly/msg/sco.js +440 -0
  101. package/public/blockly/msg/sd.js +440 -0
  102. package/public/blockly/msg/shn.js +440 -0
  103. package/public/blockly/msg/si.js +440 -0
  104. package/public/blockly/msg/sk.js +440 -0
  105. package/public/blockly/msg/skr-arab.js +440 -0
  106. package/public/blockly/msg/sl.js +440 -0
  107. package/public/blockly/msg/smn.js +440 -0
  108. package/public/blockly/msg/sq.js +440 -0
  109. package/public/blockly/msg/sr-latn.js +440 -0
  110. package/public/blockly/msg/sr.js +440 -0
  111. package/public/blockly/msg/sv.js +440 -0
  112. package/public/blockly/msg/sw.js +440 -0
  113. package/public/blockly/msg/ta.js +440 -0
  114. package/public/blockly/msg/tcy.js +440 -0
  115. package/public/blockly/msg/te.js +440 -0
  116. package/public/blockly/msg/th.js +440 -0
  117. package/public/blockly/msg/ti.js +440 -0
  118. package/public/blockly/msg/tl.js +440 -0
  119. package/public/blockly/msg/tlh.js +440 -0
  120. package/public/blockly/msg/tr.js +440 -0
  121. package/public/blockly/msg/ug-arab.js +440 -0
  122. package/public/blockly/msg/uk.js +440 -0
  123. package/public/blockly/msg/ur.js +440 -0
  124. package/public/blockly/msg/uz.js +440 -0
  125. package/public/blockly/msg/vi.js +440 -0
  126. package/public/blockly/msg/xmf.js +440 -0
  127. package/public/blockly/msg/yo.js +440 -0
  128. package/public/blockly/msg/yue.js +440 -0
  129. package/public/blockly/msg/zgh.js +440 -0
  130. package/public/blockly/msg/zh-hans.js +440 -0
  131. package/public/blockly/msg/zh-hant.js +440 -0
  132. package/routes/actions.js +12 -7
  133. package/routes/common_lists.js +6 -4
  134. package/routes/plugins.js +0 -32
  135. package/routes/tables.js +3 -1
  136. package/serve.js +52 -1
  137. package/tests/plugins.test.js +2 -2
package/serve.js CHANGED
@@ -50,7 +50,9 @@ const {
50
50
  } = require("@saltcorn/admin-models/models/tenant");
51
51
  const { auto_backup_now } = require("@saltcorn/admin-models/models/backup");
52
52
  const Snapshot = require("@saltcorn/admin-models/models/snapshot");
53
- const { writeFileSync } = require("fs");
53
+ const { writeFileSync, rmdirSync, readFileSync } = require("fs");
54
+ const { pathExistsSync } = require("fs-extra");
55
+ const envPaths = require("env-paths");
54
56
 
55
57
  const take_snapshot = async () => {
56
58
  return await Snapshot.take_if_changed();
@@ -88,6 +90,54 @@ const ensureEnginesCache = async () => {
88
90
  }
89
91
  };
90
92
 
93
+ /**
94
+ * validate all plugins folders and remove invalid entries
95
+ * A folder is invalid when it has dependencies but not node_modules directory
96
+ */
97
+ const ensurePluginsFolder = async () => {
98
+ const rootFolder = envPaths("saltcorn", { suffix: "plugins" }).data;
99
+ const staticDeps = ["@saltcorn/markup", "@saltcorn/data", "jest"];
100
+ const allPluginFolders = new Set();
101
+ await eachTenant(async () => {
102
+ const allPlugins = (await Plugin.find()).filter(
103
+ (p) => !["base", "sbadmin2"].includes(p.name)
104
+ );
105
+ for (const plugin of allPlugins) {
106
+ const tokens =
107
+ plugin.source === "npm"
108
+ ? plugin.location.split("/")
109
+ : plugin.name.split("/");
110
+ const pluginDir = path.join(
111
+ rootFolder,
112
+ plugin.source === "git" ? "git_plugins" : "plugins_folder",
113
+ ...tokens
114
+ );
115
+ allPluginFolders.add(pluginDir);
116
+ }
117
+ });
118
+ for (const folder of allPluginFolders) {
119
+ try {
120
+ if (pathExistsSync(folder)) {
121
+ const packageJson = JSON.parse(
122
+ readFileSync(path.join(folder, "package.json"))
123
+ );
124
+ if (
125
+ (Object.keys(packageJson.dependencies || {}).some(
126
+ (d) => !staticDeps.includes(d)
127
+ ) ||
128
+ Object.keys(packageJson.devDependencies || {}).some(
129
+ (d) => !staticDeps.includes(d)
130
+ )) &&
131
+ !pathExistsSync(path.join(folder, "node_modules"))
132
+ )
133
+ rmdirSync(folder, { recursive: true });
134
+ }
135
+ } catch (e) {
136
+ console.log(`Error checking plugin folder: ${e.message || e}`);
137
+ }
138
+ }
139
+ };
140
+
91
141
  // helpful https://gist.github.com/jpoehls/2232358
92
142
  /**
93
143
  * @param {object} opts
@@ -236,6 +286,7 @@ module.exports =
236
286
  if (cluster.isMaster) {
237
287
  ensureJwtSecret();
238
288
  await ensureEnginesCache();
289
+ await ensurePluginsFolder();
239
290
  }
240
291
  process.on("unhandledRejection", (reason, p) => {
241
292
  console.error(reason, "Unhandled Rejection at Promise");
@@ -92,7 +92,7 @@ describe("Plugin Endpoints", () => {
92
92
  .expect(toInclude("testfilecontents"));
93
93
  await request(app)
94
94
  .get(
95
- "/plugins/pubdeps/sbadmin2/startbootstrap-sb-admin-2-bs5/4.1.5-beta.4/css/sb-admin-2.min.css"
95
+ "/plugins/public/sbadmin2@9.9.9/sb-admin-2.min.css"
96
96
  )
97
97
  .expect(toInclude("Start Bootstrap"));
98
98
 
@@ -102,7 +102,7 @@ describe("Plugin Endpoints", () => {
102
102
  .expect(toRedirect("/plugins"));
103
103
  await request(app)
104
104
  .get(
105
- "/plugins/pubdeps/sbadmin2/startbootstrap-sb-admin-2-bs5/4.1.5-beta.4/css/sb-admin-2.min.css"
105
+ "/plugins/public/sbadmin2@9.9.9/sb-admin-2.min.css"
106
106
  )
107
107
  .expect(toInclude("Start Bootstrap"));
108
108
  });