@opengis/fastify-table 2.5.22 → 2.5.24

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 (39) hide show
  1. package/dist/server/plugins/pg/funcs/autoIndex.d.ts.map +1 -1
  2. package/dist/server/plugins/pg/funcs/autoIndex.js +8 -3
  3. package/dist/server/plugins/table/funcs/getFilterSQL/index.js +1 -1
  4. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/formatValue.d.ts +2 -0
  5. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/formatValue.d.ts.map +1 -0
  6. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/formatValue.js +211 -0
  7. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getFilterList.d.ts +8 -0
  8. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getFilterList.d.ts.map +1 -0
  9. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getFilterList.js +90 -0
  10. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getFilterQuery.d.ts +17 -0
  11. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getFilterQuery.d.ts.map +1 -0
  12. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getFilterQuery.js +90 -0
  13. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getRangeQuery.d.ts +17 -0
  14. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getRangeQuery.d.ts.map +1 -0
  15. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getRangeQuery.js +340 -0
  16. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getTableSql.d.ts +9 -0
  17. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getTableSql.d.ts.map +1 -0
  18. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/getTableSql.js +40 -0
  19. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/index.d.ts +19 -0
  20. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/index.d.ts.map +1 -0
  21. package/dist/server/plugins/table/funcs/getFilterSQLParametrized/index.js +156 -0
  22. package/dist/server/routes/table/functions/getData.d.ts.map +1 -1
  23. package/dist/server/routes/table/functions/getData.js +50 -32
  24. package/dist/server/routes/table/functions/prettify.d.ts +2 -0
  25. package/dist/server/routes/table/functions/prettify.d.ts.map +1 -0
  26. package/dist/server/routes/table/functions/prettify.js +11 -0
  27. package/dist/utils.d.ts +1 -0
  28. package/dist/utils.d.ts.map +1 -1
  29. package/dist/utils.js +1 -0
  30. package/package.json +1 -1
  31. package/dist/server/plugins/policy/funcs/checkSQL.d.ts +0 -8
  32. package/dist/server/plugins/policy/funcs/checkSQL.d.ts.map +0 -1
  33. package/dist/server/plugins/policy/funcs/checkSQL.js +0 -19
  34. package/dist/server/plugins/policy/sqlInjection.d.ts +0 -3
  35. package/dist/server/plugins/policy/sqlInjection.d.ts.map +0 -1
  36. package/dist/server/plugins/policy/sqlInjection.js +0 -33
  37. package/dist/server/plugins/table/funcs/getData.d.ts +0 -2
  38. package/dist/server/plugins/table/funcs/getData.d.ts.map +0 -1
  39. package/dist/server/plugins/table/funcs/getData.js +0 -25
@@ -1,6 +1,6 @@
1
1
  import config from "../../../../config.js";
2
2
  import { handlebars, handlebarsSync } from "../../../helpers/index.js";
3
- import getFilterSQL from "../../../plugins/table/funcs/getFilterSQL/index.js";
3
+ import getFilterSQLParametrized from "../../../plugins/table/funcs/getFilterSQLParametrized/index.js";
4
4
  import getAccess from "../../../plugins/crud/funcs/getAccess.js";
5
5
  import setToken from "../../../plugins/crud/funcs/setToken.js";
6
6
  import getToken from "../../../plugins/crud/funcs/getToken.js";
@@ -20,6 +20,7 @@ import locales from "../controllers/utils/locales.js";
20
20
  import conditions from "../controllers/utils/conditions.js";
21
21
  import { resources } from "../../../plugins/access/funcs/getResources.js";
