@opengis/fastify-table 2.5.29 → 2.5.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/helper.d.ts.map +1 -1
  2. package/dist/helper.js +8 -3
  3. package/dist/server/migrations/users.sql +2 -1
  4. package/dist/server/plugins/policy/funcs/checkPermissions.d.ts.map +1 -1
  5. package/dist/server/plugins/policy/funcs/checkPermissions.js +16 -3
  6. package/dist/server/plugins/policy/index.d.ts.map +1 -1
  7. package/dist/server/plugins/policy/index.js +20 -3
  8. package/dist/server/routes/access/controllers/access.group.d.ts +1 -2
  9. package/dist/server/routes/access/controllers/access.group.d.ts.map +1 -1
  10. package/dist/server/routes/access/controllers/access.group.js +9 -7
  11. package/dist/server/routes/access/controllers/access.group.post.d.ts +9 -2
  12. package/dist/server/routes/access/controllers/access.group.post.d.ts.map +1 -1
  13. package/dist/server/routes/access/controllers/access.group.post.js +74 -51
  14. package/dist/server/routes/access/controllers/access.interface.d.ts +1 -2
  15. package/dist/server/routes/access/controllers/access.interface.d.ts.map +1 -1
  16. package/dist/server/routes/access/controllers/access.interface.js +11 -9
  17. package/dist/server/routes/access/controllers/access.user.d.ts +1 -1
  18. package/dist/server/routes/access/controllers/access.user.d.ts.map +1 -1
  19. package/dist/server/routes/access/controllers/access.user.js +19 -12
  20. package/dist/server/routes/access/controllers/access.user.post.d.ts +8 -1
  21. package/dist/server/routes/access/controllers/access.user.post.d.ts.map +1 -1
  22. package/dist/server/routes/access/controllers/access.user.post.js +10 -5
  23. package/dist/server/routes/access/index.js +3 -3
  24. package/dist/server/routes/table/controllers/suggest.d.ts.map +1 -1
  25. package/dist/server/routes/table/controllers/suggest.js +32 -1
  26. package/dist/server/routes/table/schema.d.ts +3 -0
  27. package/dist/server/routes/table/schema.d.ts.map +1 -1
  28. package/dist/server/routes/table/schema.js +3 -2
  29. package/dist/utils.d.ts +1 -1
  30. package/dist/utils.d.ts.map +1 -1
  31. package/dist/utils.js +3 -1
  32. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../helper.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAC;AAEvD,QAAA,MAAQ,MAAM,KAAoB,CAAC;AAInC,wBAAsB,KAAK,kBAI1B;AAGD,wBAAsB,QAAQ,kBAW7B;AAED,wBAAsB,KAAK,iBA0B1B;AAED,OAAO,EAEL,MAAM,EACN,MAAM,EACN,SAAS,GACV,CAAC"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../helper.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,QAAA,MAAQ,MAAM,KAAoB,CAAC;AAInC,wBAAsB,KAAK,kBAI1B;AAGD,wBAAsB,QAAQ,kBAW7B;AAED,wBAAsB,KAAK,iBA+B1B;AAED,OAAO,EAEL,MAAM,EACN,MAAM,EACN,SAAS,GACV,CAAC"}
