Merge pull request #28266 from backstage/freben/middleware

add error handler middleware in the plugin router
This commit is contained in:
Fredrik Adelöw
2024-12-23 12:02:19 +01:00
committed by GitHub
9 changed files with 48 additions and 42 deletions
@@ -79,7 +79,6 @@ export class WrapperProviders {
return new IncrementalProviderRouter(
new IncrementalIngestionDatabaseManager({ client: this.options.client }),
this.options.logger,
this.options.config,
).createRouter();
}
@@ -18,22 +18,17 @@ import express from 'express';
import Router from 'express-promise-router';
import { IncrementalIngestionDatabaseManager } from '../database/IncrementalIngestionDatabaseManager';
import { LoggerService } from '@backstage/backend-plugin-api';
import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
import { Config } from '@backstage/config';
export class IncrementalProviderRouter {
private manager: IncrementalIngestionDatabaseManager;
private logger: LoggerService;
private config: Config;
constructor(
manager: IncrementalIngestionDatabaseManager,
logger: LoggerService,
config: Config,
) {
this.manager = manager;
this.logger = logger;
this.config = config;
}
createRouter(): express.Router {
@@ -253,12 +248,6 @@ export class IncrementalProviderRouter {
},
);
const middleware = MiddlewareFactory.create({
logger: this.logger,
config: this.config,
});
router.use(middleware.error());
return router;
}
}
@@ -66,7 +66,6 @@ export class IncrementalCatalogBuilder {
const incrementalAdminRouter = await new IncrementalProviderRouter(
this.manager,
routerLogger,
this.env.config,
).createRouter();
return { incrementalAdminRouter };
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { AuthorizeResult } from '@backstage/plugin-permission-common';
import {
devToolsConfigReadPermission,
@@ -20,7 +21,6 @@ import {
devToolsInfoReadPermission,
devToolsPermissions,
} from '@backstage/plugin-devtools-common';
import { DevToolsBackendApi } from '../api';
import { NotAllowedError } from '@backstage/errors';
import Router from 'express-promise-router';
@@ -33,7 +33,6 @@ import {
PermissionsService,
RootConfigService,
} from '@backstage/backend-plugin-api';
import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
/**
* @internal
@@ -121,8 +120,5 @@ export async function createRouter(
response.status(200).json(health);
});
const middleware = MiddlewareFactory.create({ logger, config });
router.use(middleware.error());
return router;
}
@@ -169,7 +169,7 @@ describe('resourcesRoutes', () => {
error: { name: 'InputError', message: 'entity is a required field' },
request: {
method: 'POST',
url: '/api/kubernetes/resources/workloads/query',
url: '/resources/workloads/query',
},
response: { statusCode: 400 },
});
@@ -193,7 +193,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/workloads/query',
url: '/resources/workloads/query',
},
response: { statusCode: 400 },
});
@@ -216,7 +216,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/workloads/query',
url: '/resources/workloads/query',
},
response: { statusCode: 400 },
});
@@ -240,7 +240,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/workloads/query',
url: '/resources/workloads/query',
},
response: { statusCode: 401 },
});
@@ -264,7 +264,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/workloads/query',
url: '/resources/workloads/query',
},
response: { statusCode: 401 },
});
@@ -287,7 +287,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/workloads/query',
url: '/resources/workloads/query',
},
response: { statusCode: 500 },
});
@@ -346,7 +346,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 400 },
});
@@ -370,7 +370,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 400 },
});
@@ -394,7 +394,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 400 },
});
@@ -420,7 +420,7 @@ describe('resourcesRoutes', () => {
error: { name: 'InputError', message: 'entity is a required field' },
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 400 },
});
@@ -451,7 +451,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 400 },
});
@@ -481,7 +481,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 400 },
});
@@ -512,7 +512,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 401 },
});
@@ -543,7 +543,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 401 },
});
@@ -573,7 +573,7 @@ describe('resourcesRoutes', () => {
},
request: {
method: 'POST',
url: '/api/kubernetes/resources/custom/query',
url: '/resources/custom/query',
},
response: { statusCode: 500 },
});
+1 -7
View File
@@ -26,7 +26,6 @@ import {
} from '@backstage/plugin-notifications-common';
import express, { Response } from 'express';
import Router from 'express-promise-router';
import { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';
const randomSeverity = (): NotificationSeverity => {
return notificationSeverities[
@@ -77,12 +76,8 @@ const notificationsDebug = createBackendPlugin({
deps: {
notifications: notificationService,
httpRouter: coreServices.httpRouter,
config: coreServices.rootConfig,
logger: coreServices.logger,
},
async init({ notifications, httpRouter, config, logger }) {
const middleware = MiddlewareFactory.create({ config, logger });
async init({ notifications, httpRouter }) {
const router = Router();
router.use(express.json());
router.post('/', async (_, res: Response<unknown>) => {
@@ -100,7 +95,6 @@ const notificationsDebug = createBackendPlugin({
});
res.status(200).send({ status: 'ok' });
});
router.use(middleware.error());
httpRouter.use(router);
httpRouter.addAuthPolicy({