86 lines
2.3 KiB
TypeScript
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");
|
|
}
|