@digital-ai/plugin-dai-deploy-backend
Version:
Backend functionalities for the dai-deploy backstage plugin
141 lines (135 loc) • 5.87 kB
JavaScript
'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