1
0
Fork 0
mirror of synced 2024-06-29 11:31:06 +12:00
budibase/packages/worker/src/api/routes/global/users.js

107 lines
2.9 KiB
JavaScript
Raw Normal View History

2021-04-19 22:34:07 +12:00
const Router = require("@koa/router")
const controller = require("../../controllers/global/users")
2022-07-22 22:50:51 +12:00
const { joiValidator } = require("@budibase/backend-core/auth")
const { adminOnly } = require("@budibase/backend-core/auth")
2021-04-19 22:34:07 +12:00
const Joi = require("joi")
const cloudRestricted = require("../../../middleware/cloudRestricted")
2022-04-08 12:28:22 +12:00
const { users } = require("../validation")
const selfController = require("../../controllers/global/self")
const { builderOrAdmin } = require("@budibase/backend-core/auth")
2021-04-19 22:34:07 +12:00
const router = new Router()
2021-04-19 22:34:07 +12:00
function buildAdminInitValidation() {
2021-05-25 01:56:23 +12:00
return joiValidator.body(
Joi.object({
email: Joi.string().required(),
password: Joi.string(),
tenantId: Joi.string().required(),
2021-05-25 01:56:23 +12:00
})
.required()
.unknown(false)
)
}
function buildInviteValidation() {
// prettier-ignore
return joiValidator.body(Joi.object({
email: Joi.string().required(),
userInfo: Joi.object().optional(),
}).required())
}
2022-07-05 20:21:59 +12:00
function buildInviteMultipleValidation() {
// prettier-ignore
return joiValidator.body(Joi.array().required().items(
Joi.object({
email: Joi.string(),
userInfo: Joi.object().optional(),
})
))
2022-07-05 20:21:59 +12:00
}
function buildInviteAcceptValidation() {
// prettier-ignore
return joiValidator.body(Joi.object({
inviteCode: Joi.string().required(),
password: Joi.string().required(),
}).required().unknown(true))
2021-04-19 22:34:07 +12:00
}
router
.post(
"/api/global/users",
adminOnly,
2022-04-08 12:28:22 +12:00
users.buildUserSaveValidation(),
controller.save
)
.post(
"/api/global/users/bulk",
adminOnly,
users.buildUserBulkUserValidation(),
controller.bulkUpdate
)
2022-06-02 02:20:56 +12:00
.get("/api/global/users", builderOrAdmin, controller.fetch)
.post("/api/global/users/search", builderOrAdmin, controller.search)
.delete("/api/global/users/:id", adminOnly, controller.destroy)
2022-08-04 01:37:41 +12:00
.get("/api/global/users/count/:appId", builderOrAdmin, controller.countByApp)
.get("/api/global/roles/:appId")
.post(
"/api/global/users/invite",
adminOnly,
buildInviteValidation(),
controller.invite
)
2022-07-05 20:21:59 +12:00
.post(
2022-08-04 06:20:33 +12:00
"/api/global/users/multi/invite",
2022-07-05 20:21:59 +12:00
adminOnly,
buildInviteMultipleValidation(),
controller.inviteMultiple
)
// non-global endpoints
2021-05-06 02:19:44 +12:00
.post(
"/api/global/users/invite/accept",
2021-05-06 02:19:44 +12:00
buildInviteAcceptValidation(),
controller.inviteAccept
)
2021-05-25 01:56:23 +12:00
.post(
"/api/global/users/init",
cloudRestricted,
2021-05-25 01:56:23 +12:00
buildAdminInitValidation(),
controller.adminUser
)
2021-09-18 00:41:22 +12:00
.get("/api/global/users/tenant/:id", controller.tenantUserLookup)
// global endpoint but needs to come at end (blocks other endpoints otherwise)
.get("/api/global/users/:id", builderOrAdmin, controller.find)
// DEPRECATED - use new versions with self API
.get("/api/global/users/self", selfController.getSelf)
.post(
"/api/global/users/self",
2022-04-08 12:28:22 +12:00
users.buildUserSaveValidation(true),
selfController.updateSelf
)
2021-04-19 22:34:07 +12:00
module.exports = router