2026-05-06 00:10:45 +08:00

86 lines
2.3 KiB
TypeScript

"use server";
import { revalidatePath } from "next/cache";
import { createStableId } from "@/lib/password";
import { requireAdminAccess } from "@/lib/session";
import {
getSubscriptionSettings,
saveMainProxyGroupMemberSlugs,
saveProxyGroups,
saveSubscriptionSettings,
} from "@/lib/store";
function readUniqueMemberSlugs(formData: FormData) {
const seen = new Set<string>();
return formData.getAll("member_slugs").flatMap((value) => {
const slug = String(value).trim();
if (!slug || seen.has(slug)) {
return [];
}
seen.add(slug);
return [slug];
});
}
export async function saveSubscriptionSettingsAction(formData: FormData) {
await requireAdminAccess();
await saveSubscriptionSettings({
template: String(formData.get("template") ?? ""),
extraProxyGroups: String(formData.get("extra_proxy_groups") ?? ""),
profileName: String(formData.get("profile_name") ?? "").trim() || "FeieProxy",
});
revalidatePath("/admin/subscriptions");
}
export async function saveProxyGroupAction(formData: FormData) {
await requireAdminAccess();
const settings = await getSubscriptionSettings();
const id = String(formData.get("id") ?? "").trim() || createStableId();
const name = String(formData.get("name") ?? "").trim();
const memberSlugs = readUniqueMemberSlugs(formData);
if (!name) {
return;
}
const nextGroup = {
id,
name,
type: "select",
memberSlugs,
} as const;
const existingIndex = settings.proxyGroups.findIndex((group) => group.id === id);
const proxyGroups = [...settings.proxyGroups];
if (existingIndex === -1) {
proxyGroups.push(nextGroup);
} else {
proxyGroups[existingIndex] = nextGroup;
}
await saveProxyGroups(proxyGroups);
revalidatePath("/admin/subscriptions");
}
export async function saveMainProxyGroupAction(formData: FormData) {
await requireAdminAccess();
await saveMainProxyGroupMemberSlugs(readUniqueMemberSlugs(formData));
revalidatePath("/admin/subscriptions");
}
export async function deleteProxyGroupAction(formData: FormData) {
await requireAdminAccess();
const settings = await getSubscriptionSettings();
const id = String(formData.get("id") ?? "").trim();
await saveProxyGroups(settings.proxyGroups.filter((group) => group.id !== id));
revalidatePath("/admin/subscriptions");
}