Allow creating admins on web

This commit is contained in:
Cadence Ember 2024-12-24 01:16:02 +13:00
parent c599dff590
commit 75140a5b58
4 changed files with 12 additions and 6 deletions

View file

@ -301,14 +301,15 @@ async function setUserPower(roomID, mxid, power) {
/**
* Set a user's power level for a whole room hierarchy.
* @param {string} roomID
* @param {string} spaceID
* @param {string} mxid
* @param {number} power
*/
async function setUserPowerCascade(roomID, mxid, power) {
assert(roomID[0] === "!")
async function setUserPowerCascade(spaceID, mxid, power) {
assert(spaceID[0] === "!")
assert(mxid[0] === "@")
const rooms = await getFullHierarchy(roomID)
const rooms = await getFullHierarchy(spaceID)
await setUserPower(spaceID, mxid, power)
for (const room of rooms) {
await setUserPower(room.room_id, mxid, power)
}

View file

@ -64,6 +64,7 @@ block body
select#permissions(name="permissions")
option(value="default") Default
option(value="moderator") Moderator
option(value="admin") Admin
input(type="hidden" name="guild_id" value=guild_id)
.grid--row-start2
button.s-btn.s-btn__filled.htmx-indicator Invite

View file

@ -27,6 +27,7 @@ block body
select#permissions(name="permissions")
option(value="default") Default
option(value="moderator") Moderator
option(value="admin") Admin
input(type="hidden" name="nonce" value=nonce)
div
button.s-btn.s-btn__filled.htmx-indicator Invite

View file

@ -20,7 +20,7 @@ const schema = {
}),
invite: z.object({
mxid: z.string().regex(/@([^:]+):([a-z0-9:-]+\.[a-z0-9.:-]+)/),
permissions: z.enum(["default", "moderator"]),
permissions: z.enum(["default", "moderator", "admin"]),
guild_id: z.string().optional(),
nonce: z.string().optional()
}),
@ -152,7 +152,10 @@ as.router.post("/api/invite", defineEventHandler(async event => {
}
// Permissions
const powerLevel = parsedBody.permissions === "moderator" ? 50 : 0
const powerLevel =
( parsedBody.permissions === "admin" ? 100
: parsedBody.permissions === "moderator" ? 50
: 0)
await api.setUserPowerCascade(spaceID, parsedBody.mxid, powerLevel)
if (parsedBody.guild_id) {