aboutsummaryrefslogtreecommitdiff
path: root/tool/aio.py
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-11-27 14:11:49 +0800
committercrupest <crupest@outlook.com>2022-11-27 14:11:49 +0800
commita6d65563eea898959cc53f070bbd66a646b36d98 (patch)
tree12decde0485317dc137a4e97e8bfdd53aff7dbda /tool/aio.py
parentc8b8633f0cc4c327ead96efb8a4e72a18aa50619 (diff)
downloadcrupest-a6d65563eea898959cc53f070bbd66a646b36d98.tar.gz
crupest-a6d65563eea898959cc53f070bbd66a646b36d98.tar.bz2
crupest-a6d65563eea898959cc53f070bbd66a646b36d98.zip
Add -y and check nginx config time to aio.
Diffstat (limited to 'tool/aio.py')
-rwxr-xr-xtool/aio.py95
1 files changed, 71 insertions, 24 deletions
diff --git a/tool/aio.py b/tool/aio.py
index ec22537..639b7dc 100755
--- a/tool/aio.py
+++ b/tool/aio.py
@@ -35,6 +35,8 @@ parser.add_argument("--no-check-python-version", action="store_true",
default=False, help="Do not check python version.")
parser.add_argument("--no-check-system", action="store_true",
default=False, help="Do not check system type.")
+parser.add_argument("-y", "--yes", action="store_true",
+ default=False, help="Yes to all confirmation.")
subparsers = parser.add_subparsers(dest="action")
@@ -88,6 +90,20 @@ backup_command_group.add_argument(
args = parser.parse_args()
+if args.yes:
+ old_ask = Confirm.ask
+
+ def new_ask(prompt, *args, console=console, default=None, **kwargs):
+ default_text = ""
+ if default is not None:
+ default_text = "(y)" if default else "(n)"
+ text = f"[prompt]{prompt}[/] [prompt.choices]\[y/n][/] [prompt.default]{default_text}[/]"
+ console.print(text)
+ return True
+
+ Confirm.ask = new_ask
+
+
if not args.no_check_python_version:
if sys.version_info < (3, 10):
console.print("This script works well on python 3.10 or higher. Otherwise you may encounter some problems. But I would like to improve some rational compatibility.", style="yellow")
@@ -493,8 +509,26 @@ if not os.path.exists(nginx_config_dir):
to_gen_nginx_conf = Confirm.ask("It seems you haven't generate nginx config. Do you want to generate it?",
default=True, console=console)
else:
- to_gen_nginx_conf = Confirm.ask("It seems you have already generated nginx config. Do you want to overwrite it?",
- default=False, console=console)
+ # get the latest time of files in nginx template
+ template_time = 0
+ for path in os.listdir(nginx_template_dir):
+ template_time = max(template_time, os.stat(
+ os.path.join(nginx_template_dir, path)).st_mtime)
+ console.print(
+ f"Nginx template update time: {datetime.datetime.fromtimestamp(template_time)}")
+
+ nginx_config_time = 0
+ for path in os.listdir(nginx_config_dir):
+ nginx_config_time = max(nginx_config_time, os.stat(
+ os.path.join(nginx_config_dir, path)).st_mtime)
+ console.print(
+ f"Generated nginx template update time: {datetime.datetime.fromtimestamp(nginx_config_time)}")
+ if template_time > nginx_config_time:
+ to_gen_nginx_conf = Confirm.ask("It seems you have updated the nginx template and not regenerate config. Do you want to regenerate the nginx config?",
+ default=True, console=console)
+ else:
+ to_gen_nginx_conf = Confirm.ask("[yellow]It seems you have already generated nginx config. Do you want to overwrite it?[/]",
+ default=False, console=console)
if to_gen_nginx_conf:
domain = config["CRUPEST_DOMAIN"]
generate_nginx_config(domain)
@@ -507,34 +541,47 @@ elif not os.path.isdir(data_dir):
console.print(
"ERROR: data dir is not a dir! Everything will be broken! Please delete it manually", style="red")
+
+def print_create_cert_message(domain):
+ console.print(
+ "Looks like you haven't run certbot to get the init ssl certificates. You may want to run following code to get one:", style="cyan")
+ console.print(certbot_command_gen(domain, "create"),
+ soft_wrap=True, highlight=False)
+
+
+def check_ssl_cert():
+ domain = check_domain_is_defined()
+ cert_path = get_cert_path(domain)
+ tmp_cert_path = os.path.join(tmp_dir, "fullchain.pem")
+ console.print("Temporarily copy cert to tmp...", style="yellow")
+ ensure_tmp_dir()
+ subprocess.run(
+ ["sudo", "cp", cert_path, tmp_cert_path], check=True)
+ subprocess.run(["sudo", "chown", os.geteuid(),
+ tmp_cert_path], check=True)
+ cert_domains = get_cert_domains(tmp_cert_path, domain)
+ if cert_domains is None:
+ print_create_cert_message(domain)
+ else:
+ cert_domain_set = set(cert_domains)
+ domains = set(list_domains())
+ if not cert_domain_set == domains:
+ console.print(
+ "Cert domains are not equal to host domains. Run following command to recreate it.", style="red")
+ console.print(certbot_command_gen(
+ domain, "create", standalone=True), soft_wrap=False, highlight=False)
+ console.print("Remove tmp cert...", style="yellow")
+ os.remove(tmp_cert_path)
+
+
if os.path.isdir(data_dir):
if not os.path.exists(os.path.join(data_dir, "certbot")):
- console.print(
- "Looks like you haven't run certbot to get the init ssl certificates. You may want to run following code to get one:", style="cyan")
- console.print(certbot_command_gen(domain, "create"),
- soft_wrap=True, highlight=False)
+ print_create_cert_message(check_domain_is_defined())
else:
to_check = Confirm.ask(
"I want to check your ssl certs, but I need to sudo. Do you want me check", console=console, default=False)
if to_check:
- domain = check_domain_is_defined()
- cert_path = get_cert_path(domain)
- tmp_cert_path = os.path.join(tmp_dir, "fullchain.pem")
- console.print("Temporarily copy cert to tmp...", style="yellow")
- ensure_tmp_dir()
- subprocess.run(
- ["sudo", "cp", cert_path, tmp_cert_path], check=True)
- subprocess.run(["sudo", "chown", os.geteuid(),
- tmp_cert_path], check=True)
- cert_domains = set(get_cert_domains(tmp_cert_path, domain))
- domains = set(list_domains())
- if not cert_domains == domains:
- console.print(
- "Cert domains are not equal to host domains. Run following command to recreate it.", style="red")
- console.print(certbot_command_gen(
- domain, "create", standalone=True), soft_wrap=False, highlight=False)
- console.print("Remove tmp cert...", style="yellow")
- os.remove(tmp_cert_path)
+ check_ssl_cert()
if not os.path.exists(os.path.join(data_dir, "code-server")):
os.mkdir(os.path.join(data_dir, "code-server"))