refactor: share discord allowlist name matching
This commit is contained in:
parent
3bf3ebf514
commit
b697c05354
@ -103,6 +103,21 @@ export function normalizeDiscordSlug(value: string) {
|
|||||||
.replace(/^-+|-+$/g, "");
|
.replace(/^-+|-+$/g, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resolveDiscordAllowListNameMatch(
|
||||||
|
list: DiscordAllowList,
|
||||||
|
candidate: { name?: string; tag?: string },
|
||||||
|
): { matchKey: string; matchSource: "name" | "tag" } | null {
|
||||||
|
const nameSlug = candidate.name ? normalizeDiscordSlug(candidate.name) : "";
|
||||||
|
if (nameSlug && list.names.has(nameSlug)) {
|
||||||
|
return { matchKey: nameSlug, matchSource: "name" };
|
||||||
|
}
|
||||||
|
const tagSlug = candidate.tag ? normalizeDiscordSlug(candidate.tag) : "";
|
||||||
|
if (tagSlug && list.names.has(tagSlug)) {
|
||||||
|
return { matchKey: tagSlug, matchSource: "tag" };
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
export function allowListMatches(
|
export function allowListMatches(
|
||||||
list: DiscordAllowList,
|
list: DiscordAllowList,
|
||||||
candidate: { id?: string; name?: string; tag?: string },
|
candidate: { id?: string; name?: string; tag?: string },
|
||||||
@ -115,11 +130,7 @@ export function allowListMatches(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (params?.allowNameMatching === true) {
|
if (params?.allowNameMatching === true) {
|
||||||
const slug = candidate.name ? normalizeDiscordSlug(candidate.name) : "";
|
if (resolveDiscordAllowListNameMatch(list, candidate)) {
|
||||||
if (slug && list.names.has(slug)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (candidate.tag && list.names.has(normalizeDiscordSlug(candidate.tag))) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -139,13 +150,9 @@ export function resolveDiscordAllowListMatch(params: {
|
|||||||
return { allowed: true, matchKey: candidate.id, matchSource: "id" };
|
return { allowed: true, matchKey: candidate.id, matchSource: "id" };
|
||||||
}
|
}
|
||||||
if (params.allowNameMatching === true) {
|
if (params.allowNameMatching === true) {
|
||||||
const nameSlug = candidate.name ? normalizeDiscordSlug(candidate.name) : "";
|
const namedMatch = resolveDiscordAllowListNameMatch(allowList, candidate);
|
||||||
if (nameSlug && allowList.names.has(nameSlug)) {
|
if (namedMatch) {
|
||||||
return { allowed: true, matchKey: nameSlug, matchSource: "name" };
|
return { allowed: true, ...namedMatch };
|
||||||
}
|
|
||||||
const tagSlug = candidate.tag ? normalizeDiscordSlug(candidate.tag) : "";
|
|
||||||
if (tagSlug && allowList.names.has(tagSlug)) {
|
|
||||||
return { allowed: true, matchKey: tagSlug, matchSource: "tag" };
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { allowed: false };
|
return { allowed: false };
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user