@kyverno/backstage-plugin-policy-reporter-backend 2.5.0 → 2.7.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.
@@ -1,104 +1,165 @@
1
1
  'use strict';
2
2
 
3
3
  var express = require('express');
4
- var backstagePluginPolicyReporterCommon = require('@kyverno/backstage-plugin-policy-reporter-common');
5
4
  var rootHttpRouter = require('@backstage/backend-defaults/rootHttpRouter');
6
5
  var router = require('../schema/openapi/generated/router.cjs.js');
7
- var parser = require('uri-template');
6
+ var errors = require('@backstage/errors');
8
7
 
9
8
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
10
9
 
11
- function _interopNamespaceCompat(e) {
12
- if (e && typeof e === 'object' && 'default' in e) return e;
13
- var n = Object.create(null);
14
- if (e) {
15
- Object.keys(e).forEach(function (k) {
16
- if (k !== 'default') {
17
- var d = Object.getOwnPropertyDescriptor(e, k);
18
- Object.defineProperty(n, k, d.get ? d : {
19
- enumerable: true,
20
- get: function () { return e[k]; }
21
- });
22
- }
23
- });
24
- }
25
- n.default = e;
26
- return Object.freeze(n);
27
- }
28
-
29
10
  var express__default = /*#__PURE__*/_interopDefaultCompat(express);
30
- var parser__namespace = /*#__PURE__*/_interopNamespaceCompat(parser);
31
11
 
