Spaces:
Runtime error
Runtime error
File size: 3,201 Bytes
4782147 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | "use server";
import { validatedActionWithAdminPermission } from "lib/action-utils";
import { headers } from "next/headers";
import { auth } from "auth/server";
import { DEFAULT_USER_ROLE, userRolesInfo } from "app-types/roles";
import {
UpdateUserRoleSchema,
UpdateUserRoleActionState,
UpdateUserBanStatusSchema,
UpdateUserBanStatusActionState,
} from "./validations";
import logger from "lib/logger";
import { getTranslations } from "next-intl/server";
import { getUser } from "lib/user/server";
export const updateUserRolesAction = validatedActionWithAdminPermission(
UpdateUserRoleSchema,
async (data, _formData, userSession): Promise<UpdateUserRoleActionState> => {
const t = await getTranslations("Admin.UserRoles");
const tCommon = await getTranslations("User.Profile.common");
const { userId, role: roleInput } = data;
const role = roleInput || DEFAULT_USER_ROLE;
if (userSession.user.id === userId) {
return {
success: false,
message: t("cannotUpdateOwnRole"),
};
}
await auth.api.setRole({
body: { userId, role: role as "user" | "admin" },
headers: await headers(),
});
await auth.api.revokeUserSessions({
body: { userId },
headers: await headers(),
});
const user = await getUser(userId);
if (!user) {
return {
success: false,
message: tCommon("userNotFound"),
};
}
return {
success: true,
message: t("roleUpdatedSuccessfullyTo", {
role: userRolesInfo[role].label,
}),
user,
};
},
);
export const updateUserBanStatusAction = validatedActionWithAdminPermission(
UpdateUserBanStatusSchema,
async (
data,
_formData,
userSession,
): Promise<UpdateUserBanStatusActionState> => {
const tCommon = await getTranslations("User.Profile.common");
const { userId, banned, banReason } = data;
if (userSession.user.id === userId) {
return {
success: false,
message: tCommon("cannotBanUnbanYourself"),
};
}
try {
if (!banned) {
await auth.api.banUser({
body: {
userId,
banReason:
banReason ||
(await getTranslations("User.Profile.common"))("bannedByAdmin"),
},
headers: await headers(),
});
await auth.api.revokeUserSessions({
body: { userId },
headers: await headers(),
});
} else {
await auth.api.unbanUser({
body: { userId },
headers: await headers(),
});
}
const user = await getUser(userId);
if (!user) {
return {
success: false,
message: tCommon("userNotFound"),
};
}
return {
success: true,
message: user.banned
? tCommon("userBannedSuccessfully")
: tCommon("userUnbannedSuccessfully"),
user,
};
} catch (error) {
logger.error(error);
return {
success: false,
message: tCommon("failedToUpdateUserStatus"),
error: error instanceof Error ? error.message : tCommon("unknownError"),
};
}
},
);
|