54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
export function mergeDmAllowFromSources(params: {
|
|
allowFrom?: Array<string | number>;
|
|
storeAllowFrom?: Array<string | number>;
|
|
dmPolicy?: string;
|
|
}): string[] {
|
|
const storeEntries = params.dmPolicy === "allowlist" ? [] : (params.storeAllowFrom ?? []);
|
|
return [...(params.allowFrom ?? []), ...storeEntries]
|
|
.map((value) => String(value).trim())
|
|
.filter(Boolean);
|
|
}
|
|
|
|
export function resolveGroupAllowFromSources(params: {
|
|
allowFrom?: Array<string | number>;
|
|
groupAllowFrom?: Array<string | number>;
|
|
fallbackToAllowFrom?: boolean;
|
|
}): string[] {
|
|
const explicitGroupAllowFrom =
|
|
Array.isArray(params.groupAllowFrom) && params.groupAllowFrom.length > 0
|
|
? params.groupAllowFrom
|
|
: undefined;
|
|
const scoped = explicitGroupAllowFrom
|
|
? explicitGroupAllowFrom
|
|
: params.fallbackToAllowFrom === false
|
|
? []
|
|
: (params.allowFrom ?? []);
|
|
return scoped.map((value) => String(value).trim()).filter(Boolean);
|
|
}
|
|
|
|
export function firstDefined<T>(...values: Array<T | undefined>) {
|
|
for (const value of values) {
|
|
if (typeof value !== "undefined") {
|
|
return value;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
export function isSenderIdAllowed(
|
|
allow: { entries: string[]; hasWildcard: boolean; hasEntries: boolean },
|
|
senderId: string | undefined,
|
|
allowWhenEmpty: boolean,
|
|
): boolean {
|
|
if (!allow.hasEntries) {
|
|
return allowWhenEmpty;
|
|
}
|
|
if (allow.hasWildcard) {
|
|
return true;
|
|
}
|
|
if (!senderId) {
|
|
return false;
|
|
}
|
|
return allow.entries.includes(senderId);
|
|
}
|