diff --git a/cli/commands/setServerAdmin.ts b/cli/commands/setServerAdmin.ts index 341b70bc1..0cab8cc9f 100644 --- a/cli/commands/setServerAdmin.ts +++ b/cli/commands/setServerAdmin.ts @@ -4,19 +4,26 @@ import { eq } from "drizzle-orm"; type SetServerAdminArgs = { email: string; + remove: boolean; }; export const setServerAdmin: CommandModule<{}, SetServerAdminArgs> = { command: "set-server-admin", - describe: "Mark any user as a server admin by email address", + describe: "Add or remove server admin by email address", builder: (yargs) => { - return yargs.option("email", { - type: "string", - demandOption: true, - describe: "User email address" - }); + return yargs + .option("email", { + type: "string", + demandOption: true, + describe: "User email address" + }) + .option("remove", { + type: "boolean", + default: false, + describe: "Remove server admin status from the user" + }); }, - handler: async (argv: { email: string }) => { + handler: async (argv: SetServerAdminArgs) => { try { const email = argv.email.trim().toLowerCase(); @@ -31,6 +38,33 @@ export const setServerAdmin: CommandModule<{}, SetServerAdminArgs> = { process.exit(1); } + if (argv.remove) { + if (!user.serverAdmin) { + console.log(`User '${email}' is not a server admin`); + process.exit(0); + } + + const serverAdmins = await db + .select() + .from(users) + .where(eq(users.serverAdmin, true)); + + if (serverAdmins.length <= 1) { + console.error( + "Cannot remove server admin: at least one server admin must exist" + ); + process.exit(1); + } + + await db + .update(users) + .set({ serverAdmin: false }) + .where(eq(users.userId, user.userId)); + + console.log(`Server admin status removed from user '${email}'`); + process.exit(0); + } + if (user.serverAdmin) { console.log(`User '${email}' is already a server admin`); process.exit(0); diff --git a/src/app/[orgId]/settings/sites/create/page.tsx b/src/app/[orgId]/settings/sites/create/page.tsx index e54ee1ae4..5ea6496fd 100644 --- a/src/app/[orgId]/settings/sites/create/page.tsx +++ b/src/app/[orgId]/settings/sites/create/page.tsx @@ -526,7 +526,7 @@ export default function Page() { render={({ field }) => ( - {t("name")}w + {t("name")}