1
0
Fork 0
mirror of synced 2024-07-01 12:30:41 +12:00
budibase/packages/server/api/index.js

196 lines
5.9 KiB
JavaScript
Raw Normal View History

const Router = require("@koa/router")
const session = require("../middleware/session")
const StatusCodes = require("../utilities/statusCodes")
const { resolve } = require("path")
const { homedir } = require("os")
const send = require("koa-send")
const routeHandlers = require("../middleware/routeHandlers")
const {
componentLibraryInfo,
2020-04-07 01:16:21 +12:00
} = require("../utilities/builder")
2020-04-07 01:05:57 +12:00
const {
componentRoutes,
appsRoutes,
pageRoutes,
userRoutes,
authenticatedRoutes
2020-04-07 01:16:21 +12:00
} = require("./routes");
2019-06-29 09:59:27 +12:00
2020-04-08 02:12:08 +12:00
const recordRoutes = require("./routes/neo/record");
const instanceRoutes = require("./routes/neo/instance");
2020-04-08 04:38:01 +12:00
const neoUserRoutes = require("./routes/neo/user");
2020-04-09 03:57:27 +12:00
const clientRoutes = require("./routes/neo/client");
const applicationRoutes = require("./routes/neo/application");
2020-04-13 22:47:53 +12:00
const modelsRoutes = require("./routes/neo/model");
2020-04-14 03:22:30 +12:00
const viewsRoutes = require("./routes/neo/view");
const staticRoutes = require("./routes/neo/static");
2020-04-08 02:12:08 +12:00
2020-04-25 04:28:32 +12:00
module.exports = app => {
const router = new Router()
2019-06-14 21:05:46 +12:00
router
// .use(session(app))
.use(async (ctx, next) => {
// TODO: temp dev middleware
// ctx.sessionId = ctx.session._sessCtx.externalKey
// ctx.session.accessed = true
ctx.isAuthenticated = true;
ctx.config = { latestPackagesFolder: resolve(homedir(), ".budibase") }
await next();
});
2020-04-08 02:12:08 +12:00
// .use(async (ctx, next) => {
// ctx.sessionId = ctx.session._sessCtx.externalKey
// ctx.session.accessed = true
// ctx.config = config
2020-04-08 02:12:08 +12:00
// const pathParts = ctx.path.split("/")
// if (pathParts.length < 2) {
// ctx.throw(StatusCodes.NOT_FOUND, "App Name not declared")
// }
// const appname = pathParts[1]
// ctx.set("x-bbappname", appname)
// if (appname === "_builder") {
// if (!config.dev) {
// ctx.response.status = StatusCodes.FORBIDDEN
// ctx.body = "run in dev mode to access builder"
// return
// }
// // Builder URLs should have admin access to the API
// if (ctx.path.startsWith("/_builder/instance/_master")) {
// const {
// instance,
// publicPath,
// sharedPath,
// } = await ctx.master.getFullAccessApiForMaster()
// ctx.instance = instance
// ctx.publicPath = publicPath
// ctx.sharedPath = sharedPath
// ctx.isAuthenticated = !!ctx.instance
// } else if (ctx.path.startsWith("/_builder/instance")) {
// const builderAppName = pathParts[3]
// const instanceId = pathParts[4]
// const {
// bbInstance,
// publicPath,
// sharedPath,
// } = await ctx.master.getFullAccessApiForInstanceId(
// builderAppName,
// instanceId
// )
// ctx.instance = bbInstance
// ctx.publicPath = publicPath
// ctx.sharedPath = sharedPath
// ctx.isAuthenticated = !!ctx.instance
// }
// await next()
// } else {
// const instance = await ctx.master.getInstanceApiForSession(
// appname,
// ctx.sessionId
// )
// ctx.instance = instance.instance
// ctx.publicPath = instance.publicPath
// ctx.sharedPath = instance.sharedPath
// ctx.isAuthenticated = !!instance.instance
// await next()
// }
// })
2020-04-07 01:16:21 +12:00
router
// .get("/_builder", async ctx => {
// await send(ctx, "/index.html", { root: builderPath })
// })
2020-04-07 01:16:21 +12:00
.get("/_builder/:appname/componentlibrary", async ctx => {
const info = await componentLibraryInfo(
ctx.config,
ctx.params.appname,
ctx.query.lib
)
await send(ctx, info.components._lib || "index.js", { root: info.libDir })
})
// .get("/_builder/*", async (ctx, next) => {
// const path = ctx.path.replace("/_builder", "")
// const isFile = new RegExp(/(.+\..{1,5})/g).test(path)
// if (path.startsWith("/api/") || path.startsWith("/instance/")) {
// await next()
// } else if (isFile) {
// await send(ctx, path, { root: builderPath })
// } else {
// await send(ctx, "/index.html", { root: builderPath })
// }
// })
2020-04-08 02:12:08 +12:00
2020-04-08 04:38:01 +12:00
// Neo
2020-04-09 03:57:27 +12:00
// error handling middleware
router.use(async (ctx, next) => {
try {
await next();
} catch (err) {
console.trace(err);
2020-04-23 03:35:20 +12:00
ctx.status = err.status || err.statusCode || 500;
2020-04-09 03:57:27 +12:00
ctx.body = {
message: err.message,
2020-04-13 22:47:53 +12:00
status: ctx.status
2020-04-09 03:57:27 +12:00
};
}
});
// Legacy Routes
router.use(userRoutes.routes());
router.use(userRoutes.allowedMethods());
// router.use(appsRoutes.routes())
// router.use(appsRoutes.allowedMethods());
router.use(componentRoutes.routes());
router.use(componentRoutes.allowedMethods());
router.use(pageRoutes.routes());
router.use(pageRoutes.allowedMethods());
// Neo Routes
router.use(staticRoutes.routes());
router.use(staticRoutes.allowedMethods());
2020-04-14 03:22:30 +12:00
router.use(viewsRoutes.routes());
router.use(viewsRoutes.allowedMethods());
2020-04-13 22:47:53 +12:00
router.use(modelsRoutes.routes());
router.use(modelsRoutes.allowedMethods());
2020-04-09 03:57:27 +12:00
router.use(applicationRoutes.routes());
router.use(applicationRoutes.allowedMethods());
router.use(clientRoutes.routes());
router.use(clientRoutes.allowedMethods());
2020-04-08 04:38:01 +12:00
router.use(neoUserRoutes.routes());
router.use(neoUserRoutes.allowedMethods());
2020-04-08 02:12:08 +12:00
router.use(recordRoutes.routes());
router.use(recordRoutes.allowedMethods());
router.use(instanceRoutes.routes());
router.use(instanceRoutes.allowedMethods());
2020-04-08 04:38:01 +12:00
// end of Neo
2020-04-08 02:12:08 +12:00
// router
// .get("/:appname", async ctx => {
// await send(ctx, "/index.html", { root: ctx.publicPath })
// })
2020-04-08 02:12:08 +12:00
// .get("/:appname/*", routeHandlers.appDefault)
// .get("/_builder/instance/:appname/:instanceid/*", routeHandlers.appDefault)
2020-04-07 01:05:57 +12:00
router.use(authenticatedRoutes.routes());
router.use(authenticatedRoutes.allowedMethods());
2019-06-29 09:59:27 +12:00
return router
}