22
22
  import { BadRequestError, ForbiddenError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
23
+ import prettify from "./prettify.js";
23
24
  const components = {
24
25
  "vs-widget-file": "select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3",
25
26
  "vs-widget-comments": "select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1",
@@ -37,7 +38,7 @@ const mockReply = {
37
38
  },
38
39
  send: (txt) => Object.assign(mockReply.response, txt),
39
40
  };
40
- function getOrder(queryOrder, queryDesc, defaultOrder, columnList, sqlColumns, iscalled = false) {
41
+ function getOrder({ queryOrder, queryDesc, defaultOrder, columnList, cols, sqlColumns, iscalled = false, }) {
41
42
  if (iscalled && queryOrder) {
42
43
  return `order by ${queryOrder}`;
43
44
  }
@@ -46,7 +47,11 @@ function getOrder(queryOrder, queryDesc, defaultOrder, columnList, sqlColumns, i
46
47
  }
47
48
  const orderArr = queryOrder.split(/[|]/g).map((el) => el.split(/[-]/));
48
49
  const validOrder = orderArr
49
- .filter((el) => el[0] && (columnList || "").concat(sqlColumns || "").includes(el[0]))
50
+ .filter((el) => el[0] &&
51
+ (columnList || "")
52
+ .concat(sqlColumns || "")
53
+ .concat(cols || "")
54
+ .includes(el[0]))
50
55
  .map((el) => `${el[0]} ${queryDesc || el[1] === "desc" ? "desc" : ""}`)
51
56
  .join(",");
52
57
  return `order by ${validOrder || "true::boolean"} nulls last`;
@@ -121,7 +126,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
121
126
  else if (checkInline[paramsTable]) {
122
127
  loadTable.sql = checkInline[paramsTable];
123
128
  }
124
- if (query?.sql === "0")
129
+ if (query?.sql === 0 && process.platform === "win32")
125
130
  return loadTable;
126
131
  if (!pg) {
127
132
  throw Error("empty pg");
@@ -257,7 +262,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
257
262
  isdefault,
258
263
  ].filter(Boolean).length;
259
264
  const fData = checkFilter
260
- ? await getFilterSQL({
265
+ ? await getFilterSQLParametrized({
261
266
  pg,
262
267
  table: loadTable
263
268
  ? tokenData?.table || resources[paramsTable] || paramsTable
@@ -273,42 +278,55 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
273
278
  })
274
279
  : {};
275
280
  timeArr.push(Date.now());
281
+ const args = Array.from(fData.args || []);
282
+ if (objectId) {
283
+ args.push(objectId);
284
+ Object.assign(idx, { id: args.length });
285
+ }
286
+ else if (query?.key && loadTable.key) {
287
+ args.push(query.key);
288
+ Object.assign(idx, { id: args.length });
289
+ }
276
290
  const keyQuery = query?.key && (loadTable?.key || tokenData?.key) && !objectId
277
- ? `${loadTable?.key || tokenData?.key}=$1`
291
+ ? `${loadTable?.key || tokenData?.key}=$${args.length}`
278
292
  : null;
279
- const args = (objectId ? [objectId] : null) ||
280
- (query?.key && loadTable.key ? [query.key] : []);
281
- if (args[0]) {
282
- Object.assign(idx, { id: 1 });
283
- }
284
- const isSingle = !!idx.id;
285
293
  const limit = (called
286
294
  ? query?.limit || defaultLimit
287
295
  : Math.min(maxLimit, +(query?.limit || defaultLimit))) || defaultLimit;
288
296
  args.push(limit);
289
- Object.assign(idx, { limit: idx.id ? 2 : 1 });
297
+ Object.assign(idx, { limit: args.length });
290
298
  const offset = query?.page && query?.page > 0 && !objectId ? (query?.page - 1) * limit : 0;
291
299
  args.push(offset);
292
- Object.assign(idx, { offset: idx.id ? 3 : 2 });
293
- const order = getOrder(query?.order, query?.desc, loadTable?.order, columnList, loadTable?.sqlColumns, !!called);
294
- const isSearchable = Array.isArray(loadTable?.meta?.search) &&
295
- loadTable.meta.search.length &&
300
+ Object.assign(idx, { offset: args.length });
301
+ const order = getOrder({
302
+ queryOrder: query?.order,
303
+ queryDesc: query?.desc,
304
+ defaultOrder: loadTable?.order,
305
+ columnList,
306
+ cols,
307
+ sqlColumns: loadTable?.sqlColumns,
308
+ iscalled: !!called,
309
+ });
310
+ const isSearchable = loadTable?.meta?.search &&
311
+ typeof loadTable.meta.search === "string" &&
296
312
  query?.search &&
297
- !isSingle;
313
+ !idx.id;
298
314
  if (isSearchable) {
299
315
  args.push(`%${query.search.replace(/%/g, "\\%")}%`);
300
- Object.assign(idx, { search: Object.keys(idx).length + 1 });
316
+ Object.assign(idx, { search: args.length });
301
317
  }
302
318
  if (meta?.bbox && query?.polyline) {
303
319
  args.push(query.polyline);
304
- Object.assign(idx, { polyline: Object.keys(idx).length + 1 });
320
+ Object.assign(idx, {
321
+ polyline: args.length,
322
+ });
305
323
  }
306
324
  if (config.trace)
307
325
  console.log(order);
308
326
  const search = isSearchable
309
- ? `(${loadTable?.meta?.search
310
- ?.split(",")
311
- ?.map((el) => `${el} ilike $${idx.search}`)
327
+ ? `(${loadTable.meta.search
328
+ .split(",")
329
+ .map((el) => `${el} ilike $${idx.search}`)
312
330
  .join(" or ")})`
313
331
  : null;
314
332
  const queryBbox = query?.bbox
@@ -368,13 +386,13 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
368
386
  ${order} limit $${idx.limit}::bigint offset $${idx.offset}::bigint`;
369
387
  if (q1.includes("{{uid}}")) {
370
388
  args.push(uid || "");
371
- Object.assign(idx, { uid: Object.keys(idx).length + 1 });
389
+ Object.assign(idx, { uid: args.length });
372
390
  }
373
391
  const q = q1.replace(/'{{uid}}'/g, `$${idx.uid}`);
374
392
  if (config.trace)
375
393
  console.log(q);
376
- if (query?.sql === "1") {
377
- return q;
394
+ if (query?.sql === 1 && process.platform === "win32") {
395
+ return prettify(q, args);
378
396
  }
379
397
  const rows = await pg.query(q, args).then((r) => r.rows || []);
380
398
  if (!rows.length &&
@@ -409,18 +427,18 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
409
427
  });
410
428
  }
411
429
  const idx1 = {};
412
- const args1 = [];
430
+ const args1 = Array.from(fData.args || []);
413
431
  if (idx.search) {
414
432
  args1.push(args[idx.search - 1]);
415
- Object.assign(idx1, { search: Object.keys(idx1).length + 1 });
433
+ Object.assign(idx1, { search: args1.length });
416
434
  }
417
435
  if (idx.uid) {
418
436
  args1.push(args[idx.uid - 1]);
419
- Object.assign(idx1, { uid: Object.keys(idx1).length + 1 });
437
+ Object.assign(idx1, { uid: args1.length });
420
438
  }
421
439
  if (idx.polyline) {
422
440
  args1.push(args[idx.polyline - 1]);
423
- Object.assign(idx1, { polyline: Object.keys(idx1).length + 1 });
441
+ Object.assign(idx1, { polyline: args1.length });
424
442
  }
425
443
  const search1 = idx.search
426
444
  ? `(${loadTable.meta.search
@@ -464,8 +482,8 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
464
482
  where ${[loadTable?.query, tokenData?.query, accessQuery, contextQuery]
465
483
  .filter(Boolean)
466
484
  .join(" and ") || "true"} `.replace(/'{{uid}}'/g, `$${idx1.uid}`);
467
- if (query?.sql === "2") {
468
- return qCount;
485
+ if (query?.sql === 2 && process.platform === "win32") {
486
+ return prettify(qCount, args1);
469
487
  }
470
488
  const counts = keyQuery || objectId
471
489
  ? { total: rows.length, filtered: rows.length }
@@ -0,0 +1,2 @@
1
+ export default function prettify(q: string, args: any[]): string;
2
+ //# sourceMappingURL=prettify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prettify.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/prettify.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAetD"}
@@ -0,0 +1,11 @@
1
+ export default function prettify(q, args) {
2
+ if (!q)
3
+ throw new Error("query is empty");
4
+ if (!args?.length)
5
+ return q;
6
+ return q.replace(/\$(\d+)/g, (_, ind) => `${Array.isArray(args[ind - 1])
7
+ ? `'{${args[ind - 1]}}'`
8
+ : ["number", "boolean"].includes(typeof args[ind - 1])
9
+ ? args[ind - 1]
10
+ : `'${args[ind - 1]}'`}`);
11
+ }
package/dist/utils.d.ts CHANGED
@@ -26,6 +26,7 @@ export { default as metaFormat } from "./server/plugins/table/funcs/metaFormat/i
26
26
  export { default as autoIndex } from "./server/plugins/pg/funcs/autoIndex.js";
27
27
  export { default as getSelectVal } from "./server/plugins/table/funcs/metaFormat/getSelectVal.js";
28
28
  export { default as getFilterSQL } from "./server/plugins/table/funcs/getFilterSQL/index.js";
29
+ export { default as getFilterSQLParametrized } from "./server/plugins/table/funcs/getFilterSQLParametrized/index.js";
29
30
  export { default as getSelect } from "./server/plugins/table/funcs/getSelect.js";
30
31
  export { default as getSelectMeta } from "./server/plugins/table/funcs/getSelectMeta.js";
31
32
  export { default as gisIRColumn } from "./server/plugins/table/funcs/gisIRColumn.js";
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -34,6 +34,7 @@ export { default as metaFormat } from "./server/plugins/table/funcs/metaFormat/i
34
34
  export { default as autoIndex } from "./server/plugins/pg/funcs/autoIndex.js";
35
35
  export { default as getSelectVal } from "./server/plugins/table/funcs/metaFormat/getSelectVal.js";
36
36
  export { default as getFilterSQL } from "./server/plugins/table/funcs/getFilterSQL/index.js";
37
+ export { default as getFilterSQLParametrized } from "./server/plugins/table/funcs/getFilterSQLParametrized/index.js";
37
38
  export { default as getSelect } from "./server/plugins/table/funcs/getSelect.js";
38
39
  export { default as getSelectMeta } from "./server/plugins/table/funcs/getSelectMeta.js";
39
40
  export { default as gisIRColumn } from "./server/plugins/table/funcs/gisIRColumn.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.5.22",
3
+ "version": "2.5.24",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [
@@ -1,8 +0,0 @@
1
- export default function checkSQL({ body, schema }: any): {
2
- body: any;
3
- error?: undefined;
4
- } | {
5
- error: string;
6
- body: any;
7
- };
8
- //# sourceMappingURL=checkSQL.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkSQL.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/policy/funcs/checkSQL.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAW,EAAE,EAAE,GAAG;;;;;;EA0B1D"}
@@ -1,19 +0,0 @@
1
- import sqlInjection from "../sqlInjection.js";
2
- export default function checkSQL({ body, schema = {} }) {
3
- const data = typeof body === "string" ? body : JSON.stringify(body);
4
- const stopWords = sqlInjection.filter((el) => data?.toLowerCase?.()?.includes?.(el));
5
- if (!stopWords.length)
6
- return { body };
7
- const disabledCheckFields = Object.keys(schema || {})?.filter((el) => schema?.[el]?.sqlCheck === false); // exclude specific columns
8
- const field = Object.keys(body)?.find((key) => body[key]?.toLowerCase &&
9
- !disabledCheckFields.includes(key) &&
10
- body[key].toLowerCase().includes(stopWords[0]));
11
- if (field) {
12
- console.error(stopWords[0], field, body[field]);
13
- return {
14
- error: `rule: ${stopWords[0]} | attr: ${field} | val: ${body[field]}`,
15
- body,
16
- };
17
- }
18
- return { body };
19
- }
@@ -1,3 +0,0 @@
1
- declare const sqlInjection: string[];
2
- export default sqlInjection;
3
- //# sourceMappingURL=sqlInjection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlInjection.d.ts","sourceRoot":"","sources":["../../../../server/plugins/policy/sqlInjection.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,YAAY,UA8BjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,33 +0,0 @@
1
- /* eslint-disable no-script-url */
2
- const sqlInjection = [
3
- '()',
4
- '^',
5
- '*',
6
- 'like ',
7
- '@variable',
8
- '@@variable',
9
- 'group by ',
10
- 'union ',
11
- 'select ',
12
- 'having ',
13
- 'as injectx',
14
- 'where ',
15
- 'rlike ',
16
- 'if(',
17
- 'sleep(',
18
- 'waitfor delay',
19
- 'benchmark(',
20
- 'pg_sleep(',
21
- "'\\\"",
22
- 'randomblob(',
23
- 'order by ',
24
- 'union all ',
25
- '+or',
26
- 'or ',
27
- 'and ',
28
- "'' ",
29
- '""" ',
30
- '<script',
31
- 'javascript:',
32
- ];
33
- export default sqlInjection;
@@ -1,2 +0,0 @@
1
- export default function getData({ id, table, pg, headers, filter, state, limit, page, search, user, order, desc, sql, contextQuery, sufix, filterList, }: any, reply: any, called?: any): Promise<any>;
2
- //# sourceMappingURL=getData.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/table/funcs/getData.ts"],"names":[],"mappings":"AAEA,wBAA8B,OAAO,CACnC,EACE,EAAE,EACF,KAAK,EACL,EAAE,EACF,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,GAAG,EACH,YAAY,EACZ,KAAK,EACL,UAAU,GACX,EAAE,GAAG,EACN,KAAK,EAAE,GAAG,EACV,MAAM,CAAC,EAAE,GAAG,gBA4Bb"}
@@ -1,25 +0,0 @@
1
- import routeData from "../../../routes/table/controllers/tableData.js";
2
- export default async function getData({ id, table, pg, headers, filter, state, limit, page, search, user, order, desc, sql, contextQuery, sufix, filterList, }, reply, called) {
3
- const params = { table, id };
4
- const query = {
5
- filter,
6
- limit,
7
- page,
8
- search,
9
- sql,
10
- state,
11
- order,
12
- desc,
13
- };
14
- const result = await routeData({
15
- pg,
16
- headers,
17
- params,
18
- query,
19
- user,
20
- contextQuery,
21
- sufix,
22
- filterList,
23
- }, reply, called);
24
- return result;
25
- }