Skip to content

Commit

Permalink
feat: custom domain vercel status
Browse files Browse the repository at this point in the history
  • Loading branch information
eddiejaoude committed Nov 6, 2023
1 parent a60cd72 commit 18c10bc
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 5 deletions.
24 changes: 21 additions & 3 deletions pages/account/manage/premium.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export default function ManageSettings({
});
const [hideNavbar, setHideNavbar] = useState(settings.hideNavbar || false);
const [hideFooter, setHideFooter] = useState(settings.hideFooter || false);
const [vercel, setVercel] = useState(settings.vercel);
const [domain, setDomain] = useState(
settings.domain?.replaceAll("|", ".") || "",
); // TODO: use getter/setter instead
Expand All @@ -80,6 +81,9 @@ export default function ManageSettings({
});
}

setDomain(updatedSettings.domain.replaceAll("|", ".") || "");
setVercel(updatedSettings.vercel);

return setShowNotification({
show: true,
type: "success",
Expand Down Expand Up @@ -174,14 +178,15 @@ export default function ManageSettings({
label={`Domain (for example: ${username}.io)`}
value={domain}
disabled={!enableForm}
onChange={(e) =>
onChange={(e) => {
setVercel({});
setDomain(
e.target.value.replace(
/http:\/\/|https:\/\//,
"",
),
)
}
);
}}
/>
</div>
<p className="text-sm text-primary-medium-low dark:text-primary-low-high">
Expand All @@ -190,6 +195,19 @@ export default function ManageSettings({
Learn more about custom domains
</Link>
</p>
{vercel?.misconfigured !== undefined &&
domain?.length > 0 && (
<p className="text-sm text-primary-medium-low dark:text-primary-low-high">
{vercel.misconfigured ? (
<Alert type="error" message="DNS misconfigured" />
) : (
<Alert
type="success"
message="DNS correctly configured"
/>
)}
</p>
)}
</div>
<div className="mt-10 border-t border-primary-low-medium/30 pt-6 sm:flex sm:items-center sm:justify-between">
<Button primary={true} disabled={!enableForm}>
Expand Down
55 changes: 53 additions & 2 deletions pages/api/account/manage/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,38 @@ async function updateDomain(username, domain = "") {
);
}

async function vercelDomainStatus(username, domain) {
const log = logger.child({ username });
let domainRes;
const domainUrl = `https://api.vercel.com/v10/domains/${domain}/config?teamId=${serverEnv.VERCEL_TEAM_ID}`;
const domainUrlError = `failed get status for custom domain "${domain}" for username: ${username}`;
let domainJson;
try {
domainRes = await fetch(domainUrl, {
method: "GET",
headers: {
Authorization: `Bearer ${serverEnv.VERCEL_AUTH_TOKEN}`,
"Content-Type": "application/json",
},
});
domainJson = await domainRes.json();
log.info(
domainJson,
`retrieve domain status for ${domain} for: ${username}`,
);
} catch (e) {
log.error(e, domainUrlError);
return { error: domainUrlError };
}

if (domainJson.error) {
log.error(domainUrlError);
return { error: domainUrlError };
}

return domainJson;
}

export async function getSettingsApi(username) {
await connectMongo();
const log = logger.child({ username });
Expand All @@ -50,7 +82,17 @@ export async function getSettingsApi(username) {
return { error: "Profile not found." };
}

return JSON.parse(JSON.stringify(getProfile.settings));
let data = { ...getProfile.settings };

if (getProfile.settings?.domain) {
const vercel = await vercelDomainStatus(
username,
getProfile.settings.domain,
);
data.vercel = vercel;
}

return JSON.parse(JSON.stringify(data));
}

export async function updateSettingsApi(context, username, data) {
Expand Down Expand Up @@ -83,6 +125,7 @@ export async function updateSettingsApi(context, username, data) {
log.error(e, error);
return { error };
}
let result = { ...getProfile.settings };

beforeUpdate.domain = beforeUpdate.domain.replaceAll("|", "."); // TODO: use getter/setter instead
if (data.domain !== beforeUpdate.domain) {
Expand Down Expand Up @@ -207,6 +250,14 @@ export async function updateSettingsApi(context, username, data) {
log.error(domainProjectAddJsonError);
return { error: domainProjectAddJsonError };
}

if (getProfile.settings?.domain) {
const vercel = await vercelDomainStatus(
username,
getProfile.settings.domain,
);
result.vercel = vercel;
}
}
}

Expand All @@ -224,5 +275,5 @@ export async function updateSettingsApi(context, username, data) {
);
}

return JSON.parse(JSON.stringify(getProfile.settings));
return JSON.parse(JSON.stringify(result));
}

0 comments on commit 18c10bc

Please sign in to comment.