mirror of
https://github.com/roleypoly/roleypoly.git
synced 2025-04-25 03:49:11 +00:00
fix: missing tools on a composable handler
This commit is contained in:
parent
76a03c2d2c
commit
d5acea4abb
1 changed files with 55 additions and 52 deletions
|
@ -17,7 +17,7 @@ import {
|
||||||
SessionData,
|
SessionData,
|
||||||
UserGuildPermissions,
|
UserGuildPermissions,
|
||||||
} from '@roleypoly/types';
|
} from '@roleypoly/types';
|
||||||
import { AuthType, discordFetch, Handler } from '@roleypoly/worker-utils';
|
import { AuthType, discordFetch, Handler, HandlerTools } from '@roleypoly/worker-utils';
|
||||||
import { cacheLayer, CacheLayerOptions, isRoot, withSession } from './api-tools';
|
import { cacheLayer, CacheLayerOptions, isRoot, withSession } from './api-tools';
|
||||||
import { botClientID, botToken } from './config';
|
import { botClientID, botToken } from './config';
|
||||||
import { GuildData, Guilds } from './kv';
|
import { GuildData, Guilds } from './kv';
|
||||||
|
@ -229,58 +229,61 @@ export const asEditor = (
|
||||||
options: AsEditorOptions = {},
|
options: AsEditorOptions = {},
|
||||||
wrappedHandler: (session: SessionData, userGuildContext: UserGuildContext) => Handler
|
wrappedHandler: (session: SessionData, userGuildContext: UserGuildContext) => Handler
|
||||||
): Handler =>
|
): Handler =>
|
||||||
withSession((session: SessionData) => async (request: Request): Promise<Response> => {
|
withSession(
|
||||||
const { rateLimitKey, rateLimitTimeoutSeconds } = options;
|
(session: SessionData) =>
|
||||||
const url = new URL(request.url);
|
async (request: Request, tools: HandlerTools): Promise<Response> => {
|
||||||
const [, , guildID] = url.pathname.split('/');
|
const { rateLimitKey, rateLimitTimeoutSeconds } = options;
|
||||||
if (!guildID) {
|
const url = new URL(request.url);
|
||||||
return missingParameters();
|
const [, , guildID] = url.pathname.split('/');
|
||||||
}
|
if (!guildID) {
|
||||||
|
return missingParameters();
|
||||||
|
}
|
||||||
|
|
||||||
let rateLimit: null | ReturnType<typeof useGuildRateLimiter> = null;
|
let rateLimit: null | ReturnType<typeof useGuildRateLimiter> = null;
|
||||||
if (rateLimitKey) {
|
if (rateLimitKey) {
|
||||||
rateLimit = await useGuildRateLimiter(
|
rateLimit = await useGuildRateLimiter(
|
||||||
guildID,
|
guildID,
|
||||||
rateLimitKey,
|
rateLimitKey,
|
||||||
rateLimitTimeoutSeconds || 60
|
rateLimitTimeoutSeconds || 60
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const userIsRoot = isRoot(session.user.id);
|
const userIsRoot = isRoot(session.user.id);
|
||||||
|
|
||||||
let guild = session.guilds.find((guild) => guild.id === guildID);
|
let guild = session.guilds.find((guild) => guild.id === guildID);
|
||||||
if (!guild) {
|
if (!guild) {
|
||||||
if (!userIsRoot) {
|
if (!userIsRoot) {
|
||||||
return notFound();
|
return notFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
const fullGuild = await getGuild(guildID);
|
||||||
|
if (!fullGuild) {
|
||||||
|
return notFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
guild = {
|
||||||
|
id: fullGuild.id,
|
||||||
|
name: fullGuild.name,
|
||||||
|
icon: fullGuild.icon,
|
||||||
|
permissionLevel: UserGuildPermissions.Admin, // root will always be considered admin
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const userIsManager = guild.permissionLevel === UserGuildPermissions.Manager;
|
||||||
|
const userIsAdmin = guild.permissionLevel === UserGuildPermissions.Admin;
|
||||||
|
|
||||||
|
if (!userIsAdmin && !userIsManager) {
|
||||||
|
return lowPermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!userIsRoot && rateLimit && (await rateLimit())) {
|
||||||
|
return rateLimited();
|
||||||
|
}
|
||||||
|
|
||||||
|
return await wrappedHandler(session, {
|
||||||
|
guildID,
|
||||||
|
guild,
|
||||||
|
url,
|
||||||
|
})(request, tools);
|
||||||
}
|
}
|
||||||
|
);
|
||||||
const fullGuild = await getGuild(guildID);
|
|
||||||
if (!fullGuild) {
|
|
||||||
return notFound();
|
|
||||||
}
|
|
||||||
|
|
||||||
guild = {
|
|
||||||
id: fullGuild.id,
|
|
||||||
name: fullGuild.name,
|
|
||||||
icon: fullGuild.icon,
|
|
||||||
permissionLevel: UserGuildPermissions.Admin, // root will always be considered admin
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const userIsManager = guild.permissionLevel === UserGuildPermissions.Manager;
|
|
||||||
const userIsAdmin = guild.permissionLevel === UserGuildPermissions.Admin;
|
|
||||||
|
|
||||||
if (!userIsAdmin && !userIsManager) {
|
|
||||||
return lowPermissions();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!userIsRoot && rateLimit && (await rateLimit())) {
|
|
||||||
return rateLimited();
|
|
||||||
}
|
|
||||||
|
|
||||||
return await wrappedHandler(session, {
|
|
||||||
guildID,
|
|
||||||
guild,
|
|
||||||
url,
|
|
||||||
})(request);
|
|
||||||
});
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue