forked from tsai/budibase
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 userRoutes = require("./admin/users") |
||||
|
const configRoutes = require("./admin/configs") |
||||
const groupRoutes = require("./admin/groups") |
const groupRoutes = require("./admin/groups") |
||||
const authRoutes = require("./auth") |
const authRoutes = require("./auth") |
||||
const appRoutes = require("./app") |
const appRoutes = require("./app") |
||||
|
|
||||
exports.routes = [userRoutes, groupRoutes, authRoutes, appRoutes] |
exports.routes = [configRoutes, userRoutes, groupRoutes, authRoutes, appRoutes] |
||||
|
|||||
Loading…
Reference in new issue