package/dist/helper.js CHANGED
@@ -22,13 +22,18 @@ export async function teardown() {
22
22
  export async function build() {
23
23
  if (!app) {
24
24
  app = Fastify({ logger: false });
25
+ app.addHook("onRequest", async (req) => {
26
+ req.user = req.headers?.uid
27
+ ? {
28
+ uid: req.headers?.uid,
29
+ user_type: req.headers?.user_type || "regular",
30
+ }
31
+ : undefined;
32
+ });
25
33
  app.register(appService, config);
26
34
  app.get("/jwt-scoped", { config: { auth: "user-jwt", scope: "sumdu" } }, (req) => req.headers.authorization);
27
35
  app.get("/jwt-scoped2", { config: { auth: "user-jwt", scope: "dzk" } }, (req) => req.headers.authorization);
28
36
  app.get("/jwt-unscoped", { config: { auth: "user-jwt" } }, (req) => req.headers.authorization);
29
- app.addHook("onRequest", async (req) => {
30
- req.user = req.user || { uid: "1", user_type: "admin" };
31
- });
32
37
  await app.ready(); // ? ensure plugins registered, can not add fastify hooks after app is ready
33
38
  }
34
39
  console.log("server started", process.env.PORT || 3000);
@@ -28,7 +28,8 @@ ALTER TABLE admin.users add column if not exists salt text;
28
28
  ALTER TABLE admin.users add column if not exists cdate timestamp without time zone DEFAULT date_trunc('seconds'::text, now());
29
29
  ALTER TABLE admin.users add column if not exists editor_id text;
30
30
  ALTER TABLE admin.users add column if not exists editor_date timestamp without time zone;
31
- ALTER TABLE admin.users add column if not exists twofa boolean not null DEFAULT true;
31
+ ALTER TABLE admin.users add column if not exists twofa boolean not null DEFAULT false;
32
+ alter table admin.users alter column twofa set default false;
32
33
 
33
34
  ALTER TABLE admin.users add CONSTRAINT admin_user_uid_pkey PRIMARY KEY (uid);
34
35
  ALTER TABLE admin.users add CONSTRAINT admin_user_user_rnokpp UNIQUE (user_rnokpp);
@@ -1 +1 @@
1
- {"version":3,"file":"checkPermissions.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/policy/funcs/checkPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAOhC,wBAA8B,gBAAgB,CAAC,GAAG,EAAE,eAAe,iBA4DlE"}
1
+ {"version":3,"file":"checkPermissions.d.ts","sourceRoot":"","sources":["../../../../../server/plugins/policy/funcs/checkPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,wBAAwB,CAAC;AAQhC,wBAA8B,gBAAgB,CAAC,GAAG,EAAE,eAAe,iBAyElE"}
@@ -1,7 +1,8 @@
1
1
  import logger from "../../logger/getLogger.js";
2
2
  import getUserPermissions from "../../access/funcs/getUserPermissions.js";
3
3
  import pgClients from "../../pg/pgClients.js";
4
- import { ForbiddenError } from "../../../../errors.js";
4
+ import { ForbiddenError, UnauthorizedError } from "../../../../errors.js";
5
+ import getIP from "./getIP.js";
5
6
  export default async function checkPermissions(req) {
6
7
  const { originalUrl: path, query, params, method, routeOptions, pg = pgClients.client, } = req;
7
8
  const user = req.user || req.session?.passport?.user;
@@ -17,6 +18,18 @@ export default async function checkPermissions(req) {
17
18
  if (!permissions?.length) {
18
19
  return null;
19
20
  }
21
+ if (!user?.uid) {
22
+ logger.file("policy/permissions", {
23
+ path,
24
+ method,
25
+ params,
26
+ query,
27
+ body,
28
+ message: "unauthorized: not permitted",
29
+ ip: getIP(req),
30
+ });
31
+ throw UnauthorizedError("unauthorized: not permitted");
32
+ }
20
33
  const userPermissions = await getUserPermissions({ uid: user?.uid, userType: user?.user_type }, pg).then((arr) => arr.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.actions }), {}));
21
34
  const havePermission = permissions?.some(([key, value]) => userPermissions?.[key]?.includes(value)) ?? false;
22
35
  if (!user?.user_type?.includes?.("admin") && !havePermission) {
@@ -26,10 +39,10 @@ export default async function checkPermissions(req) {
26
39
  params,
27
40
  query,
28
41
  body,
29
- message: "access restricted: permissions",
42
+ message: "access restricted: not permitted",
30
43
  uid: user?.uid,
31
44
  });
32
- throw ForbiddenError("access restricted: permissions");
45
+ throw ForbiddenError("access restricted: not permitted");
33
46
  }
34
47
  return null;
35
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/plugins/policy/index.ts"],"names":[],"mappings":"AAOA,iBAAS,MAAM,CAAC,OAAO,EAAE,GAAG,QA+B3B;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/plugins/policy/index.ts"],"names":[],"mappings":"AAWA,iBAAS,MAAM,CAAC,OAAO,EAAE,GAAG,QAkD3B;AAED,eAAe,MAAM,CAAC"}
@@ -1,18 +1,26 @@
1
1
  import config from "../../../config.js";
2
+ import logger from "../logger/getLogger.js";
2
3
  import checkPolicy from "./funcs/checkPolicy.js";
3
4
  import checkTraversal from "./funcs/checkTraversal.js";
4
5
  import checkPermissions from "./funcs/checkPermissions.js";
5
6
  import checkJWT from "./funcs/checkJWT.js";
7
+ import getIP from "./funcs/getIP.js";
8
+ import { ForbiddenError } from "../../../errors.js";
6
9
  function plugin(fastify) {
7
10
  fastify.addHook("preHandler", async (request) => {
8
11
  checkTraversal(request);
9
12
  // ! skip locally, skip tests
10
- if ((process.env.local === "true" || process.env.NODE_ENV === "test") &&
11
- !config.debugAuth &&
12
- request.user?.user_type !== "viewer") {
13
+ if ((process.env.local === "true" ||
14
+ process.env.NODE_ENV === "test" ||
15
+ process.env.VITEST) &&
16
+ !config.debugAuth) {
13
17
  console.log("skipping policy / permissions check", request.url);
14
18
  return null;
15
19
  }
20
+ if (request.user?.user_type === "viewer" && request.method === "GET") {
21
+ console.log("skipping policy / permissions check for viewer", request.url);
22
+ return null;
23
+ }
16
24
  // ! skip non-API Requests, handle with vite/vike
17
25
  const isApi = request.routeOptions?.method &&
18
26
  request.routeOptions?.url &&
@@ -21,6 +29,15 @@ function plugin(fastify) {
21
29
  if (!isApi) {
22
30
  return null;
23
31
  }
32
+ if (request.query?.sql) {
33
+ logger.file("alert", {
34
+ message: "database structure disclosure attempt",
35
+ url: request.url,
36
+ ip: getIP(request),
37
+ uid: request.user?.uid,
38
+ });
39
+ throw ForbiddenError("query.sql not allowed");
40
+ }
24
41
  await checkPermissions(request);
25
42
  const jwt = await checkJWT(request);
26
43
  checkPolicy(request, jwt);
@@ -1,4 +1,3 @@
1
- import { type FastifyReply } from "fastify";
2
1
  import { type ExtendedPG } from "../../../types/core.js";
3
2
  export default function accessGroup({ pg, params, user, }: {
4
3
  pg: ExtendedPG;
@@ -6,7 +5,7 @@ export default function accessGroup({ pg, params, user, }: {
6
5
  id: string;
7
6
  };
8
7
  user: Record<string, any>;
9
- }, reply: FastifyReply): Promise<{
8
+ }): Promise<{
10
9
  routes: any;
11
10
  resources: any;
12
11
  users: any;
@@ -1 +1 @@
1
- {"version":3,"file":"access.group.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKzD,wBAA8B,WAAW,CACvC,EACE,EAAqB,EACrB,MAAM,EACN,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EAED,KAAK,EAAE,YAAY;;;;GAwCpB"}
1
+ {"version":3,"file":"access.group.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AASzD,wBAA8B,WAAW,CAAC,EACxC,EAAqB,EACrB,MAAM,EACN,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;;;;GA0CA"}
@@ -1,14 +1,16 @@
1
- import { pgClients, getAdminAccess } from "../../../../utils.js";
2
- import { BadRequestError } from "../../../../errors.js";
3
- export default async function accessGroup({ pg = pgClients.client, params, user = {}, }, reply) {
1
+ import { pgClients } from "../../../../utils.js";
2
+ import { BadRequestError, ForbiddenError, UnauthorizedError, } from "../../../../errors.js";
3
+ export default async function accessGroup({ pg = pgClients.client, params, user = {}, }) {
4
4
  if (!params?.id) {
5
5
  throw BadRequestError("not enough params: id");
6
6
  }
7
+ if (!user?.uid) {
8
+ throw UnauthorizedError("unauthorized");
9
+ }
7
10
  // restrict access - admin only
8
- await getAdminAccess({
9
- id: params.id,
10
- user,
11
- });
11
+ if (!user.user_type?.includes?.("admin")) {
12
+ throw ForbiddenError("not an admin");
13
+ }
12
14
  const routes = await pg
13
15
  .query(`select a.route_id as path, b.actions from admin.routes a
14
16
  left join admin.role_access b on a.route_id=b.route_id
@@ -1,4 +1,3 @@
1
- import { type FastifyReply } from "fastify";
2
1
  import { type ExtendedPG } from "../../../types/core.js";
3
2
  export default function accessGroupPost({ pg, params, user, body, }: {
4
3
  pg: ExtendedPG;
@@ -7,9 +6,17 @@ export default function accessGroupPost({ pg, params, user, body, }: {
7
6
  };
8
7
  user: Record<string, any>;
9
8
  body: Record<string, any>;
10
- }, reply: FastifyReply): Promise<{
9
+ }): Promise<{
11
10
  routes: any;
12
11
  resources: any;
13
12
  users: any;
13
+ } | {
14
+ id: string;
15
+ routes: any;
16
+ resources?: undefined;
17
+ } | {
18
+ id: string;
19
+ routes: any;
20
+ resources: any;
14
21
  }>;
15
22
  //# sourceMappingURL=access.group.post.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.group.post.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.group.post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,wBAA8B,eAAe,CAC3C,EACE,EAAqB,EACrB,MAAM,EACN,IAAS,EACT,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B,EACD,KAAK,EAAE,YAAY;;;;GA4GpB"}
1
+ {"version":3,"file":"access.group.post.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.group.post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,wBAA8B,eAAe,CAAC,EAC5C,EAAqB,EACrB,MAAM,EACN,IAAS,EACT,IAAS,GACV,EAAE;IACD,EAAE,EAAE,UAAU,CAAC;IACf,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B;;;;;;;;;;;;GA+HA"}
@@ -1,57 +1,80 @@
1
- import { pgClients, getAdminAccess } from "../../../../utils.js";
1
+ import { pgClients } from "../../../../utils.js";
2
+ import { BadRequestError, ForbiddenError, UnauthorizedError, } from "../../../../errors.js";
2
3
  import accessGroup from "./access.group.js";
3
- import { UnauthorizedError } from "../../../../errors.js";
4
- export default async function accessGroupPost({ pg = pgClients.client, params, user = {}, body = {}, }, reply) {
4
+ export default async function accessGroupPost({ pg = pgClients.client, params, user = {}, body = {}, }) {
5
5
  const { id } = params;
6
- if (!user?.uid) {
7
- throw UnauthorizedError("unauthorized");
8
- }
9
- // restrict access - admin only
10
- await getAdminAccess({ id, user });
11
- const { users = [], routes = [] } = body;
12
- if (!routes?.length) {
13
- await pg.query("delete from admin.role_access where role_id=$1", [id]);
14
- if (!users?.length) {
15
- return reply.status(200).send({ id, routes });
6
+ try {
7
+ if (!user?.uid) {
8
+ throw UnauthorizedError("unauthorized");
16
9
  }
17
- }
18
- if (routes?.length) {
19
- const routesDB = await pg
20
- .query('select array_agg(route_id) as "routesDB" from admin.routes where enabled')
21
- .then((el) => el.rows?.[0]?.routesDB || []);
22
- await pg.query("delete from admin.role_access where role_id=$1", [id]);
23
- await Promise.all(routes
24
- .filter((el) => el.path && !routesDB?.includes(el.path))
25
- .map((el) => pg.query("insert into admin.routes(route_id) values($1)", [el.path])));
26
- await Promise.all(routes
27
- .filter((el) => el.path && el.actions)
28
- .map((el) => pg.query("insert into admin.role_access(role_id,route_id,actions) values ($1,$2,$3)", [id, el.path, el.actions])));
29
- await Promise.all(routes
30
- .filter((el) => el.resource && el.actions)
31
- .map((el) => pg.query("insert into admin.role_access(role_id,resource_id,route_id,actions) values ($1,$2,$3,$4)", [id, el.resource, el.path, el.actions])));
32
- const rows = await pg
33
- .query(`select a.route_id as path, b.actions as actions from admin.routes a
34
- left join admin.role_access b on a.route_id=b.route_id
35
- where b.role_id=$1`, [id])
36
- .then((el) => el.rows || []);
37
- const resources = await pg
38
- .query(`select resource_id, actions from admin.role_access
39
- where resource_id is not null and role_id=$1`, [id])
40
- .then((el) => el.rows || []);
41
- if (!users?.length) {
42
- return reply.status(200).send({ id, routes: rows, resources });
10
+ // restrict access - admin only
11
+ if (!user.user_type?.includes?.("admin")) {
12
+ throw ForbiddenError("not an admin");
13
+ }
14
+ const { users = [], routes = [] } = body;
15
+ const roleExists = await pg
16
+ .query("select 1 from admin.roles where role_id=$1", [id])
17
+ .then((r) => r.rowCount === 1);
18
+ if (!roleExists) {
19
+ throw BadRequestError("role not found: " + id);
20
+ }
21
+ if (!routes?.length) {
22
+ await pg.query("delete from admin.role_access where role_id=$1", [id]);
23
+ if (!users?.length) {
24
+ return { id, routes };
25
+ }
26
+ }
27
+ if (routes?.length) {
28
+ const routesDB = await pg
29
+ .query('select array_agg(route_id) as "routesDB" from admin.routes where enabled')
30
+ .then((r) => r.rows?.[0]?.routesDB || []);
31
+ await pg.query("delete from admin.role_access where role_id=$1", [id]);
32
+ await Promise.all(routes
33
+ .filter((el) => el.path && !routesDB?.includes(el.path))
34
+ .map((el) => pg.query("insert into admin.routes(route_id) values($1)", [el.path])));
35
+ await Promise.all(routes
36
+ .filter((el) => el.path && el.actions)
37
+ .map((el) => pg.query("insert into admin.role_access(role_id,route_id,actions) values ($1,$2,$3)", [id, el.path, el.actions])));
38
+ await Promise.all(routes
39
+ .filter((el) => el.resource && el.actions)
40
+ .map((el) => pg.query("insert into admin.role_access(role_id,resource_id,route_id,actions) values ($1,$2,$3,$4)", [id, el.resource, el.path, el.actions])));
41
+ const rows = await pg
42
+ .query(`select a.route_id as path, b.actions as actions from admin.routes a
43
+ left join admin.role_access b on a.route_id=b.route_id
44
+ where b.role_id=$1`, [id])
45
+ .then((el) => el.rows || []);
46
+ const resources = await pg
47
+ .query(`select resource_id, actions from admin.role_access
48
+ where resource_id is not null and role_id=$1`, [id])
49
+ .then((el) => el.rows || []);
50
+ if (!users?.length) {
51
+ return { id, routes: rows, resources };
52
+ }
43
53
  }
54
+ const client = await pg.connect();
55
+ try {
56
+ await client.query("begin");
57
+ await client.query("delete from admin.user_roles where role_id=$1", [id]);
58
+ await Promise.all(users
59
+ .filter((el) => el?.id)
60
+ .map((el) => pg.query("insert into admin.user_roles(role_id,user_uid,access_granted) values ($1,$2,$3)", [id, el.id, user.uid])));
61
+ await client.query("commit");
62
+ }
63
+ catch (err) {
64
+ await client.query("rollback");
65
+ throw err;
66
+ }
67
+ finally {
68
+ client.release();
69
+ const res = await accessGroup({
70
+ pg,
71
+ params,
72
+ user,
73
+ });
74
+ return res;
75
+ }
76
+ }
77
+ catch (error) {
78
+ throw error;
44
79
  }
45
- const q = `delete from admin.user_roles where role_id='${id.replace(/'/g, "''")}';
46
- insert into admin.user_roles(role_id,user_uid,access_granted)
47
- values ${users
48
- .filter((el) => el?.id)
49
- .map((el) => `('${id.replace(/'/g, "''")}','${el.id.replace(/'/g, "''")}','${user?.uid?.replace(/'/g, "''")}')`)}`;
50
- await pg.query(q);
51
- const res = await accessGroup({
52
- pg,
53
- params,
54
- user,
55
- }, reply);
56
- return res;
57
80
  }
@@ -1,5 +1,4 @@
1
- import { type FastifyReply } from "fastify";
2
- export default function accessInterface(req: any, reply: FastifyReply): Promise<{
1
+ export default function accessInterface(req: any): Promise<{
3
2
  rows: any;
4
3
  }>;
5
4
  //# sourceMappingURL=access.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.interface.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAqB5C,wBAA8B,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY;;GAkB1E"}
1
+ {"version":3,"file":"access.interface.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.interface.ts"],"names":[],"mappings":"AAmBA,wBAA8B,eAAe,CAAC,GAAG,EAAE,GAAG;;GAsBrD"}
@@ -1,5 +1,5 @@
1
- // import { type ExtendedRequest } from "../../../types/core.js";
2
- import { pgClients, metaFormat, getAdminAccess } from "../../../../utils.js";
1
+ import { ForbiddenError, UnauthorizedError } from "../../../../errors.js";
2
+ import { pgClients, metaFormat } from "../../../../utils.js";
3
3
  const q = `select a.route_id as id, coalesce(b.user_uid, d.user_uid) as user_uid, coalesce(d.actions, b.actions, array['view']) as actions, b.scope, c.role_id
4
4
  from admin.routes a
5
5
  left join admin.role_access b on
@@ -15,14 +15,16 @@ left join admin.user_roles d on
15
15
  else 1=1
16
16
  end )
17
17
  where $1 in (a.route_id, a.alias, a.table_name) and coalesce(b.user_uid, d.user_uid) is not null`;
18
- export default async function accessInterface(req, reply) {
19
- const { pg = pgClients.client, params = {}, user = {}, unittest } = req;
18
+ export default async function accessInterface(req) {
19
+ const { pg = pgClients.client, params = {}, user = {} } = req;
20
+ if (!user?.uid) {
21
+ throw UnauthorizedError("unauthorized");
22
+ }
20
23
  // restrict access - admin only
21
- await getAdminAccess({
22
- id: params.name,
23
- user,
24
- });
25
- const { rows = [] } = await pg.query(q, [params.name]);
24
+ if (!user.user_type?.includes?.("admin")) {
25
+ throw ForbiddenError("not an admin");
26
+ }
27
+ const rows = await pg.query(q, [params.name]).then((r) => r.rows || []);
26
28
  const cls = {
27
29
  user_uid: "core.user_uid",
28
30
  actions: "core.actions",
@@ -1,4 +1,4 @@
1
- export default function accessUser(req: any): Promise<{
1
+ export default function accessUser({ pg, params, user, }: any): Promise<{
2
2
  routes: any;
3
3
  resources: any;
4
4
  user: any;
@@ -1 +1 @@
1
- {"version":3,"file":"access.user.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.user.ts"],"names":[],"mappings":"AAGA,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG;;;;GAmChD"}
1
+ {"version":3,"file":"access.user.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.user.ts"],"names":[],"mappings":"AAOA,wBAA8B,UAAU,CAAC,EACvC,EAAqB,EACrB,MAAM,EACN,IAAI,GACL,EAAE,GAAG;;;;GAyCL"}
@@ -1,24 +1,31 @@
1
- import { BadRequestError } from "../../../../errors.js";
1
+ import { BadRequestError,
2
+ // ForbiddenError,
3
+ UnauthorizedError, } from "../../../../errors.js";
2
4
  import { pgClients } from "../../../../utils.js";
3
- export default async function accessUser(req) {
4
- if (!req.params?.id) {
5
+ export default async function accessUser({ pg = pgClients.client, params, user, }) {
6
+ if (!params?.id) {
5
7
  throw BadRequestError("not enough params: id");
6
8
  }
7
- const { pg = pgClients.client } = req;
9
+ if (!user?.uid) {
10
+ throw UnauthorizedError("unauthorized");
11
+ }
12
+ if (!user.user_type?.includes?.("admin")) {
13
+ // throw ForbiddenError("not an admin");
14
+ }
8
15
  const routes = await pg
9
16
  .query(`select a.route_id as path, b.actions from admin.routes a
10
17
  left join admin.role_access b on a.route_id=b.route_id
11
- where b.user_uid=$1`, [req.params.id])
12
- .then((el) => el.rows || []);
18
+ where b.user_uid=$1`, [params.id])
19
+ .then((r) => r.rows || []);
13
20
  const resources = await pg
14
21
  .query(`select resource_id, actions from admin.role_access
15
- where resource_id is not null and user_uid=$1`, [req.params.id])
16
- .then((el) => el.rows || []);
17
- const user = await pg
22
+ where resource_id is not null and user_uid=$1`, [params.id])
23
+ .then((r) => r.rows || []);
24
+ const userRoles = await pg
18
25
  .query(`select user_uid as id, user_name as name, access_granted,
19
26
  b.cdate as user_created, b.last_activity_date as last_activity from admin.user_roles a
20
27
  left join admin.users b on a.user_uid=b.uid
21
- where a.user_uid=$1`, [req.params.id])
22
- .then((el) => el.rows?.[0]);
23
- return { routes, resources, user };
28
+ where a.user_uid=$1`, [params.id])
29
+ .then((r) => r.rows?.[0]);
30
+ return { routes, resources, user: userRoles };
24
31
  }
@@ -1,2 +1,9 @@
1
- export default function accessUserPost(req: any, reply: any): Promise<any>;
1
+ export default function accessUserPost(req: any): Promise<{
2
+ routes: any;
3
+ resources: any;
4
+ user: any;
5
+ } | {
6
+ id: any;
7
+ routes: never[];
8
+ }>;
2
9
  //# sourceMappingURL=access.user.post.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.user.post.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.user.post.ts"],"names":[],"mappings":"AAKA,wBAA8B,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,gBAuDhE"}
1
+ {"version":3,"file":"access.user.post.d.ts","sourceRoot":"","sources":["../../../../../server/routes/access/controllers/access.user.post.ts"],"names":[],"mappings":"AASA,wBAA8B,cAAc,CAAC,GAAG,EAAE,GAAG;;;;;;;GA2DpD"}
@@ -1,7 +1,9 @@
1
- import { BadRequestError, UnauthorizedError } from "../../../../errors.js";
1
+ import { BadRequestError,
2
+ // ForbiddenError,
3
+ UnauthorizedError, } from "../../../../errors.js";
2
4
  import { pgClients } from "../../../../utils.js";
3
5
  import accessUser from "./access.user.js";
4
- export default async function accessUserPost(req, reply) {
6
+ export default async function accessUserPost(req) {
5
7
  const { pg = pgClients.client, params, body, user } = req;
6
8
  if (!params?.id) {
7
9
  throw BadRequestError("not enough params: id");
@@ -9,15 +11,18 @@ export default async function accessUserPost(req, reply) {
9
11
  if (!user?.uid) {
10
12
  throw UnauthorizedError("unauthorized");
11
13
  }
14
+ if (!user.user_type?.includes?.("admin")) {
15
+ // throw ForbiddenError("not an admin");
16
+ }
12
17
  await pg.query("delete from admin.role_access where user_uid=$1", [
13
18
  params.id,
14
19
  ]);
15
20
  if (!body?.routes?.length) {
16
- return reply.status(200).send({ id: params.id, routes: [] });
21
+ return { id: params.id, routes: [] };
17
22
  }
18
23
  const routesDB = await pg
19
24
  .query("select array_agg(route_id) from admin.routes where enabled")
20
- .then((el) => el.rows?.[0]?.array_agg || []);
25
+ .then((r) => r.rows?.[0]?.array_agg || []);
21
26
  await Promise.all(body.routes
22
27
  .filter((el) => el.path && !routesDB?.includes(el.path))
23
28
  .map((el) => pg.query("insert into admin.routes(route_id) values($1)", [el.path])));
@@ -27,6 +32,6 @@ export default async function accessUserPost(req, reply) {
27
32
  await Promise.all(body.routes
28
33
  .filter((el) => el.resource && el.actions)
29
34
  .map((el) => pg.query("insert into admin.role_access(user_uid,resource_id,actions) values ($1,$2,$3)", [params.id, el.resource, el.actions])));
30
- const result = await accessUser({ pg, params });
35
+ const result = await accessUser({ pg, params, user });
31
36
  return result;
32
37
  }
@@ -7,8 +7,8 @@ import { publicResourcesList } from "../../plugins/access/funcs/getResources.js"
7
7
  import { accessGroupPostSchema, accessGroupSchema, accessInterfaceSchema, accessUserPostSchema, accessUserSchema, } from "./schema.js";
8
8
  const tags = ["core", "access"];
9
9
  export default async function route(fastify, opt = {}) {
10
- fastify.get("/access-group/:id", { config: { tags }, schema: accessGroupSchema }, accessGroup);
11
- fastify.post("/access-group/:id", { config: { tags }, schema: accessGroupPostSchema }, accessGroupPost);
10
+ fastify.get("/access-group/:id", { config: { tags, role: "admin" }, schema: accessGroupSchema }, accessGroup);
11
+ fastify.post("/access-group/:id", { config: { tags, role: "admin" }, schema: accessGroupPostSchema }, accessGroupPost);
12
12
  fastify.get("/access-user/:id", {
13
13
  config: { tags, permission: "admin.users.read" },
14
14
  schema: accessUserSchema,
@@ -17,6 +17,6 @@ export default async function route(fastify, opt = {}) {
17
17
  config: { tags, permission: "admin.users.update" },
18
18
  schema: accessUserPostSchema,
19
19
  }, accessUserPost);
20
- fastify.get("/access-interface/:name", { config: { tags }, schema: accessInterfaceSchema }, accessInterface);
20
+ fastify.get("/access-interface/:name", { config: { tags, role: "admin" }, schema: accessInterfaceSchema }, accessInterface);
21
21
  fastify.get("/resources", { config: { tags, policy: "L0" } }, async () => publicResourcesList);
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAyBpD,wBAAsB,kBAAkB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,GAAG,EACH,EAAqB,GACtB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;;;;;UAwFA;AAED,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,gBAoa7C"}
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../../../server/routes/table/controllers/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA8BpD,wBAAsB,kBAAkB,CAAC,EACvC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,EACV,GAAG,EACH,EAAqB,GACtB,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;;;;;UAwFA;AAED,wBAA8B,OAAO,CAAC,GAAG,EAAE,GAAG,gBAuc7C"}
@@ -1,7 +1,8 @@
1
1
  import path from "node:path";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { config, getPGAsync, getTemplate, getSelectMeta, getMeta, applyHook, getSelectVal, logger, getSelect, metaFormat, getColumnCLS, pgClients, getFilter, getUserClsList, } from "../../../../utils.js";
4
- import { BadRequestError, NotFoundError } from "../../../../errors.js";
4
+ import { BadRequestError, ForbiddenError, NotFoundError, } from "../../../../errors.js";
5
+ import getIP from "../../../plugins/policy/funcs/getIP.js";
5
6
  const defaultLimit = 50;
6
7
  export async function getTableColumnMeta({ table, template, column, selectName, filtered, startsWith, key, pg = pgClients.client, }) {
7
8
  if (!table || !column) {
@@ -73,6 +74,36 @@ export default async function suggest(req) {
73
74
  user?.user_type?.includes?.("admin") ||
74
75
  process.env.NODE_ENV === "test" ||
75
76
  process.env.VITEST;
77
+ if (params.data.includes("admin.") && !user) {
78
+ const ip = getIP(req);
79
+ logger.file("alert", {
80
+ message: "admin table data get attempt",
81
+ suggest: params.data,
82
+ ip,
83
+ });
84
+ throw ForbiddenError("unauthorized");
85
+ }
86
+ if (query.token && query.token?.includes("admin.") && !user) {
87
+ const ip = getIP(req);
88
+ logger.file("alert", {
89
+ message: "admin table data get attempt - token",
90
+ suggest: params.data,
91
+ token: query.token,
92
+ ip,
93
+ });
94
+ throw ForbiddenError("unauthorized");
95
+ }
96
+ const forbidden = params.data.includes(":password") || params.data.includes(":salt");
97
+ if (forbidden) {
98
+ const ip = getIP(req);
99
+ logger.file("alert", {
100
+ message: "password / salt get attempt",
101
+ uid: user?.uid,
102
+ suggest: params.data,
103
+ ip,
104
+ });
105
+ throw ForbiddenError("unauthorized");
106
+ }
76
107
  if (params?.data && params.data?.startsWith?.("hash-")) {
77
108
  const filepath = path.join(process.cwd(), `/log/suggest/${params.data.replace("hash-", "")}.json`);
78
109
  if (existsSync(filepath)) {
@@ -169,6 +169,9 @@ declare const suggestSchema: {
169
169
  count: {
170
170
  type: string;
171
171
  };
172
+ json: {
173
+ type: string;
174
+ };
172
175
  };
173
176
  };
174
177
  params: {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../server/routes/table/schema.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBpB,CAAC;AAEF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhB,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAajB,CAAC;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoBlB,CAAC;AAEF,QAAA,MAAM,UAAU;;;;;;;;;;;;;;CAQf,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;CAOjB,CAAC;AAEF,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;CAatB,CAAC;AAEF,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;CAQtB,CAAC;AAEF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../server/routes/table/schema.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBpB,CAAC;AAEF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhB,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAajB,CAAC;AAEF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqBlB,CAAC;AAEF,QAAA,MAAM,UAAU;;;;;;;;;;;;;;CAQf,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;CAOjB,CAAC;AAEF,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;CAatB,CAAC;AAEF,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;CAQtB,CAAC;AAEF,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,CAAC"}
@@ -77,13 +77,14 @@ const suggestSchema = {
77
77
  val: { type: "string", pattern: "([\\d\\w]+)$" },
78
78
  sql: { type: "number" },
79
79
  count: { type: "number" },
80
+ json: { type: "number" },
80
81
  },
81
82
  },
82
83
  params: {
83
84
  type: "object",
84
85
  properties: {
85
86
  // data: { type: 'string', pattern: '^([\\d\\w]+)$' },
86
- }
87
+ },
87
88
  },
88
89
  };
89
90
  const formSchema = {
@@ -115,7 +116,7 @@ const cardTabDataSchema = {
115
116
  properties: {
116
117
  token: { type: "string", pattern: "^([\\d\\w]+)$" },
117
118
  },
118
- }
119
+ },
119
120
  };
120
121
  const tableDataIdSchema = {
121
122
  params: {
package/dist/utils.d.ts CHANGED
@@ -78,7 +78,7 @@ export { default as officeConverter } from "./server/plugins/grpc/office2pdf.js"
78
78
  export { default as getExport } from "./server/plugins/file/getExport.js";
79
79
  export { default as jsonToCsv } from "./server/routes/file/controllers/utils/jsonToCsv.js";
80
80
  export { default as jsonToXls } from "./server/routes/file/controllers/utils/jsonToXls.js";
81
- export { default as getAdminAccess } from "./server/plugins/access/funcs/getAdminAccess.js";
81
+ export declare const getAdminAccess: () => never;
82
82
  export { default as getUserPermissions } from "./server/plugins/access/funcs/getUserPermissions.js";
83
83
  export { resourcesList, publicResourcesList, } from "./server/plugins/access/funcs/getResources.js";
84
84
  export { default as sendNotification } from "./server/plugins/auth/funcs/sendNotification.js";
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js CHANGED
@@ -95,7 +95,9 @@ export { default as officeConverter } from "./server/plugins/grpc/office2pdf.js"
95
95
  export { default as getExport } from "./server/plugins/file/getExport.js";
96
96
  export { default as jsonToCsv } from "./server/routes/file/controllers/utils/jsonToCsv.js";
97
97
  export { default as jsonToXls } from "./server/routes/file/controllers/utils/jsonToXls.js";
98
- export { default as getAdminAccess } from "./server/plugins/access/funcs/getAdminAccess.js";
98
+ export const getAdminAccess = () => {
99
+ throw new Error("deprecated utils");
100
+ };
99
101
  export { default as getUserPermissions } from "./server/plugins/access/funcs/getUserPermissions.js";
100
102
  export { resourcesList, publicResourcesList, } from "./server/plugins/access/funcs/getResources.js";
101
103
  export { default as sendNotification } from "./server/plugins/auth/funcs/sendNotification.js"; // email
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "2.5.29",
3
+ "version": "2.5.30",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [