2022-02-25 04:13:14 +13:00
|
|
|
import appEndpoints from "./applications"
|
|
|
|
import queryEndpoints from "./queries"
|
|
|
|
import tableEndpoints from "./tables"
|
|
|
|
import rowEndpoints from "./rows"
|
|
|
|
import userEndpoints from "./users"
|
|
|
|
import usage from "../../../middleware/usageQuota"
|
|
|
|
import authorized from "../../../middleware/authorized"
|
|
|
|
import { paramResource, paramSubResource } from "../../../middleware/resourceId"
|
|
|
|
import { CtxFn } from "./utils/Endpoint"
|
2022-02-18 07:58:09 +13:00
|
|
|
const Router = require("@koa/router")
|
2022-02-23 07:40:09 +13:00
|
|
|
const {
|
|
|
|
PermissionLevels,
|
|
|
|
PermissionTypes,
|
|
|
|
} = require("@budibase/backend-core/permissions")
|
2022-02-18 07:58:09 +13:00
|
|
|
|
|
|
|
const PREFIX = "/api/public/v1"
|
|
|
|
|
2022-02-23 07:40:09 +13:00
|
|
|
const publicRouter = new Router({
|
2022-02-18 07:58:09 +13:00
|
|
|
prefix: PREFIX,
|
|
|
|
})
|
2022-02-23 07:40:09 +13:00
|
|
|
|
2022-02-25 04:13:14 +13:00
|
|
|
function addMiddleware(endpoints: any, middleware: CtxFn) {
|
2022-02-25 01:03:46 +13:00
|
|
|
if (!Array.isArray(endpoints)) {
|
|
|
|
endpoints = [endpoints]
|
|
|
|
}
|
2022-02-23 07:40:09 +13:00
|
|
|
for (let endpoint of endpoints) {
|
|
|
|
endpoint.addMiddleware(middleware)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-25 04:13:14 +13:00
|
|
|
function addToRouter(endpoints: any) {
|
2022-02-23 07:40:09 +13:00
|
|
|
for (let endpoint of endpoints) {
|
|
|
|
endpoint.apply(publicRouter)
|
|
|
|
}
|
2022-02-18 07:58:09 +13:00
|
|
|
}
|
|
|
|
|
2022-02-25 04:13:14 +13:00
|
|
|
function applyRoutes(
|
|
|
|
endpoints: any,
|
|
|
|
permType: string,
|
|
|
|
resource: string,
|
|
|
|
subResource?: string
|
|
|
|
) {
|
2022-02-23 07:40:09 +13:00
|
|
|
const paramMiddleware = subResource
|
|
|
|
? paramSubResource(resource, subResource)
|
|
|
|
: paramResource(resource)
|
|
|
|
addMiddleware(endpoints.read, paramMiddleware)
|
|
|
|
addMiddleware(endpoints.write, paramMiddleware)
|
|
|
|
addMiddleware(endpoints.read, authorized(permType, PermissionLevels.READ))
|
|
|
|
addMiddleware(endpoints.write, authorized(permType, PermissionLevels.WRITE))
|
|
|
|
addMiddleware(endpoints.write, usage)
|
|
|
|
addToRouter(endpoints.read)
|
|
|
|
addToRouter(endpoints.write)
|
|
|
|
}
|
|
|
|
|
|
|
|
applyRoutes(appEndpoints, PermissionTypes.APP, "appId")
|
|
|
|
applyRoutes(tableEndpoints, PermissionTypes.TABLE, "tableId")
|
|
|
|
applyRoutes(userEndpoints, PermissionTypes.USER, "userId")
|
|
|
|
applyRoutes(queryEndpoints, PermissionTypes.QUERY, "queryId")
|
2022-02-25 04:13:14 +13:00
|
|
|
// needs to be applied last for routing purposes, don't override other endpoints
|
|
|
|
applyRoutes(rowEndpoints, PermissionTypes.TABLE, "tableId", "rowId")
|
2022-02-23 07:40:09 +13:00
|
|
|
|
|
|
|
module.exports = publicRouter
|