@opengis/fastify-table 2.3.6 → 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.js +3 -3
- 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 +2 -4
- package/dist/server/plugins/upload/uploadChunk.d.ts.map +1 -1
- package/dist/server/plugins/upload/uploadChunk.js +9 -8
- 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/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/cron/controllers/cronApi.d.ts.map +1 -1
- package/dist/server/routes/cron/controllers/cronApi.js +3 -4
- 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/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/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/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/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/menu/controllers/getMenu.d.ts.map +1 -1
- package/dist/server/routes/menu/controllers/getMenu.js +2 -1
- 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/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/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/templates/controllers/getTemplate.d.ts.map +1 -1
- package/dist/server/routes/templates/controllers/getTemplate.js +9 -5
- package/dist/server/routes/upload/index.d.ts.map +1 -1
- package/dist/server/routes/upload/index.js +8 -15
- 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/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/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/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
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { ForbiddenError } from "../../../../errors.js";
|
|
1
2
|
import { getOpt, getToken } from "../../../../utils.js";
|
|
2
3
|
export default async function tokenInfo(req, reply) {
|
|
3
4
|
const { params = {}, user } = req;
|
|
4
5
|
if (user.user_type !== "admin") {
|
|
5
|
-
|
|
6
|
+
throw ForbiddenError("access restricted");
|
|
6
7
|
}
|
|
7
8
|
const tokenData = (await getToken({ uid: user.uid, token: params.token })) ||
|
|
8
9
|
(await getOpt(params.token, user.uid));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"getData.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/functions/getData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAwFzD,wBAA8B,OAAO,CACnC,EACE,EAAqB,EACrB,MAAM,EACN,KAAK,EACL,EAAE,EACF,OAAY,EACZ,KAAU,EACV,IAAS,EACT,YAAY,EACZ,YAAY,EACZ,KAAY,EACZ,UAAU,EACV,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,YAAY,EACrB,QAAgB,GACjB,EAAE;IACD,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,MAAM,CAAC,EAAE,YAAY,EACrB,MAAM,CAAC,EAAE,GAAG,gBAq3Bb"}
|
|
@@ -19,6 +19,7 @@ import extraDataGet from "../../../plugins/extra/extraDataGet.js";
|
|
|
19
19
|
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
|
+
import { BadRequestError, ForbiddenError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
|
|
22
23
|
const components = {
|
|
23
24
|
"vs-widget-file": "select 'vs-widget-file' as component, count(*) from crm.files where entity_id=$1 and file_status<>3",
|
|
24
25
|
"vs-widget-comments": "select 'vs-widget-comments' as component, count(*) from crm.communications where entity_id=$1",
|
|
@@ -62,9 +63,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
62
63
|
const checkQuery = (item) => user?.user_type === "superadmin" ? !item.includes("{{uid}}") : true;
|
|
63
64
|
const paramsTable = params?.table || table;
|
|
64
65
|
if (!paramsTable) {
|
|
65
|
-
|
|
66
|
-
.status(400)
|
|
67
|
-
.send({ error: "not enough params: table", code: 400 });
|
|
66
|
+
throw BadRequestError("not enough params: table");
|
|
68
67
|
}
|
|
69
68
|
const hookData = (await applyHook("preData", {
|
|
70
69
|
pg,
|
|
@@ -72,11 +71,12 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
72
71
|
id: params?.id || id,
|
|
73
72
|
user,
|
|
74
73
|
}));
|
|
74
|
+
// hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
|
|
75
75
|
if (hookData?.message && hookData?.status) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return
|
|
76
|
+
if (hookData.status >= 400) {
|
|
77
|
+
throw new Error(hookData.message);
|
|
78
|
+
}
|
|
79
|
+
return hookData.message;
|
|
80
80
|
}
|
|
81
81
|
/* from tableData START */
|
|
82
82
|
const tokenData1 = await getOpt(paramsTable, uid);
|
|
@@ -126,15 +126,18 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
126
126
|
if (query?.sql === "0")
|
|
127
127
|
return loadTable;
|
|
128
128
|
if (!pg) {
|
|
129
|
-
|
|
129
|
+
throw Error("empty pg");
|
|
130
130
|
}
|
|
131
131
|
const pkey = pg.pk?.[resources[paramsTable] || paramsTable] ||
|
|
132
132
|
pg.pk?.[resources[paramsTable] || paramsTable.replace(/"/g, "")] ||
|
|
133
|
-
(await getMeta({
|
|
133
|
+
(await getMeta({
|
|
134
|
+
pg,
|
|
135
|
+
table: resources[paramsTable] || loadTable?.table || paramsTable,
|
|
136
|
+
}))?.pk;
|
|
134
137
|
if (!loadTable &&
|
|
135
138
|
!(tokenData?.table && pg.pk?.[tokenData?.table]) &&
|
|
136
139
|
!(called && pkey)) {
|
|
137
|
-
|
|
140
|
+
throw NotFoundError("template not found");
|
|
138
141
|
}
|
|
139
142
|
const objectId = tokenData?.id || hookData?.id || params?.id || id;
|
|
140
143
|
const { actions = [], query: accessQuery, message: accessMessage, } = actionsParam
|
|
@@ -151,10 +154,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
151
154
|
method,
|
|
152
155
|
}, pg)) || {};
|
|
153
156
|
if (accessMessage) {
|
|
154
|
-
|
|
155
|
-
error: accessMessage,
|
|
156
|
-
code: 403,
|
|
157
|
-
});
|
|
157
|
+
throw ForbiddenError(accessMessage);
|
|
158
158
|
}
|
|
159
159
|
// const body = loadTable || hookData || tokenData;
|
|
160
160
|
const { table: table1, columns = [], sql, cardSql, form, meta, sqlColumns, editable = false, } = loadTable || hookData || tokenData || params || { table };
|
|
@@ -168,10 +168,10 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
168
168
|
!called &&
|
|
169
169
|
!accessQueryParam &&
|
|
170
170
|
!actionsParam) {
|
|
171
|
-
|
|
171
|
+
throw UnauthorizedError("unauthorized");
|
|
172
172
|
}
|
|
173
173
|
if (!ispublic && !actions.includes("view") && !config?.local && !called) {
|
|
174
|
-
|
|
174
|
+
throw ForbiddenError("access restricted");
|
|
175
175
|
}
|
|
176
176
|
const { list: filters = [] } = objectId
|
|
177
177
|
? {}
|
|
@@ -185,9 +185,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
185
185
|
timeArr.push(Date.now());
|
|
186
186
|
if (tableMeta?.view) {
|
|
187
187
|
if (!loadTable?.key && !tokenData?.key) {
|
|
188
|
-
|
|
189
|
-
.status(404)
|
|
190
|
-
.send({ error: `key not found: ${table1}`, code: 404 });
|
|
188
|
+
throw NotFoundError(`key not found: ${table1}`);
|
|
191
189
|
}
|
|
192
190
|
Object.assign(tableMeta, { pk: loadTable?.key || tokenData?.key });
|
|
193
191
|
}
|
|
@@ -204,9 +202,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
204
202
|
Object.assign(col, locales[`${table1 || paramsTable}.${col.name}`] || {});
|
|
205
203
|
});
|
|
206
204
|
if (!pk) {
|
|
207
|
-
|
|
208
|
-
.status(404)
|
|
209
|
-
.send({ error: `table not found: ${table1}`, code: 404 });
|
|
205
|
+
throw NotFoundError(`table not found: ${table1}`);
|
|
210
206
|
}
|
|
211
207
|
const columnList = dbColumns.map((el) => el.name || el).join(",");
|
|
212
208
|
const sqlTable = sql
|
|
@@ -371,9 +367,7 @@ export default async function dataAPI({ pg = pgClients.client, params, table, id
|
|
|
371
367
|
if (!rows.length &&
|
|
372
368
|
headers?.referer?.includes?.("/card/") &&
|
|
373
369
|
headers?.referer?.includes?.(templateName)) {
|
|
374
|
-
|
|
375
|
-
.status(403)
|
|
376
|
-
.send({ error: "access restricted: empty rows", code: 403 });
|
|
370
|
+
throw ForbiddenError("access restricted: empty rows");
|
|
377
371
|
}
|
|
378
372
|
timeArr.push(Date.now());
|
|
379
373
|
if (uid &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTemplate.d.ts","sourceRoot":"","sources":["../../../../../server/routes/templates/controllers/getTemplate.ts"],"names":[],"mappings":"AAyCA,wBAA8B,cAAc,CAAC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"getTemplate.d.ts","sourceRoot":"","sources":["../../../../../server/routes/templates/controllers/getTemplate.ts"],"names":[],"mappings":"AAyCA,wBAA8B,cAAc,CAAC,GAAG,EAAE,GAAG,gBAsDpD"}
|
|
@@ -32,17 +32,21 @@ function formatSchema(schema, user, opt) {
|
|
|
32
32
|
.forEach(parseDataTables);
|
|
33
33
|
}
|
|
34
34
|
export default async function getTemplateApi(req) {
|
|
35
|
-
const { user } = req || {};
|
|
36
|
-
const {
|
|
37
|
-
const { type, name } = params;
|
|
35
|
+
const { params, user } = req || {};
|
|
36
|
+
const { type, name } = params || {};
|
|
38
37
|
const tokenData = (await getToken({ token: name, uid: user?.uid, json: 1 })) || {};
|
|
39
38
|
const hookData = (await applyHook("preTemplate", {
|
|
40
39
|
name: tokenData.name || name,
|
|
41
40
|
type,
|
|
42
41
|
user,
|
|
43
42
|
}));
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
// hooks should throw custom errors instead, this is temp solution to avoid breaking changes in hooks
|
|
44
|
+
if (hookData?.message && hookData?.status) {
|
|
45
|
+
if (hookData.status >= 400) {
|
|
46
|
+
throw new Error(hookData.message);
|
|
47
|
+
}
|
|
48
|
+
return hookData.message;
|
|
49
|
+
}
|
|
46
50
|
const data = await getTemplate(type, hookData?.name || tokenData.form || name);
|
|
47
51
|
if (data && tokenData.obj) {
|
|
48
52
|
const obj = tokenData.obj.split("#").reduce((p, el) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/upload/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/routes/upload/index.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,EAAE,GAAG,QAmGtC"}
|
|
@@ -4,6 +4,7 @@ import { prefix } from "../../plugins/upload/index.js";
|
|
|
4
4
|
import startUpload from "../../plugins/upload/startUpload.js";
|
|
5
5
|
import uploadChunk from "../../plugins/upload/uploadChunk.js";
|
|
6
6
|
import getUploadStatus from "../../plugins/upload/getUploadStatus.js";
|
|
7
|
+
import { BadRequestError, LengthRequiredError } from "../../../errors.js";
|
|
7
8
|
const policy = "L0"; // public
|
|
8
9
|
const tags = ["core", "upload"];
|
|
9
10
|
export default function plugin(app) {
|
|
@@ -13,15 +14,11 @@ export default function plugin(app) {
|
|
|
13
14
|
}, async (req, reply) => {
|
|
14
15
|
const { fileName, size, subdir, id } = req.body || {};
|
|
15
16
|
if (!fileName || !size) {
|
|
16
|
-
|
|
17
|
-
.code(400)
|
|
18
|
-
.send({ error: "fileName and size required", code: 400 });
|
|
17
|
+
throw BadRequestError("fileName and size are required");
|
|
19
18
|
}
|
|
20
19
|
const result = await startUpload({ fileName, size, subdir, id });
|
|
21
|
-
if (result.
|
|
22
|
-
|
|
23
|
-
.status(result.code)
|
|
24
|
-
.send({ error: result.error, code: result.code });
|
|
20
|
+
if (result.error) {
|
|
21
|
+
throw new Error(result.error);
|
|
25
22
|
}
|
|
26
23
|
return result;
|
|
27
24
|
});
|
|
@@ -47,13 +44,11 @@ export default function plugin(app) {
|
|
|
47
44
|
},
|
|
48
45
|
}, async (req, reply) => {
|
|
49
46
|
if (!req.headers["content-range"]) {
|
|
50
|
-
|
|
51
|
-
.status(411)
|
|
52
|
-
.send({ error: "Content-Range required", code: 411 });
|
|
47
|
+
throw LengthRequiredError("Content-Range required");
|
|
53
48
|
}
|
|
54
49
|
const match = req.headers["content-range"].match(/bytes (\d+)-(\d+)\/(\d+)/);
|
|
55
50
|
if (!match) {
|
|
56
|
-
|
|
51
|
+
throw BadRequestError("Invalid Content-Range");
|
|
57
52
|
}
|
|
58
53
|
const offset = parseInt(match[1], 10);
|
|
59
54
|
const end = parseInt(match[2], 10);
|
|
@@ -65,10 +60,8 @@ export default function plugin(app) {
|
|
|
65
60
|
end,
|
|
66
61
|
size,
|
|
67
62
|
});
|
|
68
|
-
if (result.
|
|
69
|
-
|
|
70
|
-
.status(result.code)
|
|
71
|
-
.send({ error: result.error, code: result.code });
|
|
63
|
+
if (result.error) {
|
|
64
|
+
throw new Error(result.error);
|
|
72
65
|
}
|
|
73
66
|
return result;
|
|
74
67
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/addUserCls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"addUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/addUserCls.ts"],"names":[],"mappings":"AAWA,wBAA8B,aAAa,CACzC,EAAE,EAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAC1C,KAAK,EAAE,GAAG,gBAqCX"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UnauthorizedError } from "../../../../errors.js";
|
|
1
2
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
2
3
|
import getSelectMeta from "../../../plugins/table/funcs/getSelectMeta.js";
|
|
3
4
|
import { addUserCls, addCustomCls, editUserCls, getUserCls, } from "../../../plugins/usercls/index.js";
|
|
@@ -5,7 +6,7 @@ export default async function addUserClsApi({ pg = pgClients.client, body, user
|
|
|
5
6
|
const { name, description, alias, data, table } = body;
|
|
6
7
|
const t1 = Date.now();
|
|
7
8
|
if (!user?.uid) {
|
|
8
|
-
|
|
9
|
+
throw UnauthorizedError("unauthorized");
|
|
9
10
|
}
|
|
10
11
|
if (table) {
|
|
11
12
|
await addCustomCls({ name, description, alias, table, uid: user.uid, data }, pg);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/deleteUserCls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deleteUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/deleteUserCls.ts"],"names":[],"mappings":"AAKA,wBAA8B,gBAAgB,CAC5C,EAAE,EAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAC5C,KAAK,EAAE,GAAG,gBAkBX"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UnauthorizedError } from "../../../../errors.js";
|
|
1
2
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
2
3
|
import getSelectMeta from "../../../plugins/table/funcs/getSelectMeta.js";
|
|
3
4
|
import { deleteUserCls } from "../../../plugins/usercls/index.js";
|
|
@@ -5,7 +6,7 @@ export default async function deleteUserClsApi({ pg = pgClients.client, params,
|
|
|
5
6
|
const { name, code } = params;
|
|
6
7
|
const t1 = Date.now();
|
|
7
8
|
if (!user?.uid) {
|
|
8
|
-
|
|
9
|
+
throw UnauthorizedError("unauthorized");
|
|
9
10
|
}
|
|
10
11
|
await getSelectMeta({
|
|
11
12
|
pg,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/editUserCls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/editUserCls.ts"],"names":[],"mappings":"AAWA,wBAA8B,cAAc,CAC1C,EAAE,EAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAClD,KAAK,EAAE,GAAG,gBAsCX"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { UnauthorizedError } from "../../../../errors.js";
|
|
1
2
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
2
3
|
import getSelectMeta from "../../../plugins/table/funcs/getSelectMeta.js";
|
|
3
4
|
import { addUserCls, addCustomCls, editUserCls, getUserCls, } from "../../../plugins/usercls/index.js";
|
|
@@ -6,7 +7,7 @@ export default async function editUserClsApi({ pg = pgClients.client, body, para
|
|
|
6
7
|
const { data, table, description, alias } = body;
|
|
7
8
|
const t1 = Date.now();
|
|
8
9
|
if (!user?.uid) {
|
|
9
|
-
|
|
10
|
+
throw UnauthorizedError("unauthorized");
|
|
10
11
|
}
|
|
11
12
|
if (table) {
|
|
12
13
|
await addCustomCls({ name, data, description, alias, table, uid: user.uid }, pg);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function getUserClsListApi({ query, user, pg }: any
|
|
1
|
+
export default function getUserClsListApi({ query, user, pg, }: any): Promise<any>;
|
|
2
2
|
//# sourceMappingURL=getUserCls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/getUserCls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getUserCls.d.ts","sourceRoot":"","sources":["../../../../../server/routes/usercls/controllers/getUserCls.ts"],"names":[],"mappings":"AASA,wBAA8B,iBAAiB,CAAC,EAC9C,KAAK,EACL,IAAI,EACJ,EAAqB,GACtB,EAAE,GAAG,gBAyBL"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import config from "../../../../config.js";
|
|
2
|
+
import { UnauthorizedError } from "../../../../errors.js";
|
|
2
3
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
3
4
|
import { getUserClsList } from "../../../plugins/usercls/index.js";
|
|
4
5
|
// query.name = cls1,cls2,cls3
|
|
5
6
|
// query.search = substring of cls name
|
|
6
7
|
// data[idx].count - should not depend on either query.name or query.search
|
|
7
|
-
export default async function getUserClsListApi({ query, user, pg = pgClients.client }
|
|
8
|
+
export default async function getUserClsListApi({ query, user, pg = pgClients.client, }) {
|
|
8
9
|
if (!user?.uid && !config.local) {
|
|
9
|
-
|
|
10
|
+
throw UnauthorizedError("unauthorized");
|
|
10
11
|
}
|
|
11
12
|
if (!pg) {
|
|
12
|
-
|
|
13
|
+
throw Error("empty pg");
|
|
13
14
|
}
|
|
14
15
|
const t1 = Date.now();
|
|
15
16
|
const result = await getUserClsList({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.generator.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/code.generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"code.generator.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/code.generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgFzD,wBAA8B,aAAa,CACzC,EACE,EAAqB,EACrB,MAAW,EACX,IAAS,EACT,KAAU,GACX,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;CAC7B,EACD,KAAK,EAAE,YAAY,kBA+GpB"}
|
|
@@ -2,6 +2,7 @@ import getTemplate from "../../../plugins/table/funcs/getTemplate.js";
|
|
|
2
2
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
3
3
|
import getToken from "../../../plugins/crud/funcs/getToken.js";
|
|
4
4
|
import { handlebarsSync } from "../../../../utils.js";
|
|
5
|
+
import { BadRequestError, ForbiddenError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
|
|
5
6
|
function dayOfTheYear(date) {
|
|
6
7
|
const start = new Date(date.getFullYear(), 0, 0);
|
|
7
8
|
const diff = date -
|
|
@@ -63,10 +64,10 @@ export default async function codeGenerator({ pg = pgClients.client, params = {}
|
|
|
63
64
|
const { token, column } = params;
|
|
64
65
|
const data = query.data?.split?.(";") || [];
|
|
65
66
|
if (!token || !column) {
|
|
66
|
-
|
|
67
|
+
throw BadRequestError("not enough params: token / column");
|
|
67
68
|
}
|
|
68
69
|
if (!user?.uid) {
|
|
69
|
-
|
|
70
|
+
throw UnauthorizedError("unauthorized");
|
|
70
71
|
}
|
|
71
72
|
const tokenData = (await getToken({ token, uid: user?.uid, json: 1 })) || {};
|
|
72
73
|
const currentYear = new Date().getFullYear();
|
|
@@ -94,15 +95,15 @@ export default async function codeGenerator({ pg = pgClients.client, params = {}
|
|
|
94
95
|
return reply.status(200).send(result);
|
|
95
96
|
}
|
|
96
97
|
if (!tokenData?.form || !tokenData?.table) {
|
|
97
|
-
|
|
98
|
+
throw new ForbiddenError("token not allow");
|
|
98
99
|
}
|
|
99
100
|
const loadTemplate = await getTemplate("form", tokenData.form);
|
|
100
101
|
const schema = loadTemplate?.schema || loadTemplate;
|
|
101
102
|
if (!schema) {
|
|
102
|
-
|
|
103
|
+
throw NotFoundError("form not found");
|
|
103
104
|
}
|
|
104
105
|
if (!schema?.[column]?.template) {
|
|
105
|
-
|
|
106
|
+
throw BadRequestError("template not specified");
|
|
106
107
|
}
|
|
107
108
|
const columnValue = data
|
|
108
109
|
.find((el) => el.startsWith(column))
|
|
@@ -111,7 +112,7 @@ export default async function codeGenerator({ pg = pgClients.client, params = {}
|
|
|
111
112
|
const loadTable = await getTemplate("table", tokenData.table);
|
|
112
113
|
const table = loadTable?.table || tokenData.table;
|
|
113
114
|
if (!pg.pk?.[table]) {
|
|
114
|
-
|
|
115
|
+
throw NotFoundError("table pk not found");
|
|
115
116
|
}
|
|
116
117
|
const count = pg
|
|
117
118
|
? await pg
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { FastifyReply } from "fastify";
|
|
2
1
|
export default function userTokensAPI({ params, user, }: {
|
|
3
2
|
params: {
|
|
4
3
|
token: string;
|
|
5
4
|
};
|
|
6
5
|
user?: Record<string, any>;
|
|
7
|
-
}
|
|
6
|
+
}): Promise<any>;
|
|
8
7
|
//# sourceMappingURL=user.tokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.tokens.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/user.tokens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user.tokens.d.ts","sourceRoot":"","sources":["../../../../../server/routes/util/controllers/user.tokens.ts"],"names":[],"mappings":"AAeA,wBAA8B,aAAa,CAAC,EAC1C,MAAM,EACN,IAAS,GACV,EAAE;IACD,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,gBA2CA"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { customTokens, userTokens, handlebarsSync, setOpt, getOpt, config, } from "../../../../utils.js";
|
|
2
|
-
|
|
2
|
+
import { BadRequestError, NotFoundError, UnauthorizedError, } from "../../../../errors.js";
|
|
3
|
+
export default async function userTokensAPI({ params, user = {}, }) {
|
|
3
4
|
if (!user?.uid) {
|
|
4
|
-
|
|
5
|
+
throw UnauthorizedError("unauthorized");
|
|
5
6
|
}
|
|
6
7
|
if (!params?.token) {
|
|
7
|
-
|
|
8
|
+
throw BadRequestError("not enough params: token");
|
|
8
9
|
}
|
|
9
10
|
if (!config.redis) {
|
|
10
|
-
|
|
11
|
+
throw new Error("empty redis");
|
|
11
12
|
}
|
|
12
13
|
if (!customTokens[params.token]) {
|
|
13
|
-
|
|
14
|
+
throw NotFoundError("token not found");
|
|
14
15
|
}
|
|
15
16
|
// return from cache
|
|
16
17
|
if (userTokens[user.uid]?.[params.token]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.edit.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/file.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"file.edit.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/file.edit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS5C,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBAsDpE"}
|
|
@@ -2,16 +2,17 @@ import path from "node:path";
|
|
|
2
2
|
import dataUpdate from "../../../plugins/crud/funcs/dataUpdate.js";
|
|
3
3
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
4
4
|
import uploadMultiPart from "../../../plugins/file/uploadMultiPart.js";
|
|
5
|
+
import { BadRequestError, NotFoundError } from "../../../../errors.js";
|
|
5
6
|
export default async function widgetSet(req, reply) {
|
|
6
7
|
const { pg = pgClients.client, headers = {}, user = {}, params = {} } = req;
|
|
7
8
|
if (!params?.id) {
|
|
8
|
-
|
|
9
|
+
throw BadRequestError("not enough params: id");
|
|
9
10
|
}
|
|
10
11
|
if (!pg.pk?.["crm.files"]) {
|
|
11
|
-
|
|
12
|
+
throw NotFoundError("table not found");
|
|
12
13
|
}
|
|
13
14
|
if (headers["content-type"]?.split?.(";")?.shift?.() !== "multipart/form-data") {
|
|
14
|
-
|
|
15
|
+
throw BadRequestError("invalid payload content type");
|
|
15
16
|
}
|
|
16
17
|
const file = await uploadMultiPart(req);
|
|
17
18
|
const extName = path
|
|
@@ -36,7 +37,7 @@ export default async function widgetSet(req, reply) {
|
|
|
36
37
|
uid: user?.uid,
|
|
37
38
|
});
|
|
38
39
|
if (!result?.file_id) {
|
|
39
|
-
|
|
40
|
+
throw NotFoundError("file not found");
|
|
40
41
|
}
|
|
41
42
|
return reply.status(200).send({
|
|
42
43
|
rowCount: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.del.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.del.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"widget.del.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.del.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwB5C;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,kBA+EpE"}
|
|
@@ -2,6 +2,7 @@ import config from "../../../../config.js";
|
|
|
2
2
|
import isFileExists from "../../../plugins/file/isFileExists.js";
|
|
3
3
|
import logChanges from "../../../plugins/crud/funcs/utils/logChanges.js";
|
|
4
4
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
5
|
+
import { BadRequestError, ForbiddenError, UnauthorizedError, } from "../../../../errors.js";
|
|
5
6
|
const isAdmin = (req) => process.env.NODE_ENV === "admin" ||
|
|
6
7
|
config.admin ||
|
|
7
8
|
req?.hostname?.split?.(":")?.shift?.() === config.adminDomain ||
|
|
@@ -33,23 +34,21 @@ async function checkAccess(pg, objectid, id) {
|
|
|
33
34
|
export default async function widgetDel(req, reply) {
|
|
34
35
|
const { pg = pgClients.client, params, user = {}, } = req;
|
|
35
36
|
if (!user?.uid) {
|
|
36
|
-
|
|
37
|
+
throw UnauthorizedError("unauthorized");
|
|
37
38
|
}
|
|
38
39
|
const { type, objectid, id } = params || {};
|
|
39
40
|
if (!objectid) {
|
|
40
|
-
|
|
41
|
+
throw BadRequestError("not enough params: object id");
|
|
41
42
|
}
|
|
42
43
|
if (!id && type !== "reaction") {
|
|
43
|
-
|
|
44
|
+
throw BadRequestError("not enough params: id");
|
|
44
45
|
}
|
|
45
46
|
// force delete db entry if file not exists
|
|
46
47
|
const { exists, uid } = ["file", "gallery"].includes(type)
|
|
47
48
|
? await checkAccess(pg, objectid, id)
|
|
48
49
|
: {};
|
|
49
50
|
if (exists && !isAdmin(req) && uid && user?.uid !== uid) {
|
|
50
|
-
|
|
51
|
-
.status(403)
|
|
52
|
-
.send("access restricted: file exists, not an author");
|
|
51
|
+
throw ForbiddenError("access restricted: file exists, not an author");
|
|
53
52
|
}
|
|
54
53
|
const sqls = {
|
|
55
54
|
comment: `delete from crm.communications where entity_id=$1 and ${isAdmin(req) ? "$2=$2" : "uid=$2"} and communication_id=$3`,
|
|
@@ -67,7 +66,7 @@ export default async function widgetDel(req, reply) {
|
|
|
67
66
|
reaction: "crm.reactions",
|
|
68
67
|
}[type];
|
|
69
68
|
if (!sql || !table) {
|
|
70
|
-
|
|
69
|
+
throw BadRequestError("invalid widget type");
|
|
71
70
|
}
|
|
72
71
|
const { rows = [] } = await pg.query(sql, [objectid, user.uid, id || ""]);
|
|
73
72
|
await logChanges({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.get.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.get.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"widget.get.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.get.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AAEH,wBAA8B,SAAS,CACrC,EAAE,EAAqB,EAAE,IAAS,EAAE,MAAW,EAAE,KAAU,EAAE,EAAE,GAAG,EAClE,KAAK,EAAE,GAAG,gBAyLX"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import getMeta from "../../../plugins/pg/funcs/getMeta.js";
|
|
2
2
|
import getToken from "../../../plugins/crud/funcs/getToken.js";
|
|
3
3
|
import pgClients from "../../../plugins/pg/pgClients.js";
|
|
4
|
+
import { BadRequestError, NotFoundError } from "../../../../errors.js";
|
|
4
5
|
const galleryExtList = [
|
|
5
6
|
"png",
|
|
6
7
|
"svg",
|
|
@@ -34,7 +35,7 @@ export default async function widgetGet({ pg = pgClients.client, user = {}, para
|
|
|
34
35
|
: null;
|
|
35
36
|
const objectid = param ? JSON.parse(param)?.id : params.objectid;
|
|
36
37
|
if (!objectid) {
|
|
37
|
-
|
|
38
|
+
throw BadRequestError("not enough params: id");
|
|
38
39
|
}
|
|
39
40
|
const sqls = {
|
|
40
41
|
comment: pg.pk["admin.users"]
|
|
@@ -86,7 +87,7 @@ export default async function widgetGet({ pg = pgClients.client, user = {}, para
|
|
|
86
87
|
};
|
|
87
88
|
const q = sqls[params.type];
|
|
88
89
|
if (!q) {
|
|
89
|
-
|
|
90
|
+
throw BadRequestError("invalid widget type");
|
|
90
91
|
}
|
|
91
92
|
/* rows */
|
|
92
93
|
const rows = await pg
|
|
@@ -122,7 +123,7 @@ export default async function widgetGet({ pg = pgClients.client, user = {}, para
|
|
|
122
123
|
params.type === "history" &&
|
|
123
124
|
process.env.NODE_ENV !== "test" &&
|
|
124
125
|
!process.env.VITEST) {
|
|
125
|
-
|
|
126
|
+
throw NotFoundError("log table not found");
|
|
126
127
|
}
|
|
127
128
|
const cdateColumn = columns.find((col) => ["cdate", "created_at"].includes(col.name))?.name;
|
|
128
129
|
const editorDateColumn = columns.find((col) => ["editor_date", "updated_at"].includes(col.name))?.name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.set.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.set.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"widget.set.d.ts","sourceRoot":"","sources":["../../../../../server/routes/widget/controllers/widget.set.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAqC5C,wBAA8B,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY;;;;;;GAqHpE"}
|
|
@@ -4,6 +4,7 @@ import dataInsert from "../../../plugins/crud/funcs/dataInsert.js";
|
|
|
4
4
|
import dataUpdate from "../../../plugins/crud/funcs/dataUpdate.js";
|
|
5
5
|
import { applyHook } from "../../../../utils.js";
|
|
6
6
|
import uploadMultiPart from "../../../plugins/file/uploadMultiPart.js";
|
|
7
|
+
import { BadRequestError, NotFoundError } from "../../../../errors.js";
|
|
7
8
|
const tableList = {
|
|
8
9
|
comment: "crm.communications",
|
|
9
10
|
gallery: "crm.files",
|
|
@@ -32,10 +33,10 @@ export default async function widgetSet(req, reply) {
|
|
|
32
33
|
const { pg, params, headers = {}, body = {}, user = {}, } = req;
|
|
33
34
|
const { type, id, objectid } = params || {};
|
|
34
35
|
if (!pkList[type] || !tableList[type]) {
|
|
35
|
-
|
|
36
|
+
throw BadRequestError("param type not valid");
|
|
36
37
|
}
|
|
37
38
|
if (!objectid) {
|
|
38
|
-
|
|
39
|
+
throw BadRequestError("not enough params: id");
|
|
39
40
|
}
|
|
40
41
|
const table = tableList[type];
|
|
41
42
|
// dsadasdad
|
|
@@ -58,7 +59,7 @@ export default async function widgetSet(req, reply) {
|
|
|
58
59
|
entity_id: objectid,
|
|
59
60
|
};
|
|
60
61
|
if (type === "gallery" && !galleryExtList.includes(extName.toLowerCase())) {
|
|
61
|
-
|
|
62
|
+
throw BadRequestError("invalid file extension");
|
|
62
63
|
}
|
|
63
64
|
const { rows = [] } = await dataInsert({
|
|
64
65
|
pg,
|
|
@@ -82,7 +83,7 @@ export default async function widgetSet(req, reply) {
|
|
|
82
83
|
}
|
|
83
84
|
const { pk } = await getMeta({ pg, table });
|
|
84
85
|
if (!pk) {
|
|
85
|
-
|
|
86
|
+
throw NotFoundError("table not found");
|
|
86
87
|
}
|
|
87
88
|
const data = { ...body, uid: user?.uid, entity_id: objectid };
|
|
88
89
|
await applyHook("onWidgetSet", {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengis/fastify-table",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "core-plugins",
|
|
6
6
|
"keywords": [
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"exports": {
|
|
16
16
|
".": "./dist/index.js",
|
|
17
17
|
"./index.js": "./dist/index.js",
|
|
18
|
+
"./errors.js": "./dist/errors.js",
|
|
18
19
|
"./utils.js": "./dist/utils.js",
|
|
19
20
|
"./package.json": "./package.json"
|
|
20
21
|
},
|
|
@@ -62,6 +63,7 @@
|
|
|
62
63
|
"ioredis": "5.10.1",
|
|
63
64
|
"js-yaml": "4.1.1",
|
|
64
65
|
"markdown-it": "14.1.1",
|
|
66
|
+
"minio": "^8.0.7",
|
|
65
67
|
"nodemailer": "8.0.4",
|
|
66
68
|
"otplib": "13.4.0",
|
|
67
69
|
"pg": "8.20.0",
|