55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { NextRequest } from "next/server";
|
|
|
|
import { createDomain, getDomainByName } from "@/lib/dto/domains";
|
|
import { checkUserStatus } from "@/lib/dto/user";
|
|
import { getCurrentUser } from "@/lib/session";
|
|
|
|
export async function POST(req: NextRequest) {
|
|
try {
|
|
const user = checkUserStatus(await getCurrentUser());
|
|
if (user instanceof Response) return user;
|
|
if (user.role !== "ADMIN") {
|
|
return Response.json("Unauthorized", { status: 401 });
|
|
}
|
|
|
|
const { domain } = await req.json();
|
|
if (!domain) {
|
|
return Response.json("Domain name is required", { status: 400 });
|
|
}
|
|
|
|
const target_domain = await getDomainByName(domain);
|
|
if (!target_domain) {
|
|
return Response.json("Domain not found", { status: 404 });
|
|
}
|
|
|
|
const newDomain = await createDomain({
|
|
domain_name: target_domain.domain_name + "-copy",
|
|
enable_short_link: !!target_domain.enable_short_link,
|
|
enable_email: !!target_domain.enable_email,
|
|
enable_dns: !!target_domain.enable_dns,
|
|
cf_zone_id: target_domain.cf_zone_id,
|
|
cf_api_key: target_domain.cf_api_key,
|
|
cf_email: target_domain.cf_email,
|
|
cf_record_types: target_domain.cf_record_types,
|
|
cf_api_key_encrypted: false,
|
|
resend_api_key: target_domain.resend_api_key,
|
|
max_short_links: target_domain.max_short_links,
|
|
max_email_forwards: target_domain.max_email_forwards,
|
|
max_dns_records: target_domain.max_dns_records,
|
|
min_url_length: target_domain.min_url_length,
|
|
min_email_length: target_domain.min_email_length,
|
|
min_record_length: target_domain.min_record_length,
|
|
active: true,
|
|
});
|
|
|
|
if (!newDomain) {
|
|
return Response.json("Failed to create domain", { status: 400 });
|
|
}
|
|
|
|
return Response.json("Success", { status: 200 });
|
|
} catch (error) {
|
|
console.error("[Error]", error);
|
|
return Response.json(error.message || "Server error", { status: 500 });
|
|
}
|
|
}
|