feat: gate destructive moderation endpoints to moderator+ role
This commit is contained in:
@@ -6,16 +6,13 @@ import {
|
|||||||
user,
|
user,
|
||||||
} from "@/lib/db/schema"
|
} from "@/lib/db/schema"
|
||||||
import { eq, desc, sql, and, ilike } from "drizzle-orm"
|
import { eq, desc, sql, and, ilike } from "drizzle-orm"
|
||||||
import {
|
import { requireModeratorOrAdmin } from "@/lib/auth/guard"
|
||||||
requireContributorOrAdmin,
|
|
||||||
requireAdmin,
|
|
||||||
} from "@/lib/auth/guard"
|
|
||||||
|
|
||||||
export const adminCommentRoutes = new Elysia({ prefix: "/admin", detail: { tags: ["Admin"] } })
|
export const adminCommentRoutes = new Elysia({ prefix: "/admin", detail: { tags: ["Admin"] } })
|
||||||
.get(
|
.get(
|
||||||
"/comments",
|
"/comments",
|
||||||
async ({ query, request, set }) => {
|
async ({ query, request, set }) => {
|
||||||
const guard = await requireContributorOrAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -95,7 +92,7 @@ export const adminCommentRoutes = new Elysia({ prefix: "/admin", detail: { tags:
|
|||||||
.patch(
|
.patch(
|
||||||
"/comments/:id/remove",
|
"/comments/:id/remove",
|
||||||
async ({ params, request, set }) => {
|
async ({ params, request, set }) => {
|
||||||
const guard = await requireAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -130,7 +127,7 @@ export const adminCommentRoutes = new Elysia({ prefix: "/admin", detail: { tags:
|
|||||||
.patch(
|
.patch(
|
||||||
"/comments/:id/restore",
|
"/comments/:id/restore",
|
||||||
async ({ params, request, set }) => {
|
async ({ params, request, set }) => {
|
||||||
const guard = await requireAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { fuzzySearchTerm } from "@/lib/db/search"
|
|||||||
import {
|
import {
|
||||||
requireContributorOrAdmin,
|
requireContributorOrAdmin,
|
||||||
requireAdmin,
|
requireAdmin,
|
||||||
|
requireModeratorOrAdmin,
|
||||||
} from "@/lib/auth/guard"
|
} from "@/lib/auth/guard"
|
||||||
|
|
||||||
export const adminPerformanceRoutes = new Elysia({ prefix: "/admin", detail: { tags: ["Admin"] } })
|
export const adminPerformanceRoutes = new Elysia({ prefix: "/admin", detail: { tags: ["Admin"] } })
|
||||||
@@ -188,7 +189,7 @@ export const adminPerformanceRoutes = new Elysia({ prefix: "/admin", detail: { t
|
|||||||
.patch(
|
.patch(
|
||||||
"/performance/:id/remove",
|
"/performance/:id/remove",
|
||||||
async ({ params, body, request, set }) => {
|
async ({ params, body, request, set }) => {
|
||||||
const guard = await requireAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -229,7 +230,7 @@ export const adminPerformanceRoutes = new Elysia({ prefix: "/admin", detail: { t
|
|||||||
.delete(
|
.delete(
|
||||||
"/performance/:id/hard-delete",
|
"/performance/:id/hard-delete",
|
||||||
async ({ params, request, set }) => {
|
async ({ params, request, set }) => {
|
||||||
const guard = await requireAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -259,7 +260,7 @@ export const adminPerformanceRoutes = new Elysia({ prefix: "/admin", detail: { t
|
|||||||
.patch(
|
.patch(
|
||||||
"/performance/:id/restore",
|
"/performance/:id/restore",
|
||||||
async ({ params, request, set }) => {
|
async ({ params, request, set }) => {
|
||||||
const guard = await requireAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ import {
|
|||||||
user,
|
user,
|
||||||
} from "@/lib/db/schema"
|
} from "@/lib/db/schema"
|
||||||
import { eq, desc, sql, and, inArray } from "drizzle-orm"
|
import { eq, desc, sql, and, inArray } from "drizzle-orm"
|
||||||
import { requireContributorOrAdmin } from "@/lib/auth/guard"
|
import { requireModeratorOrAdmin } from "@/lib/auth/guard"
|
||||||
|
|
||||||
export const adminReportRoutes = new Elysia({ prefix: "/admin", detail: { tags: ["Admin"] } })
|
export const adminReportRoutes = new Elysia({ prefix: "/admin", detail: { tags: ["Admin"] } })
|
||||||
.get(
|
.get(
|
||||||
"/reports",
|
"/reports",
|
||||||
async ({ query, request, set }) => {
|
async ({ query, request, set }) => {
|
||||||
const guard = await requireContributorOrAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -144,7 +144,7 @@ export const adminReportRoutes = new Elysia({ prefix: "/admin", detail: { tags:
|
|||||||
.patch(
|
.patch(
|
||||||
"/reports/:id/status",
|
"/reports/:id/status",
|
||||||
async ({ params, body, request, set }) => {
|
async ({ params, body, request, set }) => {
|
||||||
const guard = await requireContributorOrAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { Elysia, t } from "elysia"
|
|||||||
import { db } from "@/lib/db/index"
|
import { db } from "@/lib/db/index"
|
||||||
import { communitySuggestions, games, user, suggestionStatusEnum } from "@/lib/db/schema"
|
import { communitySuggestions, games, user, suggestionStatusEnum } from "@/lib/db/schema"
|
||||||
import { eq, and, desc, sql, ilike } from "drizzle-orm"
|
import { eq, and, desc, sql, ilike } from "drizzle-orm"
|
||||||
import { requireAuth, requireContributorOrAdmin } from "@/lib/auth/guard"
|
import { requireAuth, requireModeratorOrAdmin } from "@/lib/auth/guard"
|
||||||
|
|
||||||
const DISCORD_WEBHOOK_URL = process.env.DISCORD_WEBHOOK_URL
|
const DISCORD_WEBHOOK_URL = process.env.DISCORD_WEBHOOK_URL
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ export const communitySuggestionRoutes = new Elysia({
|
|||||||
.get(
|
.get(
|
||||||
"/admin",
|
"/admin",
|
||||||
async ({ query, request, set }) => {
|
async ({ query, request, set }) => {
|
||||||
const guard = await requireContributorOrAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -247,7 +247,7 @@ export const communitySuggestionRoutes = new Elysia({
|
|||||||
.get(
|
.get(
|
||||||
"/pending",
|
"/pending",
|
||||||
async ({ request, set }) => {
|
async ({ request, set }) => {
|
||||||
const guard = await requireContributorOrAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
@@ -280,7 +280,7 @@ export const communitySuggestionRoutes = new Elysia({
|
|||||||
.patch(
|
.patch(
|
||||||
"/:suggestionId/review",
|
"/:suggestionId/review",
|
||||||
async ({ params, body, request, set }) => {
|
async ({ params, body, request, set }) => {
|
||||||
const guard = await requireContributorOrAdmin(request.headers)
|
const guard = await requireModeratorOrAdmin(request.headers)
|
||||||
if (!guard.ok) {
|
if (!guard.ok) {
|
||||||
set.status = guard.status
|
set.status = guard.status
|
||||||
return { error: guard.error }
|
return { error: guard.error }
|
||||||
|
|||||||
Reference in New Issue
Block a user