Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions packages/backend/src/middleware/guildAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,12 @@ export function requireGuildModuleAccess(
next: NextFunction,
): Promise<void> => {
try {
if (!req.sessionId) {
const sessionId = req.sessionId ?? req.sessionID
if (!sessionId) {
throw AppError.unauthorized()
}

const sessionData = await sessionService.getSession(req.sessionId)
const sessionData = await sessionService.getSession(sessionId)
if (!sessionData) {
throw AppError.unauthorized('Session expired')
}
Expand All @@ -69,6 +70,8 @@ export function requireGuildModuleAccess(
}

req.guildContext = context
req.sessionId = req.sessionId ?? req.sessionID
req.userId = sessionData.userId
next()
} catch (error) {
next(error)
Expand Down
51 changes: 29 additions & 22 deletions packages/backend/src/routes/guildAutomation.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { Express, Response } from 'express'
import { requireAuth, type AuthenticatedRequest } from '../middleware/auth'
import type { AuthenticatedRequest } from '../middleware/auth'
import { requireGuildModuleAccess } from '../middleware/guildAccess'
import { validateBody, validateParams } from '../middleware/validate'
import { writeLimiter } from '../middleware/rateLimit'
import { asyncHandler } from '../middleware/asyncHandler'
Expand All @@ -26,7 +27,7 @@ function requireUserId(req: AuthenticatedRequest): string {
export function setupGuildAutomationRoutes(app: Express): void {
app.get(
'/api/guilds/:guildId/automation/manifest',
requireAuth,
requireGuildModuleAccess('settings', 'view'),
validateParams(s.guildIdParam),
asyncHandler(async (req: AuthenticatedRequest, res: Response) => {
const guildId = p(req.params.guildId)
Expand All @@ -43,7 +44,7 @@ export function setupGuildAutomationRoutes(app: Express): void {

app.put(
'/api/guilds/:guildId/automation/manifest',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
validateBody(s.guildAutomationManifestBody),
Expand All @@ -67,7 +68,7 @@ export function setupGuildAutomationRoutes(app: Express): void {

app.post(
'/api/guilds/:guildId/automation/capture',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
validateBody(s.guildAutomationManifestBody),
Expand All @@ -87,7 +88,7 @@ export function setupGuildAutomationRoutes(app: Express): void {

app.post(
'/api/guilds/:guildId/automation/plan',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
validateBody(s.guildAutomationRunBody),
Expand All @@ -110,7 +111,7 @@ export function setupGuildAutomationRoutes(app: Express): void {

app.post(
'/api/guilds/:guildId/automation/apply',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
validateBody(s.guildAutomationRunBody),
Expand All @@ -121,20 +122,23 @@ export function setupGuildAutomationRoutes(app: Express): void {
const actualState = body.actualState
? validateGuildAutomationManifest(body.actualState)
: undefined
const result = await guildAutomationService.createApplyRun(guildId, {
actualState,
initiatedBy: userId,
allowProtected: body.allowProtected === true,
runType: 'apply',
})
const result = await guildAutomationService.createApplyRun(
guildId,
{
actualState,
initiatedBy: userId,
allowProtected: body.allowProtected === true,
runType: 'apply',
},
)

res.json(result)
}),
)

app.post(
'/api/guilds/:guildId/automation/reconcile',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
validateBody(s.guildAutomationRunBody),
Expand All @@ -145,20 +149,23 @@ export function setupGuildAutomationRoutes(app: Express): void {
const actualState = body.actualState
? validateGuildAutomationManifest(body.actualState)
: undefined
const result = await guildAutomationService.createApplyRun(guildId, {
actualState,
initiatedBy: userId,
allowProtected: body.allowProtected === true,
runType: 'reconcile',
})
const result = await guildAutomationService.createApplyRun(
guildId,
{
actualState,
initiatedBy: userId,
allowProtected: body.allowProtected === true,
runType: 'reconcile',
},
)

res.json(result)
}),
)

app.get(
'/api/guilds/:guildId/automation/status',
requireAuth,
requireGuildModuleAccess('settings', 'view'),
validateParams(s.guildIdParam),
asyncHandler(async (req: AuthenticatedRequest, res: Response) => {
const guildId = p(req.params.guildId)
Expand All @@ -173,7 +180,7 @@ export function setupGuildAutomationRoutes(app: Express): void {

app.post(
'/api/guilds/:guildId/automation/cutover',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
validateBody(s.guildAutomationRunBody),
Expand All @@ -192,7 +199,7 @@ export function setupGuildAutomationRoutes(app: Express): void {

app.post(
'/api/guilds/:guildId/automation/presets/criativaria/apply',
requireAuth,
requireGuildModuleAccess('settings', 'manage'),
writeLimiter,
validateParams(s.guildIdParam),
asyncHandler(async (req: AuthenticatedRequest, res: Response) => {
Expand Down
Loading
Loading