@opengis/fastify-table 2.0.78 → 2.0.80
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/dist/server/plugins/crud/funcs/dataDelete.js +1 -1
- package/dist/server/plugins/crud/funcs/dataUpsert.d.ts +13 -0
- package/dist/server/plugins/crud/funcs/dataUpsert.d.ts.map +1 -0
- package/dist/server/plugins/crud/funcs/dataUpsert.js +148 -0
- package/dist/server/plugins/crud/funcs/utils/getInsertQuery.d.ts +2 -0
- package/dist/server/plugins/crud/funcs/utils/getInsertQuery.d.ts.map +1 -1
- package/dist/server/plugins/crud/funcs/utils/getInsertQuery.js +2 -1
- package/dist/server/plugins/file/uploadMultiPart.d.ts +1 -1
- package/dist/server/plugins/file/uploadMultiPart.d.ts.map +1 -1
- package/dist/server/plugins/file/uploadMultiPart.js +9 -2
- package/dist/server/plugins/pg/funcs/getMeta.js +2 -2
- package/dist/server/plugins/pg/funcs/getPG.d.ts.map +1 -1
- package/dist/server/plugins/pg/funcs/getPG.js +2 -1
- package/dist/server/plugins/pg/funcs/getPGAsync.d.ts.map +1 -1
- package/dist/server/plugins/pg/funcs/getPGAsync.js +2 -1
- package/dist/server/plugins/pg/funcs/init.d.ts.map +1 -1
- package/dist/server/plugins/pg/funcs/init.js +12 -3
- package/dist/server/plugins/policy/funcs/checkPolicy.d.ts.map +1 -1
- package/dist/server/plugins/policy/funcs/checkPolicy.js +3 -1
- package/dist/server/plugins/policy/funcs/checkSQL.d.ts +8 -0
- package/dist/server/plugins/policy/funcs/checkSQL.d.ts.map +1 -0
- package/dist/server/plugins/policy/funcs/checkSQL.js +19 -0
- package/dist/server/routes/crud/controllers/insert.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/insert.js +14 -2
- package/dist/server/routes/crud/controllers/update.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/update.js +14 -2
- package/dist/server/routes/table/controllers/getFormByTable.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/getFormByTable.js +10 -5
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -0
- package/package.json +1 -1
|
@@ -17,7 +17,7 @@ export default async function dataDelete({ table: table1, tokenData, referer, id
|
|
|
17
17
|
pg.relkinds = pgClients.client?.relkinds;
|
|
18
18
|
pg.pk = pgClients.client?.pk;
|
|
19
19
|
}
|
|
20
|
-
const table = pg.pk[table1] ? table1 : table1.replace(/"/g, "");
|
|
20
|
+
const table = pg.pk?.[table1] ? table1 : table1.replace(/"/g, "");
|
|
21
21
|
if (!table)
|
|
22
22
|
return "table not exist";
|
|
23
23
|
const { pk } = await getMeta({ pg, table });
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ExtendedPG } from "../../../types/core.js";
|
|
2
|
+
export default function dataUpsert({ id, table: table1, referer, data, pg: pg1, uid, tokenData, update, constraint, }: {
|
|
3
|
+
id?: string | number;
|
|
4
|
+
table: string;
|
|
5
|
+
referer?: string;
|
|
6
|
+
data: Record<string, any>;
|
|
7
|
+
pg?: ExtendedPG;
|
|
8
|
+
uid?: string;
|
|
9
|
+
tokenData?: Record<string, any>;
|
|
10
|
+
update?: boolean | string;
|
|
11
|
+
constraint?: string;
|
|
12
|
+
}): Promise<any>;
|
|
13
|
+
//# sourceMappingURL=dataUpsert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataUpsert.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/crud/funcs/dataUpsert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAezD,wBAA8B,UAAU,CAAC,EACvC,EAAE,EACF,KAAK,EAAE,MAAM,EACb,OAAO,EACP,IAAI,EACJ,EAAE,EAAE,GAAG,EACP,GAAG,EACH,SAAc,EACd,MAAa,EACb,UAAU,GACX,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,gBA+KA"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import getPG from "../../pg/funcs/getPG.js";
|
|
2
|
+
import getRedis from "../../redis/funcs/getRedis.js";
|
|
3
|
+
import pgClients from "../../pg/pgClients.js";
|
|
4
|
+
import getTemplate from "../../table/funcs/getTemplate.js";
|
|
5
|
+
import config from "../../../../config.js";
|
|
6
|
+
import logChanges from "./utils/logChanges.js";
|
|
7
|
+
import getInsertQuery from "./utils/getInsertQuery.js";
|
|
8
|
+
import logger from "../../logger/getLogger.js";
|
|
9
|
+
import extraData from "../../extra/extraData.js";
|
|
10
|
+
const rclient = getRedis();
|
|
11
|
+
export default async function dataUpsert({ id, table: table1, referer, data, pg: pg1, uid, tokenData = {}, update = true, constraint, }) {
|
|
12
|
+
const pg = pg1 || getPG({ name: "client" });
|
|
13
|
+
if (!pg)
|
|
14
|
+
return null;
|
|
15
|
+
// pg client single transaction support
|
|
16
|
+
if (!pg?.pk && config.pg) {
|
|
17
|
+
pg.options = pgClients.client?.options;
|
|
18
|
+
pg.tlist = pgClients.client?.tlist;
|
|
19
|
+
pg.pgType = pgClients.client?.pgType;
|
|
20
|
+
pg.relkinds = pgClients.client?.relkinds;
|
|
21
|
+
pg.pk = pgClients.client?.pk;
|
|
22
|
+
}
|
|
23
|
+
if (config.trace)
|
|
24
|
+
console.log("form", tokenData?.form);
|
|
25
|
+
const table = pg.pk?.[table1] ? table1 : table1.replace(/"/g, "");
|
|
26
|
+
const { insertQuery, args = [], keys = [], systemColumns = [], } = (await getInsertQuery({
|
|
27
|
+
pg,
|
|
28
|
+
table,
|
|
29
|
+
data,
|
|
30
|
+
id,
|
|
31
|
+
uid,
|
|
32
|
+
})) || {};
|
|
33
|
+
const updatedAtColumn = systemColumns
|
|
34
|
+
.map((el) => el[0])
|
|
35
|
+
.find((colname) => ["editor_date", "updated_at"].includes(colname));
|
|
36
|
+
const upsert = () => {
|
|
37
|
+
if (!update || !keys.length) {
|
|
38
|
+
const p1 = `on conflict(${constraint || pg.pk?.[table]}) do `;
|
|
39
|
+
const p2 = updatedAtColumn
|
|
40
|
+
? `update set ${updatedAtColumn}=now()`
|
|
41
|
+
: "nothing";
|
|
42
|
+
return p1 + p2 + "returning *";
|
|
43
|
+
}
|
|
44
|
+
return `on conflict(${constraint || pg.pk?.[table]}) do update set ${typeof update === "string"
|
|
45
|
+
? update
|
|
46
|
+
: keys.map((colname) => `${colname} = EXCLUDED."${colname}"`).join(", ")} ${keys.includes(updatedAtColumn) || !updatedAtColumn
|
|
47
|
+
? ""
|
|
48
|
+
: `,${updatedAtColumn}=now()`} returning *`;
|
|
49
|
+
};
|
|
50
|
+
if (!insertQuery || !args.length)
|
|
51
|
+
return null;
|
|
52
|
+
const q = [insertQuery.replace("returning *", ""), upsert()]
|
|
53
|
+
.filter(Boolean)
|
|
54
|
+
.join(" ");
|
|
55
|
+
// for transactions
|
|
56
|
+
const isClient = typeof pg.query === "function" && typeof pg.release === "function";
|
|
57
|
+
const client = (isClient ? pg : await pg.connect());
|
|
58
|
+
if (isClient || !client.pk) {
|
|
59
|
+
client.options = pg.options;
|
|
60
|
+
client.tlist = pg.tlist;
|
|
61
|
+
client.pgType = pg.pgType;
|
|
62
|
+
client.relkinds = pg.relkinds;
|
|
63
|
+
client.pk = pg.pk;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
if (!isClient) {
|
|
67
|
+
await client.query("begin;");
|
|
68
|
+
}
|
|
69
|
+
const row = await client.query(q, args).then((el) => el.rows?.[0]);
|
|
70
|
+
const id1 = row?.[pg.pk?.[table] || ""];
|
|
71
|
+
if (!id1)
|
|
72
|
+
return null;
|
|
73
|
+
await extraData({
|
|
74
|
+
table,
|
|
75
|
+
form: tokenData?.form,
|
|
76
|
+
id: id1,
|
|
77
|
+
data,
|
|
78
|
+
uid,
|
|
79
|
+
row,
|
|
80
|
+
}, client);
|
|
81
|
+
// foreign key dataTable (table + parent_id)
|
|
82
|
+
const formData = tokenData?.form
|
|
83
|
+
? (await getTemplate("form", tokenData.form)) || {}
|
|
84
|
+
: {};
|
|
85
|
+
const schema = formData?.schema || formData;
|
|
86
|
+
const parentKeys = Object.keys(schema || {})?.filter((key) => data[key]?.length &&
|
|
87
|
+
Array.isArray(data[key]) &&
|
|
88
|
+
schema?.[key]?.table &&
|
|
89
|
+
schema?.[key]?.parent_id);
|
|
90
|
+
if (parentKeys?.length) {
|
|
91
|
+
await Promise.all(parentKeys?.map(async (key) => {
|
|
92
|
+
const parentKey = schema[key].parent_id;
|
|
93
|
+
const objId = data[parentKey] || data?.id || row?.[parentKey] || id1;
|
|
94
|
+
const parentRows = await Promise.all(data[key].map(async (row) => {
|
|
95
|
+
Object.assign(row, { [parentKey]: objId });
|
|
96
|
+
const parentRes = await getInsertQuery({
|
|
97
|
+
pg: client,
|
|
98
|
+
table: schema[key].table,
|
|
99
|
+
data: row,
|
|
100
|
+
uid,
|
|
101
|
+
});
|
|
102
|
+
if (!parentRes?.insertQuery || !parentRes?.args?.length)
|
|
103
|
+
return null;
|
|
104
|
+
const { rows = [] } = await client.query(parentRes.insertQuery, parentRes.args);
|
|
105
|
+
return rows[0];
|
|
106
|
+
}));
|
|
107
|
+
Object.assign(row, { [key]: parentRows.filter(Boolean) });
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
await logChanges({
|
|
111
|
+
pg: client,
|
|
112
|
+
table,
|
|
113
|
+
tokenData,
|
|
114
|
+
referer,
|
|
115
|
+
data,
|
|
116
|
+
id: id1,
|
|
117
|
+
uid,
|
|
118
|
+
type: "UPSERT",
|
|
119
|
+
});
|
|
120
|
+
if (config.redis) {
|
|
121
|
+
rclient.incr(`pg:${table}:crud`);
|
|
122
|
+
}
|
|
123
|
+
if (!isClient) {
|
|
124
|
+
await client.query("commit;");
|
|
125
|
+
}
|
|
126
|
+
return row;
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
logger.file("crud/upsert", {
|
|
130
|
+
error: err.toString(),
|
|
131
|
+
stack: err.stack,
|
|
132
|
+
table,
|
|
133
|
+
id,
|
|
134
|
+
referer,
|
|
135
|
+
uid,
|
|
136
|
+
form: tokenData?.form,
|
|
137
|
+
});
|
|
138
|
+
if (!isClient) {
|
|
139
|
+
await client.query("rollback;");
|
|
140
|
+
}
|
|
141
|
+
throw err;
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
if (!isClient) {
|
|
145
|
+
client?.release?.();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInsertQuery.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/crud/funcs/utils/getInsertQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAA8B,cAAc,CAAC,EAC3C,EAAE,EACF,KAAK,EACL,IAAI,EACJ,EAAE,EACF,GAAG,GACJ,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd
|
|
1
|
+
{"version":3,"file":"getInsertQuery.d.ts","sourceRoot":"","sources":["../../../../../../server/plugins/crud/funcs/utils/getInsertQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAA8B,cAAc,CAAC,EAC3C,EAAE,EACF,KAAK,EACL,IAAI,EACJ,EAAE,EACF,GAAG,GACJ,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;;;;;UA+EA"}
|
|
@@ -9,7 +9,7 @@ interface IFile {
|
|
|
9
9
|
extension?: string;
|
|
10
10
|
buffer?: Buffer;
|
|
11
11
|
filename?: string;
|
|
12
|
-
|
|
12
|
+
fields?: Record<string, any>;
|
|
13
13
|
}
|
|
14
14
|
export default function uploadMultiPart(req: any, { extensions, raw, subdir, originalFilename, }?: {
|
|
15
15
|
extensions?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadMultiPart.d.ts","sourceRoot":"","sources":["../../../../server/plugins/file/uploadMultiPart.ts"],"names":[],"mappings":"AAqBA,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"uploadMultiPart.d.ts","sourceRoot":"","sources":["../../../../server/plugins/file/uploadMultiPart.ts"],"names":[],"mappings":"AAqBA,UAAU,KAAK;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAyCD,wBAA8B,eAAe,CAC3C,GAAG,EAAE,GAAG,EACR,EACE,UAAU,EACV,GAAG,EACH,MAAM,EACN,gBAAwB,GACzB,GAAE;IACD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,GACL,OAAO,CAAC,KAAK,CAAC,CAgGhB"}
|
|
@@ -66,8 +66,15 @@ export default async function uploadMultiPart(req, { extensions, raw, subdir, or
|
|
|
66
66
|
if (!fileBuffer?.length) {
|
|
67
67
|
throw new BadRequestError("file buffer is empty");
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
// return buffer for custom upload
|
|
70
|
+
if (raw) {
|
|
71
|
+
return {
|
|
72
|
+
buffer: fileBuffer,
|
|
73
|
+
filename: value.filename,
|
|
74
|
+
extension: ext.substring(1),
|
|
75
|
+
fields: value.fields,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
71
78
|
const dir = subdir != null ? subdir : req.params?.["*"] || "uploads";
|
|
72
79
|
const yearMonthDay = subdir != null ? "" : new Date().toISOString().split("T")[0];
|
|
73
80
|
const dbname = req.pg?.options?.database || req.pg?.database || config.pg?.database; // request / config params / default config params
|
|
@@ -5,7 +5,7 @@ export default async function getMeta(opt, nocache) {
|
|
|
5
5
|
if (!pg)
|
|
6
6
|
return { error: "pg connection not established", status: 400 };
|
|
7
7
|
const table1 = opt?.table || opt;
|
|
8
|
-
const table = pg.pk[table1] ? table1 : table1?.replace?.(/"/g, "");
|
|
8
|
+
const table = pg.pk?.[table1] ? table1 : table1?.replace?.(/"/g, "");
|
|
9
9
|
if (pg?.options?.database && data[pg.options.database]?.[table] && !nocache)
|
|
10
10
|
return data[pg.options.database][table];
|
|
11
11
|
if (!pg?.tlist?.includes(table) &&
|
|
@@ -39,7 +39,7 @@ export default async function getMeta(opt, nocache) {
|
|
|
39
39
|
pk,
|
|
40
40
|
columns: fields,
|
|
41
41
|
geom: geomAttr?.name,
|
|
42
|
-
view: pg.relkinds?.[table]
|
|
42
|
+
view: ["v", "m"].includes(pg.relkinds?.[table]),
|
|
43
43
|
};
|
|
44
44
|
if (!data[pg.options.database]) {
|
|
45
45
|
data[pg.options.database] = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPG.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/getPG.ts"],"names":[],"mappings":"AAYA,iBAAS,KAAK,CAAC,KAAK,GAAE,GAAQ,
|
|
1
|
+
{"version":3,"file":"getPG.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/getPG.ts"],"names":[],"mappings":"AAYA,iBAAS,KAAK,CAAC,KAAK,GAAE,GAAQ,OA6C7B;AAED,eAAe,KAAK,CAAC"}
|
|
@@ -14,7 +14,7 @@ function getPG(param = {}) {
|
|
|
14
14
|
dblist.find((el) => el.database === (param?.db || param?.database || param) &&
|
|
15
15
|
el.port === param?.port);
|
|
16
16
|
const { user, password, host, port, db, database, name: origin, statement_timeout: timeout, // explicit
|
|
17
|
-
|
|
17
|
+
connectionTimeoutMillis: connectionTimeout, } = dbListParams ??
|
|
18
18
|
(typeof param === "string" ? getDBParams(param) : param || {});
|
|
19
19
|
const name = origin || db || database || param || "client";
|
|
20
20
|
if (pgClients[name])
|
|
@@ -26,6 +26,7 @@ function getPG(param = {}) {
|
|
|
26
26
|
port: port || config.pg?.port,
|
|
27
27
|
database: db || database || config.pg?.db || config.pg?.database,
|
|
28
28
|
statement_timeout: timeout || config.pg?.statement_timeout || 10000,
|
|
29
|
+
connectionTimeoutMillis: connectionTimeout || config.pg?.connectionTimeoutMillis || 5000,
|
|
29
30
|
};
|
|
30
31
|
if (!dbConfig.database) {
|
|
31
32
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPGAsync.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/getPGAsync.ts"],"names":[],"mappings":"AAYA,iBAAe,UAAU,CAAC,KAAK,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"getPGAsync.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/getPGAsync.ts"],"names":[],"mappings":"AAYA,iBAAe,UAAU,CAAC,KAAK,EAAE,GAAG,gBAyDnC;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -13,7 +13,7 @@ async function getPGAsync(param) {
|
|
|
13
13
|
const dbListParams = dblist.find((el) => el.key === param?.key) ||
|
|
14
14
|
dblist.find((el) => el.database === (param?.db || param?.database || param));
|
|
15
15
|
const { user, password, host, port, db, database, name: origin, statement_timeout: timeout, // explicit
|
|
16
|
-
|
|
16
|
+
connectionTimeoutMillis: connectionTimeout, } = dbListParams ??
|
|
17
17
|
(typeof param === "string" ? getDBParams(param) : param || {});
|
|
18
18
|
const name = origin || db || database || param || "client";
|
|
19
19
|
if (pgClients[name]?.tlist)
|
|
@@ -25,6 +25,7 @@ async function getPGAsync(param) {
|
|
|
25
25
|
port: port || config.pg?.port,
|
|
26
26
|
database: db || database || config.pg?.db || config.pg?.database,
|
|
27
27
|
statement_timeout: timeout || config.pg?.statement_timeout || 10000,
|
|
28
|
+
connectionTimeoutMillis: connectionTimeout || config.pg?.connectionTimeoutMillis || 5000,
|
|
28
29
|
};
|
|
29
30
|
if (!dbConfig.database) {
|
|
30
31
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AASpB,iBAAe,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/pg/funcs/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AASpB,iBAAe,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,iBA2MlC;AAGD,eAAe,IAAI,CAAC"}
|
|
@@ -8,6 +8,13 @@ async function init(client) {
|
|
|
8
8
|
if (!client?.options?.database) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
|
+
try {
|
|
12
|
+
await client.connect();
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
console.error("Error connecting to PostgreSQL:", client?.options?.database, err.message);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
11
18
|
const { pgType, pk } = await client
|
|
12
19
|
.query(`SELECT
|
|
13
20
|
(
|
|
@@ -52,9 +59,10 @@ async function init(client) {
|
|
|
52
59
|
FROM
|
|
53
60
|
pg_class
|
|
54
61
|
WHERE
|
|
55
|
-
relkind IN ('r', 'v')`)
|
|
62
|
+
relkind IN ('r', 'v', 'm')`)
|
|
56
63
|
.then((d) => d.rows[0].tlist);
|
|
57
|
-
const
|
|
64
|
+
const rows = await client
|
|
65
|
+
.query(`SELECT
|
|
58
66
|
(
|
|
59
67
|
SELECT
|
|
60
68
|
nspname
|
|
@@ -67,7 +75,8 @@ async function init(client) {
|
|
|
67
75
|
FROM
|
|
68
76
|
pg_class
|
|
69
77
|
WHERE
|
|
70
|
-
relkind IN ('r', 'v')`)
|
|
78
|
+
relkind IN ('r', 'v', 'm')`)
|
|
79
|
+
.then((el) => el.rows || []);
|
|
71
80
|
const relkinds = rows.reduce((acc, curr) => Object.assign(acc, { [curr.tname]: curr.relkind }), {});
|
|
72
81
|
async function query(q, args = []) {
|
|
73
82
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPolicy.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/policy/funcs/checkPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAKhC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"checkPolicy.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/policy/funcs/checkPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAKhC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,oSAmL5E"}
|
|
@@ -77,7 +77,9 @@ export default function checkPolicy(req, reply) {
|
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
79
79
|
// ! sql injection
|
|
80
|
-
const stopWords = block.filter((el) => path.includes(el)
|
|
80
|
+
const stopWords = block.filter((el) => path.includes(el) ||
|
|
81
|
+
JSON.stringify(req.body || {}).includes(el) ||
|
|
82
|
+
JSON.stringify(query || {}).includes(el));
|
|
81
83
|
if (stopWords?.length) {
|
|
82
84
|
logger.file("injection/sql", {
|
|
83
85
|
path,
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAgB5C,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY;;;GAsKjE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { applyHook, getAccess, getTemplate, checkXSS, dataInsert, getToken, config, pgClients, logger, validateData, } from "../../../../utils.js";
|
|
1
|
+
import { applyHook, getAccess, getTemplate, checkXSS, checkSQL, dataInsert, getToken, config, pgClients, logger, validateData, } from "../../../../utils.js";
|
|
2
2
|
export default async function insert(req, reply) {
|
|
3
3
|
const { pg = pgClients.client, user = {}, params = {}, body = {}, headers = {}, } = req || {};
|
|
4
4
|
if (!user) {
|
|
@@ -62,7 +62,7 @@ export default async function insert(req, reply) {
|
|
|
62
62
|
}
|
|
63
63
|
const fieldCheck = validateData({ body, schema });
|
|
64
64
|
if (fieldCheck.error) {
|
|
65
|
-
logger.file("injection/
|
|
65
|
+
logger.file("injection/formdata", {
|
|
66
66
|
table,
|
|
67
67
|
form: form || loadTemplate?.form,
|
|
68
68
|
uid: user?.uid,
|
|
@@ -72,6 +72,18 @@ export default async function insert(req, reply) {
|
|
|
72
72
|
.status(409)
|
|
73
73
|
.send("Дані не пройшли валідацію. Приберіть некоректні дані та спробуйте ще раз");
|
|
74
74
|
}
|
|
75
|
+
const sqlCheck = checkSQL({ body, schema });
|
|
76
|
+
if (sqlCheck.error) {
|
|
77
|
+
logger.file("injection/sql", {
|
|
78
|
+
table,
|
|
79
|
+
form: form || loadTemplate?.form,
|
|
80
|
+
uid: user?.uid,
|
|
81
|
+
...sqlCheck,
|
|
82
|
+
});
|
|
83
|
+
return reply
|
|
84
|
+
.status(409)
|
|
85
|
+
.send("Дані містять заборонені sql символи. Приберіть їх та спробуйте ще раз");
|
|
86
|
+
}
|
|
75
87
|
if (![add, table].includes("admin.users")) {
|
|
76
88
|
Object.assign(body, { uid: user?.uid, editor_id: user?.uid });
|
|
77
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../../server/routes/crud/controllers/update.ts"],"names":[],"mappings":"AAeA,wBAA8B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAsLxD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pgClients, applyHook, getAccess, getTemplate, checkXSS, dataUpdate, logger, getToken, validateData, } from "../../../../utils.js";
|
|
1
|
+
import { pgClients, applyHook, getAccess, getTemplate, checkXSS, checkSQL, dataUpdate, logger, getToken, validateData, } from "../../../../utils.js";
|
|
2
2
|
import config from "../../../../config.js";
|
|
3
3
|
import insert from "./insert.js";
|
|
4
4
|
export default async function update(req, reply) {
|
|
@@ -75,7 +75,7 @@ export default async function update(req, reply) {
|
|
|
75
75
|
}
|
|
76
76
|
const fieldCheck = validateData({ body, schema });
|
|
77
77
|
if (fieldCheck.error) {
|
|
78
|
-
logger.file("injection/
|
|
78
|
+
logger.file("injection/formdata", {
|
|
79
79
|
table,
|
|
80
80
|
form: form || loadTemplate?.form,
|
|
81
81
|
uid: user?.uid,
|
|
@@ -85,6 +85,18 @@ export default async function update(req, reply) {
|
|
|
85
85
|
.status(409)
|
|
86
86
|
.send("Дані не пройшли валідацію. Приберіть некоректні дані та спробуйте ще раз");
|
|
87
87
|
}
|
|
88
|
+
const sqlCheck = checkSQL({ body, schema });
|
|
89
|
+
if (sqlCheck.error) {
|
|
90
|
+
logger.file("injection/sql", {
|
|
91
|
+
table,
|
|
92
|
+
form: form || loadTemplate?.form,
|
|
93
|
+
uid: user?.uid,
|
|
94
|
+
...sqlCheck,
|
|
95
|
+
});
|
|
96
|
+
return reply
|
|
97
|
+
.status(409)
|
|
98
|
+
.send("Дані містять заборонені sql символи. Приберіть їх та спробуйте ще раз");
|
|
99
|
+
}
|
|
88
100
|
if (tokenData?.obj) {
|
|
89
101
|
const objData = tokenData.obj?.split("#").reduce((p, el) => ({
|
|
90
102
|
...p,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFormByTable.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/getFormByTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAc5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,IAAS,EACT,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CACvB,EACD,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"getFormByTable.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/getFormByTable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAc5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,IAAS,EACT,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CACvB,EACD,KAAK,EAAE,YAAY,gBAsKpB"}
|
|
@@ -23,10 +23,9 @@ export default async function getForm({ pg = pgClients.client, params, user = {}
|
|
|
23
23
|
}
|
|
24
24
|
const tokenData = (await getToken({ token: params.name, uid: user?.uid, json: 1 })) || {};
|
|
25
25
|
const table = tokenData?.table || hookData?.table || params.name;
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
{};
|
|
26
|
+
const loadTable = (await getTemplate("table", table)) || {};
|
|
27
|
+
const { title = loadTable.ua, description } = loadTable;
|
|
28
|
+
const form = tokenData?.form || hookData?.form || loadTable.form;
|
|
30
29
|
if (!form) {
|
|
31
30
|
// return reply.status(404).send("form not found");
|
|
32
31
|
}
|
|
@@ -52,7 +51,13 @@ export default async function getForm({ pg = pgClients.client, params, user = {}
|
|
|
52
51
|
}), {});
|
|
53
52
|
Object.assign(loadTemplate, { obj });
|
|
54
53
|
}
|
|
55
|
-
const res = {
|
|
54
|
+
const res = {
|
|
55
|
+
mode: "form",
|
|
56
|
+
time: 0,
|
|
57
|
+
meta: { title, description },
|
|
58
|
+
...loadTemplate,
|
|
59
|
+
schema,
|
|
60
|
+
};
|
|
56
61
|
if (user.uid) {
|
|
57
62
|
// form in form addToken
|
|
58
63
|
formatSchema(schema, user, loadTemplate?.obj);
|
package/dist/utils.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ export { default as getMenu } from "./server/routes/menu/controllers/getMenu.js"
|
|
|
34
34
|
export { default as getFilter } from "./server/plugins/table/funcs/getFilter.js";
|
|
35
35
|
export { default as dataInsert } from "./server/plugins/crud/funcs/dataInsert.js";
|
|
36
36
|
export { default as dataUpdate } from "./server/plugins/crud/funcs/dataUpdate.js";
|
|
37
|
+
export { default as dataUpsert } from "./server/plugins/crud/funcs/dataUpsert.js";
|
|
37
38
|
export { default as dataDelete } from "./server/plugins/crud/funcs/dataDelete.js";
|
|
38
39
|
export { default as getInsertQuery } from "./server/plugins/crud/funcs/utils/getInsertQuery.js";
|
|
39
40
|
export { default as getToken } from "./server/plugins/crud/funcs/getToken.js";
|
|
@@ -42,6 +43,7 @@ export { default as getOpt } from "./server/plugins/crud/funcs/getOpt.js";
|
|
|
42
43
|
export { default as setOpt } from "./server/plugins/crud/funcs/setOpt.js";
|
|
43
44
|
export { default as validateData } from "./server/plugins/crud/funcs/validateData.js";
|
|
44
45
|
export { default as checkXSS } from "./server/plugins/policy/funcs/checkXSS.js";
|
|
46
|
+
export { default as checkSQL } from "./server/plugins/policy/funcs/checkSQL.js";
|
|
45
47
|
export { default as addHook } from "./server/plugins/hook/addHook.js";
|
|
46
48
|
export { default as applyHook } from "./server/plugins/hook/applyHook.js";
|
|
47
49
|
export { default as applyHookSync } from "./server/plugins/hook/applyHookSync.js";
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -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
|
@@ -42,6 +42,7 @@ export { default as getFilter } from "./server/plugins/table/funcs/getFilter.js"
|
|
|
42
42
|
// crud
|
|
43
43
|
export { default as dataInsert } from "./server/plugins/crud/funcs/dataInsert.js";
|
|
44
44
|
export { default as dataUpdate } from "./server/plugins/crud/funcs/dataUpdate.js";
|
|
45
|
+
export { default as dataUpsert } from "./server/plugins/crud/funcs/dataUpsert.js";
|
|
45
46
|
export { default as dataDelete } from "./server/plugins/crud/funcs/dataDelete.js";
|
|
46
47
|
export { default as getInsertQuery } from "./server/plugins/crud/funcs/utils/getInsertQuery.js";
|
|
47
48
|
export { default as getToken } from "./server/plugins/crud/funcs/getToken.js";
|
|
@@ -51,6 +52,7 @@ export { default as setOpt } from "./server/plugins/crud/funcs/setOpt.js";
|
|
|
51
52
|
export { default as validateData } from "./server/plugins/crud/funcs/validateData.js";
|
|
52
53
|
// policy
|
|
53
54
|
export { default as checkXSS } from "./server/plugins/policy/funcs/checkXSS.js";
|
|
55
|
+
export { default as checkSQL } from "./server/plugins/policy/funcs/checkSQL.js";
|
|
54
56
|
// hook
|
|
55
57
|
export { default as addHook } from "./server/plugins/hook/addHook.js";
|
|
56
58
|
export { default as applyHook } from "./server/plugins/hook/applyHook.js";
|