UNPKG

@digital-ai/plugin-dai-deploy-backend

Version:

Backend functionalities for the dai-deploy backstage plugin

141 lines (135 loc) 5.87 kB
'use strict'; var CurrentDeploymentStatusApi = require('../api/CurrentDeploymentStatusApi.cjs.js'); var DeployedApplicationStatusApi = require('../api/DeployedApplicationStatusApi.cjs.js'); var DeploymentHistoryStatusApi = require('../api/DeploymentHistoryStatusApi.cjs.js'); var errors = require('@backstage/errors'); var pluginDaiDeployCommon = require('@digital-ai/plugin-dai-deploy-common'); var apiConfig = require('../api/apiConfig.cjs.js'); var pluginPermissionCommon = require('@backstage/plugin-permission-common'); var rootHttpRouter = require('@backstage/backend-defaults/rootHttpRouter'); var Router = require('express-promise-router'); var pluginPermissionNode = require('@backstage/plugin-permission-node'); var express = require('express'); var catalogModel = require('@backstage/catalog-model'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } var Router__default = /*#__PURE__*/_interopDefaultCompat(Router); var express__default = /*#__PURE__*/_interopDefaultCompat(express); async function createRouter(options) { const { logger, config, permissions, httpAuth } = options; const deployedApplicationStatusApi = DeployedApplicationStatusApi.DeployedApplicationStatusApi.fromConfig( config, logger ); const currentDeploymentStatusApi = CurrentDeploymentStatusApi.CurrentDeploymentStatusApi.fromConfig( config, logger ); const deploymentHistoryStatusApi = DeploymentHistoryStatusApi.DeploymentHistoryStatusApi.fromConfig( config, logger ); const permissionIntegrationRouter = pluginPermissionNode.createPermissionIntegrationRouter({ permissions: pluginDaiDeployCommon.daiDeployPermissions }); const router = Router__default.default(); router.use(express__default.default.json()); router.use(permissionIntegrationRouter); router.get("/health", (_, response) => { logger.info("PONG!"); response.json({ status: "ok" }); }); router.get("/application-status/:appName", async (req, res) => { const { appName } = req.params; const status = await deployedApplicationStatusApi.getApplicationDeploymentInfo(appName); res.status(200).json(status); }); router.get("/deployment-status/:namespace/:kind/:name", async (req, res) => { const { namespace, kind, name } = req.params; const entityRef = catalogModel.stringifyEntityRef({ kind, namespace, name }); if (typeof entityRef !== "string") { throw new errors.InputError("Invalid entityRef, not a string"); } if (permissions && httpAuth) { const decision = await permissions.authorize( [{ permission: pluginDaiDeployCommon.daiDeployViewPermission, resourceRef: entityRef }], { credentials: await httpAuth.credentials(req) } ); const { result } = decision[0]; if (result === pluginPermissionCommon.AuthorizeResult.DENY) { throw new errors.NotAllowedError( "Access Denied: Unauthorized to access the Backstage Deploy plugin" ); } } const appName = apiConfig.getDecodedQueryVal(req.query.appName?.toString()); const beginDate = apiConfig.getEncodedQueryVal(req.query.beginDate?.toString()); const endDate = apiConfig.getEncodedQueryVal(req.query.endDate?.toString()); const order = apiConfig.getEncodedQueryVal(req.query.order?.toString()); const pageNumber = apiConfig.getEncodedQueryVal(req.query.pageNumber?.toString()); const resultsPerPage = apiConfig.getEncodedQueryVal( req.query.resultsPerPage?.toString() ); const taskSet = apiConfig.getEncodedQueryVal(req.query.taskSet?.toString()); const currentDeploymentStatus = await currentDeploymentStatusApi.getCurrentDeploymentStatus( appName, beginDate, endDate, order, pageNumber, resultsPerPage, taskSet ); res.status(200).json(currentDeploymentStatus); }); router.get("/deployment-history/:namespace/:kind/:name", async (req, res) => { const { namespace, kind, name } = req.params; const entityRef = catalogModel.stringifyEntityRef({ kind, namespace, name }); if (typeof entityRef !== "string") { throw new errors.InputError("Invalid entityRef, not a string"); } if (permissions && httpAuth) { const decision = await permissions.authorize( [{ permission: pluginDaiDeployCommon.daiDeployViewPermission, resourceRef: entityRef }], { credentials: await httpAuth.credentials(req) } ); const { result } = decision[0]; if (result === pluginPermissionCommon.AuthorizeResult.DENY) { throw new errors.NotAllowedError( "Access Denied: Unauthorized to access the Backstage Deploy plugin" ); } } const appName = apiConfig.getDecodedQueryVal(req.query.appName?.toString()); const beginDate = apiConfig.getEncodedQueryVal(req.query.beginDate?.toString()); const endDate = apiConfig.getEncodedQueryVal(req.query.endDate?.toString()); const order = apiConfig.getEncodedQueryVal(req.query.order?.toString()); const pageNumber = apiConfig.getEncodedQueryVal(req.query.pageNumber?.toString()); const resultsPerPage = apiConfig.getEncodedQueryVal( req.query.resultsPerPage?.toString() ); const taskId = apiConfig.getEncodedQueryVal(req.query.taskId?.toString()); const deploymentHistoryStatus = await deploymentHistoryStatusApi.getDeploymentHistoryStatus( appName, beginDate, endDate, order, pageNumber, resultsPerPage, taskId ); res.status(200).json(deploymentHistoryStatus); }); const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config }); router.use(middleware.error()); return router; } exports.createRouter = createRouter; //# sourceMappingURL=router.cjs.js.map