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

View file

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

View file

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

View file

@ -20,7 +20,7 @@ const schema = {
}), }),
invite: z.object({ invite: z.object({
mxid: z.string().regex(/@([^:]+):([a-z0-9:-]+\.[a-z0-9.:-]+)/), 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(), guild_id: z.string().optional(),
nonce: z.string().optional() nonce: z.string().optional()
}), }),
@ -152,7 +152,10 @@ as.router.post("/api/invite", defineEventHandler(async event => {
} }
// Permissions // 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) await api.setUserPowerCascade(spaceID, parsedBody.mxid, powerLevel)
if (parsedBody.guild_id) { if (parsedBody.guild_id) {