disallow partial custom domains when there's more than one DOMAIN

This commit is contained in:
2023-03-31 23:22:43 +02:00
parent b2fb3afd42
commit d86bb24474
4 changed files with 35 additions and 28 deletions

View File

@@ -25,7 +25,7 @@ the site is published at dude.helpers.fun.
If you only have one domain set up with Netlify, there's no need to include anything but the subdomain part: If you only have one domain set up with Netlify, there's no need to include anything but the subdomain part:
```bash ```bash
> pub --root-dir mysite --custom-domain dudette > pub mysite/ dudette
the site is published: http://642718842cb34f02bc6b0137--cheery-daifuku-f3417f.netlify.app the site is published: http://642718842cb34f02bc6b0137--cheery-daifuku-f3417f.netlify.app
the site is published at dudette.helpers.fun. the site is published at dudette.helpers.fun.
``` ```
@@ -33,7 +33,7 @@ the site is published at dudette.helpers.fun.
## Add A Custom Subdomain To An Already Published Site! ## Add A Custom Subdomain To An Already Published Site!
```bash ```bash
> pub --custom-domain hey.helpers.fun --domain startling-gingersnap-425138.netlify.app > pub custom hey.helpers.fun startling-gingersnap-425138.netlify.app
``` ```

View File

@@ -11,9 +11,9 @@ except KeyError:
print("Please set the environment variable NETLIFY_TOKEN") print("Please set the environment variable NETLIFY_TOKEN")
sys.exit(1) sys.exit(1)
NETLIFY_DOMAINS = os.getenv("NETLIFY_DOMAINS") or "" DOMAINS = os.getenv("NETLIFY_DOMAINS") or ""
if NETLIFY_DOMAINS: if DOMAINS:
NETLIFY_DOMAINS = NETLIFY_DOMAINS.split(",") DOMAINS = DOMAINS.split(",")
AUTH_HEADER = {"Authorization": f"Bearer {NETLIFY_TOKEN}"} AUTH_HEADER = {"Authorization": f"Bearer {NETLIFY_TOKEN}"}

View File

