mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2024-09-20 15:26:15 +08:00
added toggle banned endpoint
This commit is contained in:
parent
45eb1e8a40
commit
0107530eae
|
@ -831,3 +831,24 @@ export async function reportUser(
|
|||
|
||||
return new MonkeyResponse("User reported");
|
||||
}
|
||||
|
||||
export async function toggleBan(
|
||||
req: MonkeyTypes.Request
|
||||
): Promise<MonkeyResponse> {
|
||||
const { uid } = req.body;
|
||||
|
||||
const user = await UserDAL.getUser(uid, "toggle ban");
|
||||
const discordId = user.discordId;
|
||||
|
||||
if (user.banned) {
|
||||
UserDAL.setBanned(uid, false);
|
||||
if (discordId) GeorgeQueue.userBanned(discordId, false);
|
||||
} else {
|
||||
UserDAL.setBanned(uid, true);
|
||||
if (discordId) GeorgeQueue.userBanned(discordId, true);
|
||||
}
|
||||
|
||||
return new MonkeyResponse(`Ban toggled`, {
|
||||
banned: !user.banned,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import {
|
|||
validateRequest,
|
||||
validateConfiguration,
|
||||
checkUserPermissions,
|
||||
useInProduction,
|
||||
} from "../../middlewares/api-utils";
|
||||
import * as RateLimit from "../../middlewares/rate-limit";
|
||||
import { withApeRateLimiter } from "../../middlewares/ape-rate-limit";
|
||||
|
@ -15,6 +16,12 @@ import filterSchema from "../schemas/filter-schema";
|
|||
|
||||
const router = Router();
|
||||
|
||||
const checkIfUserIsAdmin = checkUserPermissions({
|
||||
criteria: (user) => {
|
||||
return !!user.admin;
|
||||
},
|
||||
});
|
||||
|
||||
const tagNameValidation = joi
|
||||
.string()
|
||||
.required()
|
||||
|
@ -614,4 +621,11 @@ router.post(
|
|||
asyncHandler(UserController.sendForgotPasswordEmail)
|
||||
);
|
||||
|
||||
router.post(
|
||||
"/toggleBan",
|
||||
RateLimit.onePerMin,
|
||||
useInProduction([authenticateRequest(), checkIfUserIsAdmin]),
|
||||
asyncHandler(UserController.toggleBan)
|
||||
);
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -991,3 +991,11 @@ export async function updateStreak(
|
|||
|
||||
return streak.length;
|
||||
}
|
||||
|
||||
export async function setBanned(uid: string, banned: boolean): Promise<void> {
|
||||
if (banned) {
|
||||
await getUsersCollection().updateOne({ uid }, { $set: { banned: true } });
|
||||
} else {
|
||||
await getUsersCollection().updateOne({ uid }, { $unset: { banned: "" } });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,6 +98,13 @@ export async function incrementBadAuth(
|
|||
} catch (error) {}
|
||||
}
|
||||
|
||||
export const onePerMin = rateLimit({
|
||||
windowMs: 60 * 1000,
|
||||
max: 1 * REQUEST_MULTIPLIER,
|
||||
keyGenerator: getKeyWithUid,
|
||||
handler: customHandler,
|
||||
});
|
||||
|
||||
// Config Routing
|
||||
export const configUpdate = rateLimit({
|
||||
windowMs: ONE_HOUR_MS,
|
||||
|
|
|
@ -45,6 +45,12 @@ class GeorgeQueue extends MonkeyQueue<GeorgeTask> {
|
|||
await this.add(taskName, awardChallengeTask);
|
||||
}
|
||||
|
||||
async userBanned(discordId: string, banned: boolean): Promise<void> {
|
||||
const taskName = "userBanned";
|
||||
const userBannedTask = buildGeorgeTask(taskName, [discordId, banned]);
|
||||
await this.add(taskName, userBannedTask);
|
||||
}
|
||||
|
||||
async announceLeaderboardUpdate(
|
||||
newRecords: any[],
|
||||
leaderboardId: string
|
||||
|
|
1
backend/src/types/types.d.ts
vendored
1
backend/src/types/types.d.ts
vendored
|
@ -178,6 +178,7 @@ declare namespace MonkeyTypes {
|
|||
uid: string;
|
||||
quoteMod?: boolean;
|
||||
configurationMod?: boolean;
|
||||
admin?: boolean;
|
||||
canReport?: boolean;
|
||||
banned?: boolean;
|
||||
canManageApeKeys?: boolean;
|
||||
|
|
Loading…
Reference in a new issue