routes/internals.js

/**
 * @module routes/app
 * @author jesse reichler <mouser@donationcoder.com>
 * @copyright 10/28/19
 * @description
 * routes for admins to discover diagnostic internal structure info about the system
 */

"use strict";


// modules
const express = require("express");


// requirement service locator
const jrequire = require("../helpers/jrequire");

// controllers
const arserver = jrequire("arserver");

// helpers
const JrContext = require("../helpers/jrcontext");
const JrResult = require("../helpers/jrresult");

// constants
const appdef = jrequire("appdef");











//---------------------------------------------------------------------------
function setupRouter(urlPath) {
	// create express router
	const router = express.Router();

	// setup routes
	router.get("/", routerGetIndex);
	router.get("/appinfo", routerGetAppInfo);
	router.get("/config_options", routerGetConfigOptions);
	router.get("/config_files", routerGetConfigFiles);
	router.get("/config_hierarchy", routerGetConfigHierarchy);
	router.get("/routes", routerGetRoutes);
	router.get("/database", routerGetDatabaseInfo);
	// router.get("/resourceuse", routerGetResourceuse);
	router.get("/serverinfo", routerGetServerinfo);
	router.get("/aclstructure", routerGetAclStructure);
	router.get("/nodejs", routerGetNodejs);
	router.get("/dependencies", routerDependencies);
	router.get("/plugins", routerPlugins);
	router.get("/appframeworks", routerAppFrameworks);

	// return router
	return router;
}
//---------------------------------------------------------------------------




//---------------------------------------------------------------------------
// router functions


async function routerGetIndex(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		res.render("internals/index", {
			jrResult: jrContext.mergeSessionMessages(),
		});
	}
}


async function routerGetAppInfo(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		const rawData = arserver.calcAppInfo();
		res.render("internals/appinfo", {
			rawData,
			jrResult: jrContext.mergeSessionMessages(),
		});
	}
}



//---------------------------------------------------------------------------
async function routerGetConfigOptions(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);

	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		const rawData = arserver.getJrConfig().getDebugOptions();
		res.render("internals/config", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerGetConfigFiles(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		const rawData = arserver.getJrConfig().getDebugFiles();
		res.render("internals/config", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}

async function routerGetConfigHierarchy(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		const rawData = arserver.getJrConfig().getDebugHierarchy();
		res.render("internals/config", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}
//---------------------------------------------------------------------------




//---------------------------------------------------------------------------
async function routerGetRoutes(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		const rawData = arserver.calcExpressRoutePathData();
		res.render("internals/routes", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerGetDatabaseInfo(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		const rawData = await arserver.calcDatabaseInfo();
		res.render("internals/database", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerGetServerinfo(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		// get database resource use
		const rawData = await arserver.calcWebServerInformation();
		res.render("internals/serverinfo", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerGetAclStructure(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		// get database resource use
		const rawData = arserver.calcAclStructure();
		res.render("internals/aclstructure", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerGetNodejs(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		// get database resource use
		const rawData = arserver.calcNodeJsInfo();
		res.render("internals/nodejs", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerDependencies(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		// get database resource use
		const rawData = arserver.calcDependencyInfo();
		res.render("internals/dependencies", {
			jrResult: jrContext.mergeSessionMessages(),
			rawData,
		});
	}
}


async function routerPlugins(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		// get database resource use
		const rawData = arserver.calcAddonCollectionInfoPlugins();
		res.render("internals/addoncollections", {
			jrResult: jrContext.mergeSessionMessages(),
			collectionName: "plugins",
			rawData,
		});
	}
}



async function routerAppFrameworks(req, res, next) {
	const jrContext = JrContext.makeNew(req, res, next);
	if (await arserver.aclRequireLoggedInSitePermissionRenderErrorPageOrRedirect(jrContext, appdef.DefAclActionAdminister)) {
		// get database resource use
		const rawData = arserver.calcAddonCollectionInfoAppFrameworks();
		res.render("internals/addoncollections", {
			jrResult: jrContext.mergeSessionMessages(),
			collectionName: "appFrameworks",
			rawData,
		});
	}
}
//---------------------------------------------------------------------------




module.exports = {
	setupRouter,
};