@@ -11,7 +11,7 @@ from .api import (
delete_site, delete_site,
deploy_page_to_netlify, deploy_page_to_netlify,
NoResult, NoResult,
NETLIFY_DOMAINS, DOMAINS,
DomainInUse, DomainInUse,
TooManyResults, TooManyResults,
) )
@@ -46,19 +46,16 @@ def cli_deploy_site(root_dir: str, custom_domain: str | None) -> None:
Deploy a folder of web pages to Netlify Deploy a folder of web pages to Netlify
""" """
if custom_domain is not None: if custom_domain is not None:
if len(NETLIFY_DOMAINS) == 0: if len(DOMAINS) == 0:
raise NoCustomDomains( raise NoCustomDomains(
"No custom domains configured in NETLIFY_DOMAINS, and a custom domain was provided" "No custom domains configured in NETLIFY_DOMAINS, and a custom domain was provided"
) )
else: if custom_domain.count(".") == 0:
if len(DOMAINS) == 1:
raise TooManyResults("Please provide a full custom domain")
custom_domain = f"{custom_domain}.{DOMAINS[0]}"
check_that_custom_domain_is_not_in_use(custom_domain) check_that_custom_domain_is_not_in_use(custom_domain)
if (
custom_domain is not None
and len(NETLIFY_DOMAINS) == 1
and custom_domain.count(".") == 0
):
custom_domain = f"{custom_domain}.{NETLIFY_DOMAINS[0]}"
deploy_page_to_netlify(pl.Path(root_dir), custom_domain) deploy_page_to_netlify(pl.Path(root_dir), custom_domain)
@@ -72,8 +69,11 @@ def cli_set_custom_domain(custom_domain: str, domain: str) -> None:
except NoResult: except NoResult:
print(f"No site found with domain '{domain}'") print(f"No site found with domain '{domain}'")
return return
if len(NETLIFY_DOMAINS) == 1 and custom_domain.count(".") == 0: if custom_domain.count(".") == 0:
custom_domain = f"{custom_domain}.{NETLIFY_DOMAINS[0]}" if len(DOMAINS) == 1:
custom_domain = f"{custom_domain}.{DOMAINS[0]}"
else:
raise TooManyResults("Please provide a full custom domain")
set_to_custom_domain(site_id, custom_domain, domain) set_to_custom_domain(site_id, custom_domain, domain)
@@ -81,8 +81,8 @@ def cli_remove_custom_domain() -> None:
""" """
Remove a custom domain from a Netlify site Remove a custom domain from a Netlify site
""" """
if len(NETLIFY_DOMAINS) == 0: if len(DOMAINS) == 0:
print("Please set the environment variable NETLIFY_DOMAINS") print("Please set the environment variable DOMAINS")
raise NoCustomDomains raise NoCustomDomains
try: try:
custom_domain = sys.argv[sys.argv.index("remove-custom") + 1] custom_domain = sys.argv[sys.argv.index("remove-custom") + 1]
@@ -92,8 +92,11 @@ def cli_remove_custom_domain() -> None:
except IndexError: except IndexError:
print("Please provide a domain") print("Please provide a domain")
return return
if len(NETLIFY_DOMAINS) == 1 and custom_domain.count(".") == 0: if custom_domain.count(".") == 0:
custom_domain = f"{custom_domain}.{NETLIFY_DOMAINS[0]}" if len(DOMAINS) == 1:
custom_domain = f"{custom_domain}.{DOMAINS[0]}"
else:
raise TooManyResults("Please provide a full custom domain")
site_id, full_custom_domain = get_site_id_from_custom_domain(custom_domain) site_id, full_custom_domain = get_site_id_from_custom_domain(custom_domain)
remove_custom_domain(site_id) remove_custom_domain(site_id)
print(f"'{full_custom_domain}' was removed") print(f"'{full_custom_domain}' was removed")
@@ -114,12 +117,15 @@ def cli_delete_site() -> None:
try: try:
site_id, full_domain = get_site_id_from_netlify_domain(domain) site_id, full_domain = get_site_id_from_netlify_domain(domain)
except NoResult: except NoResult:
if len(NETLIFY_DOMAINS) == 0: if len(DOMAINS) == 0:
raise NoCustomDomains( raise NoCustomDomains(
"No custom domains configured in NETLIFY_DOMAINS, and couldn't find a site with that domain" "No custom domains configured in NETLIFY_DOMAINS, and couldn't find a site with that domain"
) )
if domain.count(".") == 0 and len(NETLIFY_DOMAINS) == 1: if domain.count(".") == 0:
domain = f"{domain}.{NETLIFY_DOMAINS[0]}" if len(DOMAINS) == 1:
domain = f"{domain}.{DOMAINS[0]}"
else:
raise TooManyResults("Please provide a full custom domain")
try: try:
site_id, full_domain = get_site_id_from_custom_domain(domain) site_id, full_domain = get_site_id_from_custom_domain(domain)
except NoResult: except NoResult:
@@ -134,14 +140,15 @@ def cli_list_sites() -> None:
List all sites on Netlify List all sites on Netlify
""" """
sites = get_all_sites() sites = get_all_sites()
print()
print("sites without custom domains:") print("sites without custom domains:")
for site in sites: for site in sites:
if site["custom_domain"] is None: if site["custom_domain"] is None:
print(f"{site['name']}: {site['url']}") print(f"{site['name']}: {site['url']}")
print() print()
print("sites with custom domains:") print("sites with custom domains:")
print()
for site in sites: for site in sites:
if site["custom_domain"] is not None: if site["custom_domain"] is not None:
print(f"{site['name']}: {site['url']}") print(f"{site['name']}: {site['url']}")
@@ -163,11 +170,11 @@ def main() -> None:
if "delete" in sys.argv or "remove" in sys.argv: if "delete" in sys.argv or "remove" in sys.argv:
try: try:
cli_delete_site() cli_delete_site()
except (NoCustomDomains, NoResult) as e: except (NoCustomDomains, NoResult, TooManyResults) as e:
print(str(e)) print(str(e))
return return
if "custom" in sys.argv: if "custom" in sys.argv:
if len(NETLIFY_DOMAINS) == 0: if len(DOMAINS) == 0:
print("No custom domains configured in NETLIFY_DOMAINS") print("No custom domains configured in NETLIFY_DOMAINS")
return return
args = sys.argv[2:] args = sys.argv[2:]

View File

@@ -3,7 +3,7 @@ from setuptools import setup
setup( setup(
name="publify", name="publify",
version="0.1.8", version="0.1.9",
description="A CLI for publishing sites to Netlify and assigning custom domains to them.", description="A CLI for publishing sites to Netlify and assigning custom domains to them.",
author="Zev Averbach", author="Zev Averbach",
author_email="zev@averba.ch", author_email="zev@averba.ch",