mirror of https://github.com/Budibase/budibase.git
7 changed files with 135 additions and 6 deletions
@ -0,0 +1,60 @@ |
|||
const CouchDB = require("../../../db") |
|||
const { StaticDatabases } = require("@budibase/auth") |
|||
const { generateConfigID } = require("@budibase/auth") |
|||
const { getConfigParams } = require("@budibase/auth/src/db/utils") |
|||
|
|||
const GLOBAL_DB = StaticDatabases.GLOBAL.name |
|||
|
|||
exports.save = async function(ctx) { |
|||
const db = new CouchDB(GLOBAL_DB) |
|||
const configDoc = ctx.request.body |
|||
|
|||
// Config does not exist yet
|
|||
if (!configDoc._id) { |
|||
configDoc._id = generateConfigID(configDoc.type, configDoc.group) |
|||
} |
|||
|
|||
try { |
|||
const response = await db.post(configDoc) |
|||
ctx.body = { |
|||
type: configDoc.type, |
|||
_id: response.id, |
|||
_rev: response.rev, |
|||
} |
|||
} catch (err) { |
|||
ctx.throw(err.status, err) |
|||
} |
|||
} |
|||
|
|||
exports.fetch = async function(ctx) { |
|||
const db = new CouchDB(GLOBAL_DB) |
|||
const response = await db.allDocs( |
|||
getConfigParams(undefined, { |
|||
include_docs: true, |
|||
}) |
|||
) |
|||
const groups = response.rows.map(row => row.doc) |
|||
ctx.body = groups |
|||
} |
|||
|
|||
exports.find = async function(ctx) { |
|||
const db = new CouchDB(GLOBAL_DB) |
|||
try { |
|||
const record = await db.get(ctx.params.id) |
|||
ctx.body = record |
|||
} catch (err) { |
|||
ctx.throw(err.status, err) |
|||
} |
|||
} |
|||
|
|||
exports.destroy = async function(ctx) { |
|||
const db = new CouchDB(GLOBAL_DB) |
|||
const { id, rev } = ctx.params |
|||
|
|||
try { |
|||
await db.remove(id, rev) |
|||
ctx.body = { message: "Config deleted successfully" } |
|||
} catch (err) { |
|||
ctx.throw(err.status, err) |
|||
} |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
const Router = require("@koa/router") |
|||
const controller = require("../../controllers/admin/configs") |
|||
const joiValidator = require("../../../middleware/joi-validator") |
|||
const { authenticated } = require("@budibase/auth") |
|||
const Joi = require("joi") |
|||
const { Configs } = require("../../../constants") |
|||
|
|||
const router = Router() |
|||
|
|||
function buildConfigSaveValidation() { |
|||
// prettier-ignore
|
|||
return joiValidator.body(Joi.object({ |
|||
type: Joi.string().valid(...Object.values(Configs)).required() |
|||
}).required().unknown(true)) |
|||
} |
|||
|
|||
router |
|||
.post( |
|||
"/api/admin/configs", |
|||
buildConfigSaveValidation(), |
|||
authenticated, |
|||
controller.save |
|||
) |
|||
.delete("/api/admin/configs/:id", authenticated, controller.destroy) |
|||
.get("/api/admin/configs", authenticated, controller.fetch) |
|||
.get("/api/admin/configs/:id", authenticated, controller.find) |
|||
|
|||
module.exports = router |
|||
@ -1,6 +1,7 @@ |
|||
const userRoutes = require("./admin/users") |
|||
const configRoutes = require("./admin/configs") |
|||
const groupRoutes = require("./admin/groups") |
|||
const authRoutes = require("./auth") |
|||
const appRoutes = require("./app") |
|||
|
|||
exports.routes = [userRoutes, groupRoutes, authRoutes, appRoutes] |
|||
exports.routes = [configRoutes, userRoutes, groupRoutes, authRoutes, appRoutes] |
|||
|
|||
Loading…
Reference in new issue