mirror of
https://github.com/dw-0/kiauh.git
synced 2026-03-31 14:58:33 +05:00
Compare commits
5 Commits
8346ff04ed
...
a96153ef34
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a96153ef34 | ||
|
|
1f2d724189 | ||
|
|
1a29324e6a | ||
|
|
5225e70e83 | ||
|
|
51f0713c5a |
@@ -59,12 +59,7 @@ class BaseWebClient(ABC):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def stable_url(self) -> str:
|
def download_url(self) -> str:
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
@abstractmethod
|
|
||||||
def unstable_url(self) -> str:
|
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ def print_client_already_installed_dialog(name: str):
|
|||||||
print_back_footer()
|
print_back_footer()
|
||||||
|
|
||||||
|
|
||||||
def print_client_port_select_dialog(name: str, port: str, ports_in_use: List[str]):
|
def print_client_port_select_dialog(name: str, port: int, ports_in_use: List[int]):
|
||||||
port = f"{COLOR_CYAN}{port}{RESET_FORMAT}"
|
port = f"{COLOR_CYAN}{port}{RESET_FORMAT}"
|
||||||
line1 = f"Please select the port, {name} should be served on."
|
line1 = f"Please select the port, {name} should be served on."
|
||||||
line2 = f"In case you need {name} to be served on a specific"
|
line2 = f"In case you need {name} to be served on a specific"
|
||||||
|
|||||||
@@ -104,20 +104,18 @@ def install_client(client: BaseWebClient) -> None:
|
|||||||
install_client_cfg = get_confirm(question, allow_go_back=False)
|
install_client_cfg = get_confirm(question, allow_go_back=False)
|
||||||
|
|
||||||
settings = KiauhSettings()
|
settings = KiauhSettings()
|
||||||
port = settings.get(client.name, "port")
|
port: int = settings.get(client.name, "port")
|
||||||
ports_in_use = read_ports_from_nginx_configs()
|
ports_in_use: List[int] = read_ports_from_nginx_configs()
|
||||||
|
|
||||||
# check if configured port is a valid number and not in use already
|
# check if configured port is a valid number and not in use already
|
||||||
valid_port = is_valid_port(port, ports_in_use)
|
valid_port = is_valid_port(port, ports_in_use)
|
||||||
while not valid_port:
|
while not valid_port:
|
||||||
next_port = get_next_free_port(ports_in_use)
|
next_port = get_next_free_port(ports_in_use)
|
||||||
print_client_port_select_dialog(client.display_name, next_port, ports_in_use)
|
print_client_port_select_dialog(client.display_name, next_port, ports_in_use)
|
||||||
port = str(
|
port = get_number_input(
|
||||||
get_number_input(
|
f"Configure {client.display_name} for port",
|
||||||
f"Configure {client.display_name} for port",
|
min_count=int(next_port),
|
||||||
min_count=int(next_port),
|
default=next_port,
|
||||||
default=next_port,
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
valid_port = is_valid_port(port, ports_in_use)
|
valid_port = is_valid_port(port, ports_in_use)
|
||||||
|
|
||||||
@@ -162,8 +160,10 @@ def download_client(client: BaseWebClient) -> None:
|
|||||||
zipfile = f"{client.name.lower()}.zip"
|
zipfile = f"{client.name.lower()}.zip"
|
||||||
target = Path().home().joinpath(zipfile)
|
target = Path().home().joinpath(zipfile)
|
||||||
try:
|
try:
|
||||||
Logger.print_status(f"Downloading {zipfile} ...")
|
Logger.print_status(
|
||||||
download_file(client.stable_url, target, True)
|
f"Downloading {client.display_name} from {client.download_url} ..."
|
||||||
|
)
|
||||||
|
download_file(client.download_url, target, True)
|
||||||
Logger.print_ok("Download complete!")
|
Logger.print_ok("Download complete!")
|
||||||
|
|
||||||
Logger.print_status(f"Extracting {zipfile} ...")
|
Logger.print_status(f"Extracting {zipfile} ...")
|
||||||
@@ -172,7 +172,7 @@ def download_client(client: BaseWebClient) -> None:
|
|||||||
Logger.print_ok("OK!")
|
Logger.print_ok("OK!")
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
Logger.print_error(f"Downloading {zipfile} failed!")
|
Logger.print_error(f"Downloading {client.display_name} failed!")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,11 @@ from components.webui_client.base_data import (
|
|||||||
from components.webui_client.mainsail_data import MainsailData
|
from components.webui_client.mainsail_data import MainsailData
|
||||||
from core.backup_manager.backup_manager import BackupManager
|
from core.backup_manager.backup_manager import BackupManager
|
||||||
from core.repo_manager.repo_manager import RepoManager
|
from core.repo_manager.repo_manager import RepoManager
|
||||||
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from utils import NGINX_SITES_AVAILABLE, NGINX_CONFD
|
from utils import NGINX_SITES_AVAILABLE, NGINX_CONFD
|
||||||
from utils.common import get_install_status_webui
|
from utils.common import get_install_status_webui
|
||||||
from utils.constants import COLOR_CYAN, RESET_FORMAT, COLOR_YELLOW
|
from utils.constants import COLOR_CYAN, RESET_FORMAT, COLOR_YELLOW
|
||||||
from utils.git_utils import get_latest_tag
|
from utils.git_utils import get_latest_tag, get_latest_unstable_tag
|
||||||
from utils.logger import Logger
|
from utils.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
@@ -201,3 +202,20 @@ def config_for_other_client_exist(client_to_ignore: WebClientType) -> bool:
|
|||||||
clients = clients - {client_to_ignore.value}
|
clients = clients - {client_to_ignore.value}
|
||||||
|
|
||||||
return True if len(clients) > 0 else False
|
return True if len(clients) > 0 else False
|
||||||
|
|
||||||
|
|
||||||
|
def get_download_url(base_url: str, client: BaseWebClient) -> str:
|
||||||
|
settings = KiauhSettings()
|
||||||
|
use_unstable = settings.get(client.name, "unstable_releases")
|
||||||
|
stable_url = f"{base_url}/latest/download/{client.name}.zip"
|
||||||
|
|
||||||
|
if not use_unstable:
|
||||||
|
return stable_url
|
||||||
|
|
||||||
|
try:
|
||||||
|
unstable_tag = get_latest_unstable_tag(client.repo_path)
|
||||||
|
if unstable_tag == "":
|
||||||
|
raise Exception
|
||||||
|
return f"{base_url}/download/{unstable_tag}/{client.name}.zip"
|
||||||
|
except Exception:
|
||||||
|
return stable_url
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ from components.webui_client.base_data import (
|
|||||||
WebClientType,
|
WebClientType,
|
||||||
BaseWebClient,
|
BaseWebClient,
|
||||||
)
|
)
|
||||||
|
from components.webui_client.client_utils import get_download_url
|
||||||
from core.backup_manager import BACKUP_ROOT_DIR
|
from core.backup_manager import BACKUP_ROOT_DIR
|
||||||
from utils.git_utils import get_latest_unstable_tag
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
@@ -46,19 +46,8 @@ class FluiddData(BaseWebClient):
|
|||||||
repo_path: str = "fluidd-core/fluidd"
|
repo_path: str = "fluidd-core/fluidd"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def stable_url(self) -> str:
|
def download_url(self) -> str:
|
||||||
return f"{self.BASE_DL_URL}/latest/download/fluidd.zip"
|
return get_download_url(self.BASE_DL_URL, self)
|
||||||
|
|
||||||
@property
|
|
||||||
def unstable_url(self) -> str:
|
|
||||||
try:
|
|
||||||
unstable_tag = get_latest_unstable_tag(self.repo_path)
|
|
||||||
if unstable_tag != "":
|
|
||||||
return f"{self.BASE_DL_URL}/download/{unstable_tag}/fluidd.zip"
|
|
||||||
else:
|
|
||||||
raise Exception
|
|
||||||
except Exception:
|
|
||||||
return self.stable_url
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def client_config(self) -> BaseWebClientConfig:
|
def client_config(self) -> BaseWebClientConfig:
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ from components.webui_client.base_data import (
|
|||||||
BaseWebClient,
|
BaseWebClient,
|
||||||
)
|
)
|
||||||
from core.backup_manager import BACKUP_ROOT_DIR
|
from core.backup_manager import BACKUP_ROOT_DIR
|
||||||
from utils.git_utils import get_latest_unstable_tag
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
@@ -46,19 +45,10 @@ class MainsailData(BaseWebClient):
|
|||||||
repo_path: str = "mainsail-crew/mainsail"
|
repo_path: str = "mainsail-crew/mainsail"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def stable_url(self) -> str:
|
def download_url(self) -> str:
|
||||||
return f"{self.BASE_DL_URL}/latest/download/mainsail.zip"
|
from components.webui_client.client_utils import get_download_url
|
||||||
|
|
||||||
@property
|
return get_download_url(self.BASE_DL_URL, self)
|
||||||
def unstable_url(self) -> str:
|
|
||||||
try:
|
|
||||||
unstable_tag = get_latest_unstable_tag(self.repo_path)
|
|
||||||
if unstable_tag != "":
|
|
||||||
return f"{self.BASE_DL_URL}/download/{unstable_tag}/mainsail.zip"
|
|
||||||
else:
|
|
||||||
raise Exception
|
|
||||||
except Exception:
|
|
||||||
return self.stable_url
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def client_config(self) -> BaseWebClientConfig:
|
def client_config(self) -> BaseWebClientConfig:
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from __future__ import annotations
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import traceback
|
||||||
from abc import abstractmethod
|
from abc import abstractmethod
|
||||||
from typing import Type, Dict, Optional
|
from typing import Type, Dict, Optional
|
||||||
|
|
||||||
@@ -213,4 +214,6 @@ class BaseMenu(metaclass=PostInitCaller):
|
|||||||
option.method(opt_index=option.opt_index, opt_data=option.opt_data)
|
option.method(opt_index=option.opt_index, opt_data=option.opt_data)
|
||||||
self.run()
|
self.run()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Logger.print_error(f"An unexpected error occured:\n{e}")
|
Logger.print_error(
|
||||||
|
f"An unexpected error occured:\n{e}\n{traceback.format_exc()}"
|
||||||
|
)
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ def create_nginx_cfg(name: str, port: int, root_dir: Path) -> None:
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def read_ports_from_nginx_configs() -> List[str]:
|
def read_ports_from_nginx_configs() -> List[int]:
|
||||||
"""
|
"""
|
||||||
Helper function to iterate over all NGINX configs and read all ports defined for listen
|
Helper function to iterate over all NGINX configs and read all ports defined for listen
|
||||||
:return: A sorted list of listen ports
|
:return: A sorted list of listen ports
|
||||||
@@ -168,18 +168,19 @@ def read_ports_from_nginx_configs() -> List[str]:
|
|||||||
if line.startswith("listen") and line.split()[-1] not in port_list:
|
if line.startswith("listen") and line.split()[-1] not in port_list:
|
||||||
port_list.append(line.split()[-1])
|
port_list.append(line.split()[-1])
|
||||||
|
|
||||||
return sorted(port_list, key=lambda x: int(x))
|
ports_to_ints_list = [int(port) for port in port_list]
|
||||||
|
return sorted(ports_to_ints_list, key=lambda x: int(x))
|
||||||
|
|
||||||
|
|
||||||
def is_valid_port(port: str, ports_in_use: List[str]) -> bool:
|
def is_valid_port(port: int, ports_in_use: List[int]) -> bool:
|
||||||
return port.isdigit() and port not in ports_in_use
|
return port not in ports_in_use
|
||||||
|
|
||||||
|
|
||||||
def get_next_free_port(ports_in_use: List[str]) -> str:
|
def get_next_free_port(ports_in_use: List[int]) -> int:
|
||||||
valid_ports = set(range(80, 7125))
|
valid_ports = set(range(80, 7125))
|
||||||
used_ports = set(map(int, ports_in_use))
|
used_ports = set(map(int, ports_in_use))
|
||||||
|
|
||||||
return str(min(valid_ports - used_ports))
|
return min(valid_ports - used_ports)
|
||||||
|
|
||||||
|
|
||||||
def add_config_section(
|
def add_config_section(
|
||||||
|
|||||||
Reference in New Issue
Block a user