32
- const ensureTrailingSlash = (url) => url.endsWith("/") ? url : `${url}/`;
12
+ function handlePolicyReporterError(error, response) {
13
+ if (error instanceof errors.NotFoundError) {
14
+ return response.status(404).json({ error: error.message });
15
+ }
16
+ if (error instanceof errors.InputError) {
17
+ return response.status(400).json({ error: error.message });
18
+ }
19
+ if (error instanceof errors.ServiceUnavailableError) {
20
+ return response.status(503).json({ error: error.message });
21
+ }
22
+ if (error instanceof errors.ForwardedError) {
23
+ return response.status(502).json({ error: error.message });
24
+ }
25
+ return response.status(500).json({ error: "Unknown error" });
26
+ }
33
27
  async function createRouter(options) {
34
- const { logger, config, catalogService, authService } = options;
28
+ const { logger, config, policyReporterService } = options;
35
29
  const router$1 = await router.createOpenApiRouter();
36
30
  router$1.use(express__default.default.json());
37
31
  router$1.get("/namespaced-resources/results", async (request, response) => {
38
- const entityRef = decodeURIComponent(request.query.environment);
39
- const credentials = await authService.getOwnServiceCredentials();
40
- const entity = await catalogService.getEntityByRef(entityRef, {
41
- credentials
42
- });
43
- if (!entity)
44
- return response.status(400).json({ error: "Invalid entityRef" });
45
- const kyvernoEndpoint = entity?.metadata.annotations?.[backstagePluginPolicyReporterCommon.KYVERNO_ENDPOINT_ANNOTATION];
46
- if (!kyvernoEndpoint)
47
- return response.status(400).json({ error: `Entity missing 'kyverno.io/endpoint' annotation` });
48
- const uriTemplate = `v1/namespaced-resources/results{?sources*,namespaces*,kinds*,resources*,categories*,policies*,status*,severities*,search,labels*,page,offset,direction}`;
49
- const uri = parser__namespace.parse(uriTemplate).expand({
50
- ...request.query
51
- });
52
- const policyResponse = await fetch(
53
- `${ensureTrailingSlash(kyvernoEndpoint)}${uri}`,
54
- {
55
- headers: {
56
- "Content-Type": "application/json"
57
- },
58
- method: "GET"
59
- }
60
- );
61
- if (!policyResponse.ok) {
62
- return response.status(500).json({
63
- error: `Failed to fetch policies ${policyResponse.status} ${policyResponse.statusText}`
32
+ try {
33
+ const { environment, ...query } = request.query;
34
+ const result = await policyReporterService.getNamespacedResourceResults({
35
+ entityRef: decodeURIComponent(environment),
36
+ query
37
+ });
38
+ return response.status(200).json(result);
39
+ } catch (error) {
40
+ return handlePolicyReporterError(error, response);
41
+ }
42
+ });
43
+ router$1.get("/v1/cluster-resources/results", async (request, response) => {
44
+ try {
45
+ const { environment, ...query } = request.query;
46
+ const result = await policyReporterService.getClusterResourceResults({
47
+ entityRef: decodeURIComponent(environment),
48
+ query
64
49
  });
50
+ return response.status(200).json(result);
51
+ } catch (error) {
52
+ return handlePolicyReporterError(error, response);
65
53
  }
66
- const result = await policyResponse.json();
67
- return response.status(200).json(result);
68
54
  });
69
55
  router$1.get("/v1/namespaces", async (request, response) => {
70
- const entityRef = decodeURIComponent(request.query.environment);
71
- const credentials = await authService.getOwnServiceCredentials();
72
- const entity = await catalogService.getEntityByRef(entityRef, {
73
- credentials
74
- });
75
- if (!entity) {
76
- return response.status(400).json({ error: "Invalid entityRef" });
56
+ try {
57
+ const { environment, ...query } = request.query;
58
+ const result = await policyReporterService.getNamespaces({
59
+ entityRef: decodeURIComponent(environment),
60
+ query
61
+ });
62
+ return response.status(200).json(result);
63
+ } catch (error) {
64
+ return handlePolicyReporterError(error, response);
77
65
  }
78
- const kyvernoEndpoint = entity?.metadata.annotations?.[backstagePluginPolicyReporterCommon.KYVERNO_ENDPOINT_ANNOTATION];
79
- if (!kyvernoEndpoint) {
80
- return response.status(400).json({ error: `Entity missing 'kyverno.io/endpoint' annotation` });
66
+ });
67
+ router$1.get("/v1/namespaced-resources/sources", async (request, response) => {
68
+ try {
69
+ const { environment } = request.query;
70
+ const result = await policyReporterService.getSources({
71
+ entityRef: decodeURIComponent(environment)
72
+ });
73
+ return response.status(200).json(result);
74
+ } catch (error) {
75
+ return handlePolicyReporterError(error, response);
81
76
  }
82
- const uriTemplate = `v1/namespaces{?sources*,categories*,policies*}`;
83
- const uri = parser__namespace.parse(uriTemplate).expand({
84
- ...request.query
85
- });
86
- const policyResponse = await fetch(
87
- `${ensureTrailingSlash(kyvernoEndpoint)}${uri}`,
88
- {
89
- headers: {
90
- "Content-Type": "application/json"
91
- },
92
- method: "GET"
77
+ });
78
+ router$1.get("/v1/namespaced-resources/kinds", async (request, response) => {
79
+ try {
80
+ const { environment, ...query } = request.query;
81
+ const result = await policyReporterService.getKinds({
82
+ entityRef: decodeURIComponent(environment),
83
+ query
84
+ });
85
+ return response.status(200).json(result);
86
+ } catch (error) {
87
+ return handlePolicyReporterError(error, response);
88
+ }
89
+ });
90
+ router$1.get(
91
+ "/v1/namespaced-resources/categories",
92
+ async (request, response) => {
93
+ try {
94
+ const { environment, ...query } = request.query;
95
+ const result = await policyReporterService.getCategories({
96
+ entityRef: decodeURIComponent(environment),
97
+ query
98
+ });
99
+ return response.status(200).json(result);
100
+ } catch (error) {
101
+ return handlePolicyReporterError(error, response);
93
102
  }
94
- );
95
- if (!policyResponse.ok) {
96
- return response.status(500).json({
97
- error: `Failed to fetch namespaces: ${policyResponse.statusText}`
103
+ }
104
+ );
105
+ router$1.get("/v1/namespaced-resources/policies", async (request, response) => {
106
+ try {
107
+ const { environment, ...query } = request.query;
108
+ const result = await policyReporterService.getPolicies({
109
+ entityRef: decodeURIComponent(environment),
110
+ query
111
+ });
112
+ return response.status(200).json(result);
113
+ } catch (error) {
114
+ return handlePolicyReporterError(error, response);
115
+ }
116
+ });
117
+ router$1.get("/v1/cluster-resources/sources", async (request, response) => {
118
+ try {
119
+ const { environment } = request.query;
120
+ const result = await policyReporterService.getClusterSources({
121
+ entityRef: decodeURIComponent(environment)
122
+ });
123
+ return response.status(200).json(result);
124
+ } catch (error) {
125
+ return handlePolicyReporterError(error, response);
126
+ }
127
+ });
128
+ router$1.get("/v1/cluster-resources/kinds", async (request, response) => {
129
+ try {
130
+ const { environment, ...query } = request.query;
131
+ const result = await policyReporterService.getClusterKinds({
132
+ entityRef: decodeURIComponent(environment),
133
+ query
134
+ });
135
+ return response.status(200).json(result);
136
+ } catch (error) {
137
+ return handlePolicyReporterError(error, response);
138
+ }
139
+ });
140
+ router$1.get("/v1/cluster-resources/categories", async (request, response) => {
141
+ try {
142
+ const { environment, ...query } = request.query;
143
+ const result = await policyReporterService.getClusterCategories({
144
+ entityRef: decodeURIComponent(environment),
145
+ query
146
+ });
147
+ return response.status(200).json(result);
148
+ } catch (error) {
149
+ return handlePolicyReporterError(error, response);
150
+ }
151
+ });
152
+ router$1.get("/v1/cluster-resources/policies", async (request, response) => {
153
+ try {
154
+ const { environment, ...query } = request.query;
155
+ const result = await policyReporterService.getClusterPolicies({
156
+ entityRef: decodeURIComponent(environment),
157
+ query
98
158
  });
159
+ return response.status(200).json(result);
160
+ } catch (error) {
161
+ return handlePolicyReporterError(error, response);
99
162
  }
100
- const result = await policyResponse.json();
101
- return response.status(200).json(result);
102
163
  });
103
164
  const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config });
104
165
  router$1.use(middleware.error());
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["import { AuthService, RootConfigService } from '@backstage/backend-plugin-api';\nimport { LoggerService } from '@backstage/backend-plugin-api';\nimport express from 'express';\nimport { KYVERNO_ENDPOINT_ANNOTATION } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\nimport { createOpenApiRouter } from '../schema/openapi';\n\nimport * as parser from 'uri-template';\n\nexport interface RouterOptions {\n logger: LoggerService;\n config: RootConfigService;\n catalogService: CatalogService;\n authService: AuthService;\n}\n\nconst ensureTrailingSlash = (url: string) =>\n url.endsWith('/') ? url : `${url}/`;\n\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { logger, config, catalogService, authService } = options;\n\n const router = await createOpenApiRouter();\n router.use(express.json());\n\n router.get('/namespaced-resources/results', async (request, response) => {\n // Get entityRef from query.\n const entityRef = decodeURIComponent(request.query.environment);\n\n const credentials = await authService.getOwnServiceCredentials();\n\n const entity = await catalogService.getEntityByRef(entityRef, {\n credentials,\n });\n\n if (!entity)\n return response.status(400).json({ error: 'Invalid entityRef' });\n\n const kyvernoEndpoint =\n entity?.metadata.annotations?.[KYVERNO_ENDPOINT_ANNOTATION];\n\n if (!kyvernoEndpoint)\n return response\n .status(400)\n .json({ error: `Entity missing 'kyverno.io/endpoint' annotation` });\n\n const uriTemplate = `v1/namespaced-resources/results{?sources*,namespaces*,kinds*,resources*,categories*,policies*,status*,severities*,search,labels*,page,offset,direction}`;\n\n const uri = parser.parse(uriTemplate).expand({\n ...request.query,\n });\n\n const policyResponse = await fetch(\n `${ensureTrailingSlash(kyvernoEndpoint)}${uri}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n );\n\n if (!policyResponse.ok) {\n return response.status(500).json({\n error: `Failed to fetch policies ${policyResponse.status} ${policyResponse.statusText}`,\n });\n }\n\n const result = await policyResponse.json();\n\n return response.status(200).json(result);\n });\n\n router.get('/v1/namespaces', async (request, response) => {\n // Get entityRef from query.\n const entityRef = decodeURIComponent(request.query.environment);\n\n const credentials = await authService.getOwnServiceCredentials();\n const entity = await catalogService.getEntityByRef(entityRef, {\n credentials,\n });\n\n if (!entity) {\n return response.status(400).json({ error: 'Invalid entityRef' });\n }\n\n const kyvernoEndpoint =\n entity?.metadata.annotations?.[KYVERNO_ENDPOINT_ANNOTATION];\n\n if (!kyvernoEndpoint) {\n return response\n .status(400)\n .json({ error: `Entity missing 'kyverno.io/endpoint' annotation` });\n }\n\n const uriTemplate = `v1/namespaces{?sources*,categories*,policies*}`;\n\n const uri = parser.parse(uriTemplate).expand({\n ...request.query,\n });\n\n const policyResponse = await fetch(\n `${ensureTrailingSlash(kyvernoEndpoint)}${uri}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n );\n\n if (!policyResponse.ok) {\n return response.status(500).json({\n error: `Failed to fetch namespaces: ${policyResponse.statusText}`,\n });\n }\n\n const result = await policyResponse.json();\n return response.status(200).json(result);\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n"],"names":["router","createOpenApiRouter","express","KYVERNO_ENDPOINT_ANNOTATION","parser","MiddlewareFactory"],"mappings":"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"}
1
+ {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["import { RootConfigService } from '@backstage/backend-plugin-api';\nimport { LoggerService } from '@backstage/backend-plugin-api';\nimport express from 'express';\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport { createOpenApiRouter } from '../schema/openapi';\nimport { PolicyReporterApi } from './policyReporterService';\nimport {\n ForwardedError,\n InputError,\n NotFoundError,\n ServiceUnavailableError,\n} from '@backstage/errors';\n\nexport interface RouterOptions {\n logger: LoggerService;\n config: RootConfigService;\n policyReporterService: PolicyReporterApi;\n}\n\nfunction handlePolicyReporterError(\n error: unknown,\n response: express.Response,\n): express.Response {\n if (error instanceof NotFoundError) {\n return response.status(404).json({ error: error.message });\n }\n\n if (error instanceof InputError) {\n return response.status(400).json({ error: error.message });\n }\n\n if (error instanceof ServiceUnavailableError) {\n return response.status(503).json({ error: error.message });\n }\n\n if (error instanceof ForwardedError) {\n return response.status(502).json({ error: error.message });\n }\n\n return response.status(500).json({ error: 'Unknown error' });\n}\n\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { logger, config, policyReporterService } = options;\n\n const router = await createOpenApiRouter();\n router.use(express.json());\n\n router.get('/namespaced-resources/results', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getNamespacedResourceResults({\n entityRef: decodeURIComponent(environment),\n query: query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/results', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterResourceResults({\n entityRef: decodeURIComponent(environment),\n query: query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/namespaces', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getNamespaces({\n entityRef: decodeURIComponent(environment),\n query: query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/namespaced-resources/sources', async (request, response) => {\n try {\n const { environment } = request.query;\n\n const result = await policyReporterService.getSources({\n entityRef: decodeURIComponent(environment),\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/namespaced-resources/kinds', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getKinds({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get(\n '/v1/namespaced-resources/categories',\n async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getCategories({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n },\n );\n\n router.get('/v1/namespaced-resources/policies', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getPolicies({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/sources', async (request, response) => {\n try {\n const { environment } = request.query;\n\n const result = await policyReporterService.getClusterSources({\n entityRef: decodeURIComponent(environment),\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/kinds', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterKinds({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/categories', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterCategories({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/policies', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterPolicies({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n"],"names":["NotFoundError","InputError","ServiceUnavailableError","ForwardedError","router","createOpenApiRouter","express","MiddlewareFactory"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kyverno/backstage-plugin-policy-reporter-backend",
3
- "version": "2.5.0",
3
+ "version": "2.7.0",
4
4
  "main": "dist/index.cjs.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -24,7 +24,8 @@
24
24
  "publishConfig": {
25
25
  "access": "public",
26
26
  "main": "dist/index.cjs.js",
27
- "types": "dist/index.d.ts"
27
+ "types": "dist/index.d.ts",
28
+ "provenance": true
28
29
  },
29
30
  "repository": {
30
31
  "type": "git",
@@ -42,13 +43,15 @@
42
43
  "generate": "backstage-repo-tools package schema openapi generate --server --client-package plugins/policy-reporter-common"
43
44
  },
44
45
  "dependencies": {
45
- "@backstage/backend-defaults": "^0.17.0",
46
- "@backstage/backend-openapi-utils": "^0.6.8",
47
- "@backstage/backend-plugin-api": "^1.9.0",
48
- "@backstage/config": "^1.3.7",
49
- "@backstage/plugin-catalog-node": "^2.2.0",
50
- "@backstage/repo-tools": "^0.17.1",
51
- "@kyverno/backstage-plugin-policy-reporter-common": "^2.4.0",
46
+ "@backstage/backend-defaults": "^0.18.0",
47
+ "@backstage/backend-openapi-utils": "^0.7.2",
48
+ "@backstage/backend-plugin-api": "^1.10.1",
49
+ "@backstage/config": "^1.3.9",
50
+ "@backstage/errors": "^1.3.1",
51
+ "@backstage/plugin-catalog-node": "^2.2.5",
52
+ "@backstage/repo-tools": "^0.19.1",
53
+ "@backstage/types": "^1.2.2",
54
+ "@kyverno/backstage-plugin-policy-reporter-common": "^2.6.0",
52
55
  "@types/express": "*",
53
56
  "express": "^4.17.1",
54
57
  "express-promise-router": "^4.1.0",
@@ -57,19 +60,21 @@
57
60
  "yn": "^4.0.0"
58
61
  },
59
62
  "devDependencies": {
60
- "@backstage/backend-test-utils": "^1.11.2",
61
- "@backstage/catalog-model": "^1.8.0",
62
- "@backstage/cli": "^0.36.1",
63
- "@backstage/plugin-auth-backend": "^0.28.0",
64
- "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.18",
65
- "@backstage/plugin-catalog-backend": "^3.6.1",
63
+ "@backstage/backend-test-utils": "^1.11.7",
64
+ "@backstage/catalog-model": "^1.10.1",
65
+ "@backstage/cli": "^0.36.6",
66
+ "@backstage/plugin-auth-backend": "^0.30.1",
67
+ "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.23",
68
+ "@backstage/plugin-catalog-backend": "^4.0.0",
66
69
  "@types/supertest": "^2.0.12",
67
70
  "better-sqlite3": "^9.0.0",
68
71
  "msw": "^1.0.0",
69
72
  "supertest": "^6.2.4"
70
73
  },
74
+ "configSchema": "config.schema.json",
71
75
  "files": [
72
- "dist"
76
+ "dist",
77
+ "config.schema.json"
73
78
  ],
74
79
  "typesVersions": {
75
80
  "*": {
@@ -77,5 +82,6 @@
77
82
  "package.json"
78
83
  ]
79
84
  }
80
- }
85
+ },
86
+ "provenance": true
81
87
  }