61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
|
|
import { subdomainSuffix } from "@calcom/ee/organizations/lib/orgDomains";
|
||
|
|
import logger from "@calcom/lib/logger";
|
||
|
|
|
||
|
|
import { deleteDnsRecord, addDnsRecord } from "./deploymentServices/cloudflare";
|
||
|
|
import {
|
||
|
|
deleteDomain as deleteVercelDomain,
|
||
|
|
createDomain as createVercelDomain,
|
||
|
|
} from "./deploymentServices/vercel";
|
||
|
|
|
||
|
|
const log = logger.getSubLogger({ prefix: ["domainManager/organization"] });
|
||
|
|
export const deleteDomain = async (slug: string) => {
|
||
|
|
const domain = `${slug}.${subdomainSuffix()}`;
|
||
|
|
// We must have some domain deleted
|
||
|
|
let isDomainDeleted = false;
|
||
|
|
|
||
|
|
// TODO: Ideally we should start storing the DNS and domain entries in DB for each organization
|
||
|
|
// A separate DNS record is optional but if we have it, we must have it deleted
|
||
|
|
let isDnsRecordDeleted = true;
|
||
|
|
if (process.env.VERCEL_URL) {
|
||
|
|
isDomainDeleted = await deleteVercelDomain(domain);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (process.env.CLOUDFLARE_DNS) {
|
||
|
|
isDnsRecordDeleted = await deleteDnsRecord(domain);
|
||
|
|
}
|
||
|
|
return isDomainDeleted && isDnsRecordDeleted;
|
||
|
|
return false;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const createDomain = async (slug: string) => {
|
||
|
|
const domain = `${slug}.${subdomainSuffix()}`;
|
||
|
|
|
||
|
|
// We must have some domain configured
|
||
|
|
let domainConfigured = false;
|
||
|
|
|
||
|
|
// A separate DNS record is optional but if we have it, we must have it configured
|
||
|
|
let dnsConfigured = true;
|
||
|
|
|
||
|
|
if (process.env.VERCEL_URL) {
|
||
|
|
domainConfigured = await createVercelDomain(domain);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (process.env.CLOUDFLARE_DNS) {
|
||
|
|
dnsConfigured = await addDnsRecord(domain);
|
||
|
|
}
|
||
|
|
|
||
|
|
return domainConfigured && dnsConfigured;
|
||
|
|
};
|
||
|
|
|
||
|
|
export const renameDomain = async (oldSlug: string | null, newSlug: string) => {
|
||
|
|
// First create new domain so that if it fails we still have the old domain
|
||
|
|
await createDomain(newSlug);
|
||
|
|
if (oldSlug) {
|
||
|
|
try {
|
||
|
|
await deleteDomain(oldSlug);
|
||
|
|
} catch (e) {
|
||
|
|
log.error(`renameDomain: Failed to delete old domain ${oldSlug}. Do a manual deletion if needed`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|