@opengis/fastify-table 2.3.5 → 2.4.0
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/errors.d.ts +38 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -9
- package/dist/server/plugins/access/funcs/getAdminAccess.d.ts +1 -4
- package/dist/server/plugins/access/funcs/getAdminAccess.d.ts.map +1 -1
- package/dist/server/plugins/access/funcs/getAdminAccess.js +3 -2
- package/dist/server/plugins/auth/funcs/getQuery.d.ts.map +1 -1
- package/dist/server/plugins/auth/funcs/getQuery.js +2 -1
- package/dist/server/plugins/auth/funcs/loginFile.d.ts +1 -4
- package/dist/server/plugins/auth/funcs/loginFile.d.ts.map +1 -1
- package/dist/server/plugins/auth/funcs/loginFile.js +10 -5
- package/dist/server/plugins/auth/funcs/loginUser.d.ts.map +1 -1
- package/dist/server/plugins/auth/funcs/loginUser.js +25 -18
- package/dist/server/plugins/auth/index.d.ts.map +1 -1
- package/dist/server/plugins/auth/index.js +3 -4
- package/dist/server/plugins/crud/funcs/dataInsert.js +1 -1
- package/dist/server/plugins/extra/extraData.d.ts.map +1 -1
- package/dist/server/plugins/extra/extraData.js +3 -2
- package/dist/server/plugins/extra/extraDataGet.d.ts +1 -4
- package/dist/server/plugins/extra/extraDataGet.d.ts.map +1 -1
- package/dist/server/plugins/extra/extraDataGet.js +4 -6
- package/dist/server/plugins/file/uploadMultiPart.js +1 -1
- package/dist/server/plugins/grpc/utils/html2doc.d.ts +0 -6
- package/dist/server/plugins/grpc/utils/html2doc.d.ts.map +1 -1
- package/dist/server/plugins/grpc/utils/html2doc.js +3 -8
- package/dist/server/plugins/grpc/utils/html2img.d.ts +0 -6
- package/dist/server/plugins/grpc/utils/html2img.d.ts.map +1 -1
- package/dist/server/plugins/grpc/utils/html2img.js +3 -8
- package/dist/server/plugins/grpc/utils/html2pdf.d.ts +0 -6
- package/dist/server/plugins/grpc/utils/html2pdf.d.ts.map +1 -1
- package/dist/server/plugins/grpc/utils/html2pdf.js +7 -12
- package/dist/server/plugins/grpc/utils/mergePdf.d.ts +0 -7
- package/dist/server/plugins/grpc/utils/mergePdf.d.ts.map +1 -1
- package/dist/server/plugins/grpc/utils/mergePdf.js +4 -9
- package/dist/server/plugins/logger/checkUserAccess.d.ts +1 -4
- package/dist/server/plugins/logger/checkUserAccess.d.ts.map +1 -1
- package/dist/server/plugins/logger/checkUserAccess.js +4 -6
- package/dist/server/plugins/logger/errorMessage.d.ts +1 -1
- package/dist/server/plugins/logger/errorMessage.d.ts.map +1 -1
- package/dist/server/plugins/logger/errorMessage.js +7 -8
- package/dist/server/plugins/logger/errorStatus.d.ts.map +1 -1
- package/dist/server/plugins/logger/errorStatus.js +6 -0
- package/dist/server/plugins/logger/index.d.ts +2 -2
- package/dist/server/plugins/logger/index.d.ts.map +1 -1
- package/dist/server/plugins/logger/index.js +16 -18
- package/dist/server/plugins/pg/funcs/getMeta.d.ts.map +1 -1
- package/dist/server/plugins/pg/funcs/getMeta.js +5 -3
- package/dist/server/plugins/policy/funcs/checkJWT.d.ts +0 -9
- package/dist/server/plugins/policy/funcs/checkJWT.d.ts.map +1 -1
- package/dist/server/plugins/policy/funcs/checkJWT.js +6 -5
- package/dist/server/plugins/policy/funcs/checkPermissions.d.ts +1 -4
- package/dist/server/plugins/policy/funcs/checkPermissions.d.ts.map +1 -1
- package/dist/server/plugins/policy/funcs/checkPermissions.js +2 -1
- package/dist/server/plugins/policy/funcs/checkPolicy.d.ts +1 -4
- package/dist/server/plugins/policy/funcs/checkPolicy.d.ts.map +1 -1
- package/dist/server/plugins/policy/funcs/checkPolicy.js +8 -7
- package/dist/server/plugins/policy/index.d.ts.map +1 -1
- package/dist/server/plugins/policy/index.js +2 -11
- package/dist/server/plugins/table/funcs/getFilterSQL/index.d.ts +1 -15
- package/dist/server/plugins/table/funcs/getFilterSQL/index.d.ts.map +1 -1
- package/dist/server/plugins/table/funcs/getFilterSQL/index.js +6 -4
- package/dist/server/plugins/table/funcs/gisIRColumn.d.ts +0 -22
- package/dist/server/plugins/table/funcs/gisIRColumn.d.ts.map +1 -1
- package/dist/server/plugins/table/funcs/gisIRColumn.js +5 -3
- package/dist/server/plugins/upload/index.d.ts.map +1 -1
- package/dist/server/plugins/upload/index.js +7 -0
- package/dist/server/plugins/upload/s3.d.ts +7 -1
- package/dist/server/plugins/upload/s3.d.ts.map +1 -1
- package/dist/server/plugins/upload/s3.js +54 -10
- package/dist/server/plugins/upload/s3minio.d.ts +59 -0
- package/dist/server/plugins/upload/s3minio.d.ts.map +1 -0
- package/dist/server/plugins/upload/s3minio.js +199 -0
- package/dist/server/plugins/upload/startUpload.d.ts.map +1 -1
- package/dist/server/plugins/upload/startUpload.js +16 -8
- package/dist/server/plugins/upload/uploadChunk.d.ts.map +1 -1
- package/dist/server/plugins/upload/uploadChunk.js +14 -9
- package/dist/server/plugins/usercls/index.js +1 -1
- package/dist/server/routes/access/controllers/access.group.d.ts.map +1 -1
- package/dist/server/routes/access/controllers/access.group.js +3 -5
- package/dist/server/routes/access/controllers/access.group.post.d.ts.map +1 -1
- package/dist/server/routes/access/controllers/access.group.post.js +3 -5
- package/dist/server/routes/access/controllers/access.interface.d.ts.map +1 -1
- package/dist/server/routes/access/controllers/access.interface.js +1 -4
- package/dist/server/routes/access/controllers/access.user.d.ts +5 -1
- package/dist/server/routes/access/controllers/access.user.d.ts.map +1 -1
- package/dist/server/routes/access/controllers/access.user.js +4 -5
- package/dist/server/routes/access/controllers/access.user.post.d.ts.map +1 -1
- package/dist/server/routes/access/controllers/access.user.post.js +4 -5
- package/dist/server/routes/access/index.d.ts.map +1 -1
- package/dist/server/routes/access/index.js +10 -6
- package/dist/server/routes/auth/controllers/2factor/providers/totp.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/2factor/providers/totp.js +4 -3
- package/dist/server/routes/auth/controllers/2factor/qrcode.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/2factor/qrcode.js +6 -10
- package/dist/server/routes/auth/controllers/2factor/recovery.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/2factor/recovery.js +14 -23
- package/dist/server/routes/auth/controllers/2factor/reset.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/2factor/reset.js +3 -5
- package/dist/server/routes/auth/controllers/2factor/verify.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/2factor/verify.js +30 -43
- package/dist/server/routes/auth/controllers/core/login.d.ts +1 -4
- package/dist/server/routes/auth/controllers/core/login.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/core/passwordRecovery.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/core/passwordRecovery.js +7 -8
- package/dist/server/routes/auth/controllers/core/registration.d.ts +1 -4
- package/dist/server/routes/auth/controllers/core/registration.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/core/registration.js +10 -24
- package/dist/server/routes/auth/controllers/core/updateUserInfo.d.ts +1 -2
- package/dist/server/routes/auth/controllers/core/updateUserInfo.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/core/updateUserInfo.js +3 -2
- package/dist/server/routes/auth/controllers/euSign/authByData.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/euSign/authByData.js +4 -7
- package/dist/server/routes/auth/controllers/jwt/authorize.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/jwt/authorize.js +6 -9
- package/dist/server/routes/auth/controllers/jwt/token.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/jwt/token.js +9 -12
- package/dist/server/routes/auth/controllers/page/login2faTemplate.d.ts.map +1 -1
- package/dist/server/routes/auth/controllers/page/login2faTemplate.js +3 -2
- package/dist/server/routes/auth/index.d.ts +1 -2
- package/dist/server/routes/auth/index.d.ts.map +1 -1
- package/dist/server/routes/auth/index.js +4 -3
- package/dist/server/routes/cron/controllers/cronApi.d.ts.map +1 -1
- package/dist/server/routes/cron/controllers/cronApi.js +3 -4
- package/dist/server/routes/cron/index.js +1 -1
- package/dist/server/routes/crud/controllers/deleteCrud.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/deleteCrud.js +11 -33
- package/dist/server/routes/crud/controllers/insert.d.ts +1 -1
- package/dist/server/routes/crud/controllers/insert.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/insert.js +17 -31
- package/dist/server/routes/crud/controllers/table.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/table.js +14 -18
- package/dist/server/routes/crud/controllers/update.d.ts.map +1 -1
- package/dist/server/routes/crud/controllers/update.js +16 -28
- package/dist/server/routes/crud/index.d.ts.map +1 -1
- package/dist/server/routes/crud/index.js +14 -4
- package/dist/server/routes/dblist/controllers/setItem.d.ts +0 -6
- package/dist/server/routes/dblist/controllers/setItem.d.ts.map +1 -1
- package/dist/server/routes/dblist/controllers/setItem.js +3 -2
- package/dist/server/routes/dblist/index.d.ts.map +1 -1
- package/dist/server/routes/dblist/index.js +5 -3
- package/dist/server/routes/file/controllers/delete.d.ts +4 -1
- package/dist/server/routes/file/controllers/delete.d.ts.map +1 -1
- package/dist/server/routes/file/controllers/delete.js +8 -8
- package/dist/server/routes/file/controllers/download.d.ts.map +1 -1
- package/dist/server/routes/file/controllers/download.js +5 -8
- package/dist/server/routes/file/controllers/export.d.ts.map +1 -1
- package/dist/server/routes/file/controllers/export.js +8 -8
- package/dist/server/routes/file/controllers/files.d.ts.map +1 -1
- package/dist/server/routes/file/controllers/files.js +6 -8
- package/dist/server/routes/file/controllers/resize.d.ts.map +1 -1
- package/dist/server/routes/file/controllers/resize.js +4 -12
- package/dist/server/routes/file/index.d.ts.map +1 -1
- package/dist/server/routes/file/index.js +10 -7
- package/dist/server/routes/grpc/controllers/file2geojson.d.ts.map +1 -1
- package/dist/server/routes/grpc/controllers/file2geojson.js +7 -7
- package/dist/server/routes/grpc/controllers/filePreview.d.ts.map +1 -1
- package/dist/server/routes/grpc/controllers/filePreview.js +5 -4
- package/dist/server/routes/grpc/index.d.ts.map +1 -1
- package/dist/server/routes/grpc/index.js +3 -2
- package/dist/server/routes/logger/controllers/logger.file.d.ts +1 -1
- package/dist/server/routes/logger/controllers/logger.file.d.ts.map +1 -1
- package/dist/server/routes/logger/controllers/logger.file.js +4 -5
- package/dist/server/routes/logger/controllers/logger.metrics.d.ts.map +1 -1
- package/dist/server/routes/logger/controllers/logger.metrics.js +1 -4
- package/dist/server/routes/logger/index.d.ts.map +1 -1
- package/dist/server/routes/logger/index.js +4 -2
- package/dist/server/routes/menu/controllers/getMenu.d.ts.map +1 -1
- package/dist/server/routes/menu/controllers/getMenu.js +2 -1
- package/dist/server/routes/menu/index.d.ts.map +1 -1
- package/dist/server/routes/menu/index.js +9 -2
- package/dist/server/routes/notifications/controllers/addUserNotification.d.ts +1 -2
- package/dist/server/routes/notifications/controllers/addUserNotification.d.ts.map +1 -1
- package/dist/server/routes/notifications/controllers/addUserNotification.js +5 -6
- package/dist/server/routes/notifications/controllers/deleteUserNotification.d.ts +1 -2
- package/dist/server/routes/notifications/controllers/deleteUserNotification.d.ts.map +1 -1
- package/dist/server/routes/notifications/controllers/deleteUserNotification.js +5 -6
- package/dist/server/routes/notifications/controllers/editUserNotification.d.ts +1 -2
- package/dist/server/routes/notifications/controllers/editUserNotification.d.ts.map +1 -1
- package/dist/server/routes/notifications/controllers/editUserNotification.js +6 -9
- package/dist/server/routes/notifications/controllers/readNotifications.d.ts +4 -2
- package/dist/server/routes/notifications/controllers/readNotifications.d.ts.map +1 -1
- package/dist/server/routes/notifications/controllers/readNotifications.js +4 -3
- package/dist/server/routes/notifications/controllers/userNotifications.d.ts +5 -2
- package/dist/server/routes/notifications/controllers/userNotifications.d.ts.map +1 -1
- package/dist/server/routes/notifications/controllers/userNotifications.js +4 -5
- package/dist/server/routes/notifications/index.d.ts +1 -2
- package/dist/server/routes/notifications/index.d.ts.map +1 -1
- package/dist/server/routes/notifications/index.js +3 -1
- package/dist/server/routes/properties/controllers/properties.get.d.ts +5 -2
- package/dist/server/routes/properties/controllers/properties.get.d.ts.map +1 -1
- package/dist/server/routes/properties/controllers/properties.get.js +6 -5
- package/dist/server/routes/properties/controllers/properties.post.d.ts +1 -1
- package/dist/server/routes/properties/controllers/properties.post.d.ts.map +1 -1
- package/dist/server/routes/properties/controllers/properties.post.js +7 -6
- package/dist/server/routes/properties/index.d.ts.map +1 -1
- package/dist/server/routes/properties/index.js +4 -7
- package/dist/server/routes/table/controllers/card.d.ts +1 -1
- package/dist/server/routes/table/controllers/card.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/card.js +9 -7
- package/dist/server/routes/table/controllers/cardData.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/cardData.js +4 -6
- package/dist/server/routes/table/controllers/cardTabData.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/cardTabData.js +3 -2
- package/dist/server/routes/table/controllers/dataInfo.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/dataInfo.js +4 -3
- package/dist/server/routes/table/controllers/filter.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/filter.js +3 -2
- package/dist/server/routes/table/controllers/form.d.ts +1 -1
- package/dist/server/routes/table/controllers/form.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/form.js +7 -5
- package/dist/server/routes/table/controllers/getFormByTable.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/getFormByTable.js +12 -12
- package/dist/server/routes/table/controllers/suggest.d.ts +1 -1
- package/dist/server/routes/table/controllers/suggest.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/suggest.js +14 -29
- package/dist/server/routes/table/controllers/tableInfo.d.ts +1 -2
- package/dist/server/routes/table/controllers/tableInfo.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/tableInfo.js +9 -8
- package/dist/server/routes/table/controllers/tokenInfo.d.ts.map +1 -1
- package/dist/server/routes/table/controllers/tokenInfo.js +2 -1
- package/dist/server/routes/table/functions/getData.d.ts.map +1 -1
- package/dist/server/routes/table/functions/getData.js +19 -25
- package/dist/server/routes/table/index.d.ts.map +1 -1
- package/dist/server/routes/table/index.js +15 -13
- package/dist/server/routes/templates/controllers/getTemplate.d.ts.map +1 -1
- package/dist/server/routes/templates/controllers/getTemplate.js +9 -5
- package/dist/server/routes/templates/index.d.ts.map +1 -1
- package/dist/server/routes/templates/index.js +2 -1
- package/dist/server/routes/upload/index.d.ts.map +1 -1
- package/dist/server/routes/upload/index.js +31 -20
- package/dist/server/routes/usercls/controllers/addUserCls.d.ts.map +1 -1
- package/dist/server/routes/usercls/controllers/addUserCls.js +2 -1
- package/dist/server/routes/usercls/controllers/deleteUserCls.d.ts.map +1 -1
- package/dist/server/routes/usercls/controllers/deleteUserCls.js +2 -1
- package/dist/server/routes/usercls/controllers/editUserCls.d.ts.map +1 -1
- package/dist/server/routes/usercls/controllers/editUserCls.js +2 -1
- package/dist/server/routes/usercls/controllers/getUserCls.d.ts +1 -1
- package/dist/server/routes/usercls/controllers/getUserCls.d.ts.map +1 -1
- package/dist/server/routes/usercls/controllers/getUserCls.js +4 -3
- package/dist/server/routes/usercls/index.d.ts.map +1 -1
- package/dist/server/routes/usercls/index.js +12 -5
- package/dist/server/routes/util/controllers/api.list.d.ts +19 -0
- package/dist/server/routes/util/controllers/api.list.d.ts.map +1 -0
- package/dist/server/routes/util/controllers/api.list.js +58 -0
- package/dist/server/routes/util/controllers/code.generator.d.ts.map +1 -1
- package/dist/server/routes/util/controllers/code.generator.js +7 -6
- package/dist/server/routes/util/controllers/user.tokens.d.ts +1 -2
- package/dist/server/routes/util/controllers/user.tokens.d.ts.map +1 -1
- package/dist/server/routes/util/controllers/user.tokens.js +6 -5
- package/dist/server/routes/util/index.d.ts.map +1 -1
- package/dist/server/routes/util/index.js +8 -7
- package/dist/server/routes/widget/controllers/file.edit.d.ts.map +1 -1
- package/dist/server/routes/widget/controllers/file.edit.js +5 -4
- package/dist/server/routes/widget/controllers/widget.del.d.ts.map +1 -1
- package/dist/server/routes/widget/controllers/widget.del.js +6 -7
- package/dist/server/routes/widget/controllers/widget.get.d.ts.map +1 -1
- package/dist/server/routes/widget/controllers/widget.get.js +4 -3
- package/dist/server/routes/widget/controllers/widget.set.d.ts.map +1 -1
- package/dist/server/routes/widget/controllers/widget.set.js +5 -4
- package/dist/server/routes/widget/index.d.ts.map +1 -1
- package/dist/server/routes/widget/index.js +3 -2
- package/package.json +3 -1
- package/dist/module/core/cls/constraint_type.json +0 -14
- package/dist/module/core/cls/constraint_type_table.json +0 -18
- package/dist/server/migrations/oauth.sql.sql +0 -77
- package/dist/server/plugins/auth/funcs/getUserPermissions.d.ts +0 -2
- package/dist/server/plugins/auth/funcs/getUserPermissions.d.ts.map +0 -1
- package/dist/server/plugins/auth/funcs/getUserPermissions.js +0 -24
- package/dist/server/plugins/auth/onRequest.d.ts +0 -4
- package/dist/server/plugins/auth/onRequest.d.ts.map +0 -1
- package/dist/server/plugins/auth/onRequest.js +0 -104
- package/dist/server/plugins/migration/index.d.ts +0 -3
- package/dist/server/plugins/migration/index.d.ts.map +0 -1
- package/dist/server/plugins/migration/index.js +0 -5
- package/dist/server/plugins/policy/funcs/checkAuth.d.ts +0 -4
- package/dist/server/plugins/policy/funcs/checkAuth.d.ts.map +0 -1
- package/dist/server/plugins/policy/funcs/checkAuth.js +0 -104
- package/dist/server/routes/access/controllers/access.resources.d.ts +0 -6
- package/dist/server/routes/access/controllers/access.resources.d.ts.map +0 -1
- package/dist/server/routes/access/controllers/access.resources.js +0 -14
- package/dist/server/routes/access/controllers/resources.d.ts +0 -11
- package/dist/server/routes/access/controllers/resources.d.ts.map +0 -1
- package/dist/server/routes/access/controllers/resources.js +0 -14
- package/dist/server/routes/access/functions/resources.d.ts +0 -6
- package/dist/server/routes/access/functions/resources.d.ts.map +0 -1
- package/dist/server/routes/access/functions/resources.js +0 -11
- package/dist/server/types/errors.d.ts +0 -14
- package/dist/server/types/errors.d.ts.map +0 -1
- package/dist/server/types/errors.js +0 -4
|
@@ -12,13 +12,23 @@ const tableSchema = {
|
|
|
12
12
|
},
|
|
13
13
|
};
|
|
14
14
|
const policy = "L0";
|
|
15
|
+
const tags = ["core", "crud"];
|
|
15
16
|
function plugin(app, opt = {}) {
|
|
16
|
-
app.put("/table/:table/:id?", {
|
|
17
|
+
app.put("/table/:table/:id?", {
|
|
18
|
+
config: { tags, policy, description: "Edit table data" },
|
|
19
|
+
schema: tableSchema,
|
|
20
|
+
}, update);
|
|
17
21
|
app.delete("/table/:table/:id?", {
|
|
18
|
-
config: { policy, description: "Delete table data" },
|
|
22
|
+
config: { tags, policy, description: "Delete table data" },
|
|
19
23
|
schema: tableSchema,
|
|
20
24
|
}, deleteCrud);
|
|
21
|
-
app.post("/table/:table/:id?", {
|
|
22
|
-
|
|
25
|
+
app.post("/table/:table/:id?", {
|
|
26
|
+
config: { tags, policy, description: "Add table data" },
|
|
27
|
+
schema: tableSchema,
|
|
28
|
+
}, insert);
|
|
29
|
+
app.get("/table/:table/:id?", {
|
|
30
|
+
config: { tags, policy, description: "Get table data" },
|
|
31
|
+
schema: tableSchema,
|
|
32
|
+
}, table);
|
|
23
33
|
}
|
|
24
34
|
export default plugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setItem.d.ts","sourceRoot":"","sources":["../../../../../server/routes/dblist/controllers/setItem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setItem.d.ts","sourceRoot":"","sources":["../../../../../server/routes/dblist/controllers/setItem.ts"],"names":[],"mappings":"AAKA,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG;;GAuB7C"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { BadRequestError } from "../../../../errors.js";
|
|
1
2
|
import { config, dblist, getRedis } from "../../../../utils.js";
|
|
2
3
|
const rclient = getRedis();
|
|
3
4
|
export default async function setItem(req) {
|
|
4
5
|
const { params = {} } = req;
|
|
5
6
|
const { id } = params;
|
|
6
7
|
if (!id) {
|
|
7
|
-
|
|
8
|
+
throw BadRequestError("not enough params: id");
|
|
8
9
|
}
|
|
9
10
|
const current = dblist.find((el) => [el.id, el.key].includes(id));
|
|
10
11
|
if (!current?.database) {
|
|
11
|
-
|
|
12
|
+
throw BadRequestError("invalid param id");
|
|
12
13
|
}
|
|
13
14
|
const uid = req.session?.passport?.user?.uid || // login db
|
|
14
15
|
req.session?.passport?.user?.username || // login passwd
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/dblist/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/dblist/index.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,EAAE,GAAG,QAiBtC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import readItemList from "./controllers/readItems.js";
|
|
2
2
|
import setItem from "./controllers/setItem.js";
|
|
3
|
-
const
|
|
3
|
+
const params = {
|
|
4
|
+
config: { policy: "L0", tags: ["core", "dblist"] },
|
|
5
|
+
};
|
|
4
6
|
export default function plugin(app) {
|
|
5
7
|
if (!app.hasRoute({ method: "GET", url: "/db-list" })) {
|
|
6
8
|
app.route({
|
|
7
9
|
method: "GET",
|
|
8
10
|
url: "/db-list",
|
|
9
|
-
|
|
11
|
+
...params,
|
|
10
12
|
handler: readItemList,
|
|
11
13
|
});
|
|
12
14
|
}
|
|
@@ -14,7 +16,7 @@ export default function plugin(app) {
|
|
|
14
16
|
app.route({
|
|
15
17
|
method: "GET",
|
|
16
18
|
url: "/db-list/:id",
|
|
17
|
-
|
|
19
|
+
...params,
|
|
18
20
|
handler: setItem,
|
|
19
21
|
});
|
|
20
22
|
}
|
|
@@ -16,5 +16,8 @@
|
|
|
16
16
|
* @returns {Object} headers Заголовки HTTP
|
|
17
17
|
* @returns {String} message Повідомлення про успішне виконання або об'єкт з параметрами
|
|
18
18
|
*/
|
|
19
|
-
export default function deleteFileAPI(req: any
|
|
19
|
+
export default function deleteFileAPI(req: any): Promise<{
|
|
20
|
+
id: any;
|
|
21
|
+
filepath: any;
|
|
22
|
+
}>;
|
|
20
23
|
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/delete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/delete.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,aAAa,CAAC,GAAG,EAAE,GAAG;;;GAmFnD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NotFoundError } from "../../../../errors.js";
|
|
2
|
+
import { dataUpdate, logger, pgClients } from "../../../../utils.js";
|
|
2
3
|
/**
|
|
3
4
|
* Апі використовується для видалення файлів за допомогою fs або s3
|
|
4
5
|
*
|
|
@@ -17,11 +18,11 @@ import { config, dataUpdate, logger, pgClients } from "../../../../utils.js";
|
|
|
17
18
|
* @returns {Object} headers Заголовки HTTP
|
|
18
19
|
* @returns {String} message Повідомлення про успішне виконання або об'єкт з параметрами
|
|
19
20
|
*/
|
|
20
|
-
export default async function deleteFileAPI(req
|
|
21
|
+
export default async function deleteFileAPI(req) {
|
|
21
22
|
const { pg = pgClients.client, params = {}, user = {} } = req;
|
|
22
23
|
const { uid, user_rnokpp: rnokpp } = user;
|
|
23
24
|
if (!params["*"]) {
|
|
24
|
-
|
|
25
|
+
throw NotFoundError("file not found");
|
|
25
26
|
}
|
|
26
27
|
const filename = params["*"].startsWith("/") || /^[0-9]+$/.test(params["*"])
|
|
27
28
|
? params["*"]
|
|
@@ -35,7 +36,7 @@ export default async function deleteFileAPI(req, reply) {
|
|
|
35
36
|
uid,
|
|
36
37
|
rnokpp,
|
|
37
38
|
});
|
|
38
|
-
|
|
39
|
+
throw NotFoundError("file not found");
|
|
39
40
|
}
|
|
40
41
|
if (filename.includes("..")) {
|
|
41
42
|
logger.file("file", {
|
|
@@ -46,7 +47,7 @@ export default async function deleteFileAPI(req, reply) {
|
|
|
46
47
|
uid,
|
|
47
48
|
rnokpp,
|
|
48
49
|
});
|
|
49
|
-
|
|
50
|
+
throw NotFoundError("file not found");
|
|
50
51
|
}
|
|
51
52
|
try {
|
|
52
53
|
const result = await pg
|
|
@@ -68,7 +69,7 @@ export default async function deleteFileAPI(req, reply) {
|
|
|
68
69
|
uid,
|
|
69
70
|
rnokpp,
|
|
70
71
|
});
|
|
71
|
-
|
|
72
|
+
throw NotFoundError("file not found");
|
|
72
73
|
}
|
|
73
74
|
const message = { id: res.file_id, filepath: res.file_path };
|
|
74
75
|
logger.file("file/delete", {
|
|
@@ -86,7 +87,6 @@ export default async function deleteFileAPI(req, reply) {
|
|
|
86
87
|
uid,
|
|
87
88
|
rnokpp,
|
|
88
89
|
});
|
|
89
|
-
|
|
90
|
-
return reply.status(500).send({ error, code: 500 });
|
|
90
|
+
throw err;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/download.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/download.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAqB5C;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAA8B,QAAQ,CACpC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EACrB,KAAK,EAAE,YAAY,gBA4CpB"}
|
|
@@ -3,6 +3,7 @@ import providers from "../../../plugins/file/providers/index.js";
|
|
|
3
3
|
import getMimeType from "../../../plugins/file/providers/mime/index.js";
|
|
4
4
|
import logger from "../../../plugins/logger/getLogger.js";
|
|
5
5
|
import applyHook from "../../../plugins/hook/applyHook.js";
|
|
6
|
+
import { BadRequestError, ForbiddenError, NotFoundError, } from "../../../../errors.js";
|
|
6
7
|
const { downloadFile } = providers();
|
|
7
8
|
/* const allowedPublicDirs = [
|
|
8
9
|
'upload', 'page', 'site', 'maps', 'tmp', 'uploads', 'site_slider', 'module', 'product', 'image', 'geo_works_file',
|
|
@@ -26,18 +27,16 @@ const { downloadFile } = providers();
|
|
|
26
27
|
*/
|
|
27
28
|
export default async function download({ params, user }, reply) {
|
|
28
29
|
if (!params?.["*"]) {
|
|
29
|
-
|
|
30
|
+
throw BadRequestError("not enough params");
|
|
30
31
|
}
|
|
31
32
|
const filename = params["*"].startsWith("/")
|
|
32
33
|
? params["*"].slice(1)
|
|
33
34
|
: params["*"];
|
|
34
35
|
if (!filename) {
|
|
35
|
-
|
|
36
|
-
.status(400)
|
|
37
|
-
.send({ error: "required param 'filename'", code: 400 });
|
|
36
|
+
throw BadRequestError("required param 'filename'");
|
|
38
37
|
}
|
|
39
38
|
if (filename.includes?.("../")) {
|
|
40
|
-
|
|
39
|
+
throw ForbiddenError("invalid characters detected");
|
|
41
40
|
}
|
|
42
41
|
const filepath = filename.startsWith("files/")
|
|
43
42
|
? filename
|
|
@@ -51,9 +50,7 @@ export default async function download({ params, user }, reply) {
|
|
|
51
50
|
return hookData;
|
|
52
51
|
const fileStream = await downloadFile(filepath);
|
|
53
52
|
if (!fileStream) {
|
|
54
|
-
|
|
55
|
-
.status(404)
|
|
56
|
-
.send({ error: `Файл не знайдено - ${filename}`, code: 404 });
|
|
53
|
+
throw NotFoundError(`Файл не знайдено - ${filename}`);
|
|
57
54
|
}
|
|
58
55
|
const headers = {
|
|
59
56
|
"Content-Disposition": `attachment; filename=${path.basename(filename)}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAiCzD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,OAAO,EACP,IAAI,EACJ,OAAO,EAAE,QAAQ,EACjB,GAAG,EACH,KAAU,EACV,IAAkB,EAClB,QAAQ,EACR,UAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,KAAK,EAAE,YAAY,gBAiZpB"}
|
|
@@ -21,6 +21,7 @@ import jsonToCsv from "./utils/jsonToCsv.js";
|
|
|
21
21
|
import formatResult from "./utils/formatResult.js";
|
|
22
22
|
import jsonlToJsonFile from "./utils/jsonlToJsonFile.js";
|
|
23
23
|
import pubsub from "./utils/pubsub.js";
|
|
24
|
+
import { BadRequestError, NotFoundError } from "../../../../errors.js";
|
|
24
25
|
const startStreamWithTotal = 10000;
|
|
25
26
|
const rootDir = getFolder(config, "local");
|
|
26
27
|
/**
|
|
@@ -47,10 +48,10 @@ const rootDir = getFolder(config, "local");
|
|
|
47
48
|
export default async function exportTable({ pg = pgClients.client, headers, user, columns: columns1, cls, query = {}, host = "127.0.0.1", tableSql, sourceName, }, reply) {
|
|
48
49
|
const { id, cols, search, format = "json", table, filter = "empty", nocache, formatAnswer = "file", sql, stream, } = query;
|
|
49
50
|
if (!table && !tableSql) {
|
|
50
|
-
|
|
51
|
+
throw BadRequestError("not enough params: table");
|
|
51
52
|
}
|
|
52
53
|
if (!["csv", "xlsx", "json", "geojson"].includes(format)) {
|
|
53
|
-
|
|
54
|
+
throw BadRequestError("invalid params: format");
|
|
54
55
|
}
|
|
55
56
|
const slice = query.slice ? Math.min(+query.slice || 16, 1000) : null;
|
|
56
57
|
const date = new Date();
|
|
@@ -89,12 +90,10 @@ export default async function exportTable({ pg = pgClients.client, headers, user
|
|
|
89
90
|
const meta = await getMeta({ pg, table: loadTable?.table || table });
|
|
90
91
|
const viewSql = await getTemplate("view", loadTable?.table || table);
|
|
91
92
|
if (!meta?.pk && !meta?.view && !tableSql && !viewSql) {
|
|
92
|
-
|
|
93
|
+
throw NotFoundError("table not found");
|
|
93
94
|
}
|
|
94
95
|
if (format === "geojson" && !meta?.geom) {
|
|
95
|
-
|
|
96
|
-
.status(400)
|
|
97
|
-
.send("Ця форма не містить полів геометрії. Виберіть тип, який не потребує геометрії для вивантаження");
|
|
96
|
+
throw BadRequestError("Ця форма не містить полів геометрії. Виберіть тип, який не потребує геометрії для вивантаження");
|
|
98
97
|
}
|
|
99
98
|
const options = {
|
|
100
99
|
pg,
|
|
@@ -266,7 +265,7 @@ export default async function exportTable({ pg = pgClients.client, headers, user
|
|
|
266
265
|
if (res.error) {
|
|
267
266
|
send("finish");
|
|
268
267
|
sendOriginal(res.error, 1);
|
|
269
|
-
|
|
268
|
+
throw new Error(res.error);
|
|
270
269
|
}
|
|
271
270
|
logger.file("export/table", {
|
|
272
271
|
table,
|
|
@@ -317,7 +316,8 @@ export default async function exportTable({ pg = pgClients.client, headers, user
|
|
|
317
316
|
});
|
|
318
317
|
}
|
|
319
318
|
if (resp.error) {
|
|
320
|
-
|
|
319
|
+
send(resp.error, 1);
|
|
320
|
+
throw new Error(resp.error);
|
|
321
321
|
}
|
|
322
322
|
send("finish");
|
|
323
323
|
sendOriginal("Файл успішно сформовано. Натистіть кнопку ще раз для завантаження даних", 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAmB5C;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,OAAO,CACnC,EACE,MAAM,EACN,KAAK,EACL,IAAI,GACL,EAAE;IACD,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,EACD,KAAK,EAAE,YAAY,gBA4DpB"}
|
|
@@ -6,6 +6,7 @@ import config from "../../../../config.js";
|
|
|
6
6
|
import logger from "../../../plugins/logger/getLogger.js";
|
|
7
7
|
import applyHook from "../../../plugins/hook/applyHook.js";
|
|
8
8
|
import providers from "../../../plugins/file/providers/index.js";
|
|
9
|
+
import { BadRequestError, ForbiddenError } from "../../../../errors.js";
|
|
9
10
|
const grayGif = Buffer.from("R0lGODdhAwADAIEAAICAgAAAAAAAAAAAACwAAAAAAwADAAAIBwABCBw4MCAAOw==", "base64");
|
|
10
11
|
/**
|
|
11
12
|
* Апі використовується для отримання різних файлів і можливістю змінювати їх
|
|
@@ -27,19 +28,17 @@ const grayGif = Buffer.from("R0lGODdhAwADAIEAAICAgAAAAAAAAAAAACwAAAAAAwADAAAIBwA
|
|
|
27
28
|
*/
|
|
28
29
|
export default async function getFile({ params, query, user, }, reply) {
|
|
29
30
|
if (!params?.["*"]) {
|
|
30
|
-
|
|
31
|
+
throw BadRequestError("not enough params");
|
|
31
32
|
}
|
|
32
33
|
if (params["*"].includes("../")) {
|
|
33
|
-
|
|
34
|
+
throw ForbiddenError("invalid characters detected");
|
|
34
35
|
}
|
|
35
36
|
const relpath = (params["*"].startsWith("/") ? params["*"].slice(1) : params["*"]).replace(/^files\//g, "") + (params["*"].endsWith("/") ? "index.html" : "");
|
|
36
37
|
if (!relpath) {
|
|
37
|
-
|
|
38
|
-
.status(400)
|
|
39
|
-
.send({ error: "required param 'filename'", code: 400 });
|
|
38
|
+
throw BadRequestError("required param 'filename'");
|
|
40
39
|
}
|
|
41
40
|
if (relpath.includes("../")) {
|
|
42
|
-
|
|
41
|
+
throw ForbiddenError("invalid characters detected");
|
|
43
42
|
}
|
|
44
43
|
const hookData = await applyHook("preFile", { user, relpath, reply });
|
|
45
44
|
if (hookData)
|
|
@@ -55,11 +54,10 @@ export default async function getFile({ params, query, user, }, reply) {
|
|
|
55
54
|
: undefined;
|
|
56
55
|
const { fileExists } = providers({ provider: "fs" });
|
|
57
56
|
const existsFS = await fileExists(filepath);
|
|
58
|
-
return
|
|
57
|
+
return { provider: fp.name, existsS3, existsFS };
|
|
59
58
|
}
|
|
60
59
|
const fileStream = await downloadFile(filepath).catch();
|
|
61
60
|
if (!fileStream) {
|
|
62
|
-
// return reply.status(404).send({ error: "Файл не знайдено", code: 404 });
|
|
63
61
|
return reply.headers({ "Content-Type": "image/gif" }).send(grayGif);
|
|
64
62
|
}
|
|
65
63
|
const headers = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/resize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../../../server/routes/file/controllers/resize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA0C5C;;GAEG;AAEH,wBAA8B,MAAM,CAClC,EACE,KAAK,GACN,EAAE;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH,EACD,KAAK,EAAE,YAAY,kBA2IpB"}
|
|
@@ -8,6 +8,7 @@ isFileExists, getFolder, } from "../../../../utils.js";
|
|
|
8
8
|
import grpc from "../../../plugins/grpc/grpc.js";
|
|
9
9
|
import getMimeType from "../../../plugins/file/providers/mime/index.js";
|
|
10
10
|
import { mkdir } from "node:fs/promises";
|
|
11
|
+
import { BadRequestError } from "../../../../errors.js";
|
|
11
12
|
const defaultWidth = 400;
|
|
12
13
|
const defaultHeight = 240;
|
|
13
14
|
const maxWidth = 2000;
|
|
@@ -30,16 +31,12 @@ export default async function resize({ query, }, reply) {
|
|
|
30
31
|
return reply.headers({ "Content-Type": "image/gif" }).send(transparentGif);
|
|
31
32
|
}
|
|
32
33
|
if (!filepath) {
|
|
33
|
-
|
|
34
|
-
.status(400)
|
|
35
|
-
.send({ error: "not enough query params: filepath", code: 400 });
|
|
34
|
+
throw BadRequestError("not enough query params: filepath");
|
|
36
35
|
}
|
|
37
36
|
const basename = path.basename(filepath);
|
|
38
37
|
const mimeType = getMimeType(filepath);
|
|
39
38
|
if (!mimeType) {
|
|
40
|
-
|
|
41
|
-
.status(400)
|
|
42
|
-
.send({ error: "invalid query params: filepath", code: 400 });
|
|
39
|
+
throw BadRequestError("invalid query params: filepath");
|
|
43
40
|
}
|
|
44
41
|
const resizePath1 = size
|
|
45
42
|
? filepath.replace(basename, `${size}_resized_${basename}`)
|
|
@@ -70,9 +67,6 @@ export default async function resize({ query, }, reply) {
|
|
|
70
67
|
// get File Data
|
|
71
68
|
const fileData = await downloadFile(filepath, { buffer: true });
|
|
72
69
|
if (!fileData?.length) {
|
|
73
|
-
// return reply
|
|
74
|
-
// .status(404)
|
|
75
|
-
// .send({ error: `Файл не знайдено - ${filepath}`, code: 400 });
|
|
76
70
|
return reply.headers({ "Content-Type": "image/gif" }).send(transparentGif);
|
|
77
71
|
}
|
|
78
72
|
const resizeQuality = Math.min(+(quality || 75), 100);
|
|
@@ -82,9 +76,7 @@ export default async function resize({ query, }, reply) {
|
|
|
82
76
|
.concat(w || "", h || "")
|
|
83
77
|
.filter((el) => el && +el > maxWidth);
|
|
84
78
|
if (check.length) {
|
|
85
|
-
|
|
86
|
-
.status(400)
|
|
87
|
-
.send({ error: "resize image size too big", code: 400 });
|
|
79
|
+
throw BadRequestError("resize image size too big");
|
|
88
80
|
}
|
|
89
81
|
const resizeWidth = (h && !w ? +h * ratio : null) ||
|
|
90
82
|
(size?.toLowerCase?.()?.split?.("x")?.[1] &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/file/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/file/index.ts"],"names":[],"mappings":"AAgBA,iBAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAE,GAAQ,QA+BtC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -8,11 +8,14 @@ import exportTable from "./controllers/export.js";
|
|
|
8
8
|
import uploadImage from "./controllers/uploadImage.js";
|
|
9
9
|
import deleteFileAPI from "./controllers/delete.js";
|
|
10
10
|
import { resizeSchema } from "./schema.js";
|
|
11
|
+
const tags = ["core", "file"];
|
|
12
|
+
const publicParams = { config: { tags, policy: "L0" } };
|
|
11
13
|
function plugin(app, opt = {}) {
|
|
12
|
-
app.get("/files/*", { config: { policy: "L0" } }, files);
|
|
14
|
+
app.get("/files/*", { config: { tags, policy: "L0" } }, files);
|
|
13
15
|
if (!app.hasRoute({ method: "GET", url: "/file/resize" })) {
|
|
14
16
|
app.get("/file/resize", {
|
|
15
17
|
config: {
|
|
18
|
+
tags,
|
|
16
19
|
policy: "L0",
|
|
17
20
|
rateLimit: config.rateLimit
|
|
18
21
|
? {
|
|
@@ -24,11 +27,11 @@ function plugin(app, opt = {}) {
|
|
|
24
27
|
schema: resizeSchema,
|
|
25
28
|
}, resize);
|
|
26
29
|
}
|
|
27
|
-
app.get("/api/resize-all", { config: {
|
|
28
|
-
app.post("/file/upload/*",
|
|
29
|
-
app.post("/file/upload-image/*",
|
|
30
|
-
app.get("/file/download/*",
|
|
31
|
-
app.get("/file/delete/*",
|
|
32
|
-
app.get(`/api/export`,
|
|
30
|
+
app.get("/api/resize-all", { config: { tags, role: "admin" }, schema: resizeSchema }, resizeAll);
|
|
31
|
+
app.post("/file/upload/*", publicParams, upload);
|
|
32
|
+
app.post("/file/upload-image/*", publicParams, uploadImage);
|
|
33
|
+
app.get("/file/download/*", publicParams, download);
|
|
34
|
+
app.get("/file/delete/*", publicParams, deleteFileAPI);
|
|
35
|
+
app.get(`/api/export`, publicParams, exportTable);
|
|
33
36
|
}
|
|
34
37
|
export default plugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file2geojson.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/file2geojson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"file2geojson.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/file2geojson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS5C,wBAA8B,YAAY,CACxC,EACE,EAAqB,EACrB,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY,gBA+DpB"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { config, logger, pgClients } from "../../../../utils.js";
|
|
3
3
|
import file2json from "../../../plugins/grpc/file2json.js";
|
|
4
|
+
import { BadRequestError } from "../../../../errors.js";
|
|
4
5
|
export default async function file2geojson({ pg = pgClients.client, body = {}, }, reply) {
|
|
5
6
|
const { file, srid, debug } = body;
|
|
6
7
|
if (!file || !srid) {
|
|
7
|
-
|
|
8
|
+
throw BadRequestError("not enough body params: file or srid");
|
|
8
9
|
}
|
|
9
10
|
const ext = path.extname(file);
|
|
10
11
|
if (![".zip", ".gdb", ".gpkg", ".geojson"].includes(ext)) {
|
|
11
|
-
|
|
12
|
+
throw BadRequestError("Невірний формат файлів");
|
|
12
13
|
}
|
|
13
14
|
const filepath = path.join(config.folder || "", file);
|
|
14
15
|
try {
|
|
15
16
|
const JsonData = await file2json({ filepath, debug });
|
|
16
17
|
if (debug)
|
|
17
18
|
return JsonData;
|
|
18
|
-
// if (JsonData?.features?.length > 1) return { error: 'too many features', status: 400 };
|
|
19
19
|
if (!JsonData?.features?.length &&
|
|
20
20
|
JsonData?.type?.toLowerCase() !== "feature") {
|
|
21
|
-
|
|
21
|
+
throw BadRequestError("invalid file content");
|
|
22
22
|
}
|
|
23
23
|
const JsonArr = JsonData?.features
|
|
24
24
|
? JsonData
|
|
@@ -37,11 +37,11 @@ export default async function file2geojson({ pg = pgClients.client, body = {}, }
|
|
|
37
37
|
)q
|
|
38
38
|
)q
|
|
39
39
|
)q`, [JSON.stringify(JsonArr).replace(/'/g, "''"), srid]);
|
|
40
|
-
return
|
|
40
|
+
return [{ features: [rows.slice(0, 1)] }];
|
|
41
41
|
}
|
|
42
42
|
catch (err) {
|
|
43
43
|
if (err?.detail?.includes("Infinity")) {
|
|
44
|
-
|
|
44
|
+
throw BadRequestError("invalid geometry. Check input SRID");
|
|
45
45
|
}
|
|
46
46
|
logger.file("grpc/file2json", {
|
|
47
47
|
error: err.toString(),
|
|
@@ -49,6 +49,6 @@ export default async function file2geojson({ pg = pgClients.client, body = {}, }
|
|
|
49
49
|
file,
|
|
50
50
|
srid,
|
|
51
51
|
});
|
|
52
|
-
|
|
52
|
+
throw err;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filePreview.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/filePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"filePreview.d.ts","sourceRoot":"","sources":["../../../../../server/routes/grpc/controllers/filePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAiCzD,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE;QACL,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH,EACD,KAAK,EAAE,YAAY,kBAwFpB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import officeWrapper from "../../../plugins/grpc/office2pdf.js";
|
|
3
3
|
import { downloadFile, isFileExists, uploadFile, logger, pgClients, } from "../../../../utils.js";
|
|
4
|
+
import { BadRequestError, NotFoundError, UnsupportedMediaTypeError, } from "../../../../errors.js";
|
|
4
5
|
const { officeToPdf } = officeWrapper();
|
|
5
6
|
const mimeTypes = {
|
|
6
7
|
png: "image/png",
|
|
@@ -16,7 +17,7 @@ const mimeTypes = {
|
|
|
16
17
|
export default async function filePreview({ pg = pgClients.client, query = {}, }, reply) {
|
|
17
18
|
const { id, nocache } = query;
|
|
18
19
|
if (!id) {
|
|
19
|
-
|
|
20
|
+
throw BadRequestError("not enough params: id");
|
|
20
21
|
}
|
|
21
22
|
const filePath = await pg
|
|
22
23
|
.query("select file_path from crm.files where file_id = $1", [
|
|
@@ -28,7 +29,7 @@ export default async function filePreview({ pg = pgClients.client, query = {}, }
|
|
|
28
29
|
error: "File with provided id does not found",
|
|
29
30
|
id,
|
|
30
31
|
});
|
|
31
|
-
|
|
32
|
+
throw NotFoundError("File not found");
|
|
32
33
|
}
|
|
33
34
|
const { base, ext } = path.parse(filePath);
|
|
34
35
|
const fileExt = ext.substring(1).toLowerCase();
|
|
@@ -51,7 +52,7 @@ export default async function filePreview({ pg = pgClients.client, query = {}, }
|
|
|
51
52
|
id,
|
|
52
53
|
filePath,
|
|
53
54
|
});
|
|
54
|
-
|
|
55
|
+
throw NotFoundError("File not found");
|
|
55
56
|
}
|
|
56
57
|
if (!mimeTypes[fileExt] &&
|
|
57
58
|
!["doc", "docx", "ppt", "pptx", "xls", "xlsx", "csv"].includes(fileExt)) {
|
|
@@ -60,7 +61,7 @@ export default async function filePreview({ pg = pgClients.client, query = {}, }
|
|
|
60
61
|
id,
|
|
61
62
|
filePath,
|
|
62
63
|
});
|
|
63
|
-
|
|
64
|
+
throw UnsupportedMediaTypeError("Unsupported file type");
|
|
64
65
|
}
|
|
65
66
|
if (!["doc", "docx", "ppt", "pptx", "xls", "xlsx", "csv"].includes(fileExt)) {
|
|
66
67
|
return reply
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/grpc/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/grpc/index.ts"],"names":[],"mappings":"AAKA,iBAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,QAGnC;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import file2geojson from "./controllers/file2geojson.js";
|
|
2
2
|
import filePreview from "./controllers/filePreview.js";
|
|
3
|
+
const publicParams = { config: { policy: "L0", tags: ["core", "grpc"] } };
|
|
3
4
|
function plugin(app, opts) {
|
|
4
|
-
app.post("/file2geojson",
|
|
5
|
-
app.get("/file-preview",
|
|
5
|
+
app.post("/file2geojson", publicParams, file2geojson);
|
|
6
|
+
app.get("/file-preview", publicParams, filePreview);
|
|
6
7
|
}
|
|
7
8
|
export default plugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.file.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.file.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.file.ts"],"names":[],"mappings":"AAYA;;;;;GAKG;AAEH,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gDAyF5D"}
|
|
@@ -4,6 +4,7 @@ import { createReadStream, existsSync } from "node:fs";
|
|
|
4
4
|
import readline from "node:readline";
|
|
5
5
|
import checkUserAccess from "../../../plugins/logger/checkUserAccess.js";
|
|
6
6
|
import getRootDir from "../../../plugins/logger/getRootDir.js";
|
|
7
|
+
import { BadRequestError, NotFoundError } from "../../../../errors.js";
|
|
7
8
|
const limit = 200000;
|
|
8
9
|
const rootDir = getRootDir();
|
|
9
10
|
/**
|
|
@@ -14,13 +15,11 @@ const rootDir = getRootDir();
|
|
|
14
15
|
*/
|
|
15
16
|
export default async function loggerFile(req, reply) {
|
|
16
17
|
const { params = {}, user = {}, query = {}, originalUrl } = req;
|
|
17
|
-
|
|
18
|
-
if (access?.status !== 200)
|
|
19
|
-
return reply.status(access.status).send(access.message);
|
|
18
|
+
checkUserAccess({ user, token: query.token });
|
|
20
19
|
// absolute / relative path
|
|
21
20
|
const filepath = path.join(rootDir, params["*"] || "");
|
|
22
21
|
if (!existsSync(filepath)) {
|
|
23
|
-
|
|
22
|
+
throw NotFoundError("file not found");
|
|
24
23
|
}
|
|
25
24
|
const stat = await lstat(filepath);
|
|
26
25
|
const isFile = stat.isFile();
|
|
@@ -30,7 +29,7 @@ export default async function loggerFile(req, reply) {
|
|
|
30
29
|
}
|
|
31
30
|
if (query.full && isFile) {
|
|
32
31
|
if (stat.size > 20 * 1000 * 1000) {
|
|
33
|
-
|
|
32
|
+
throw BadRequestError("file size > 20MB");
|
|
34
33
|
}
|
|
35
34
|
const buffer = await readFile(filepath);
|
|
36
35
|
return buffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.metrics.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.metrics.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,wBAA8B,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"logger.metrics.d.ts","sourceRoot":"","sources":["../../../../../server/routes/logger/controllers/logger.metrics.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,wBAA8B,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAc/D"}
|
|
@@ -8,10 +8,7 @@ import loggerSystem from "../../../plugins/metric/loggerSystem.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export default async function loggerMetrics(req, reply) {
|
|
10
10
|
const { pg, user = {}, query = {} } = req;
|
|
11
|
-
|
|
12
|
-
if (access?.status !== 200) {
|
|
13
|
-
return reply.status(access.status).send(access.message);
|
|
14
|
-
}
|
|
11
|
+
checkUserAccess({ user, token: query.token });
|
|
15
12
|
const system = await loggerSystem();
|
|
16
13
|
const dbName = pg?.options?.database;
|
|
17
14
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/logger/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/logger/index.ts"],"names":[],"mappings":"AAoBA,iBAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAE,GAAQ,QAOtC;AAED,eAAe,MAAM,CAAC"}
|