diff --git a/pyproject.toml b/pyproject.toml index 42b9854..120fa41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "hysteria-panel" -version = "0.2.3" +version = "0.3.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.13" diff --git a/src/hysteria_panel/api.py b/src/hysteria_panel/api.py index 1a39613..7163805 100644 --- a/src/hysteria_panel/api.py +++ b/src/hysteria_panel/api.py @@ -4,8 +4,9 @@ import requests from . import __version__ class HysteriaAPI: - def __init__(self, host: str, port: int, secret: str): - self.base_url = f"http://{host}:{port}" + def __init__(self, host: str, port: int, secret: str, use_https: bool = False): + scheme = "https" if use_https else "http" + self.base_url = f"{scheme}://{host}:{port}" self.timeout = 5 # seconds self._session = requests.Session() diff --git a/src/hysteria_panel/gui.py b/src/hysteria_panel/gui.py index 9803b83..8a7996b 100644 --- a/src/hysteria_panel/gui.py +++ b/src/hysteria_panel/gui.py @@ -39,6 +39,8 @@ class HysteriaGUI(tb.Window): if "secret" in config: self.login_frame.secret_entry.insert(0, f'{config.get("secret", "")}') self.login_frame.save_password_var.set(True) + if "https" in config: + self.login_frame.https_var.set(bool(config.get("https", False))) def _save_config(self): config = { @@ -47,6 +49,8 @@ class HysteriaGUI(tb.Window): } if self.login_frame.save_password_var.get(): config["secret"] = self.login_frame.secret_entry.get().strip() + # Save HTTPS preference if Remember Me is enabled + config["https"] = bool(self.login_frame.https_var.get()) utils.save_config(config) @@ -54,6 +58,7 @@ class HysteriaGUI(tb.Window): host = self.login_frame.host_entry.get().strip() port = self.login_frame.port_entry.get().strip() secret = self.login_frame.secret_entry.get().strip() + use_https = bool(self.login_frame.https_var.get()) if not host: self.login_frame.status_label.config(text="Host cannot be empty.") @@ -66,7 +71,7 @@ class HysteriaGUI(tb.Window): return False try: - self._api = HysteriaAPI(host, int(port), secret) + self._api = HysteriaAPI(host, int(port), secret, use_https=use_https) if self.login_frame.remember_me_var.get(): self._save_config() diff --git a/src/hysteria_panel/views/login_view.py b/src/hysteria_panel/views/login_view.py index de4cc35..7d996f6 100644 --- a/src/hysteria_panel/views/login_view.py +++ b/src/hysteria_panel/views/login_view.py @@ -30,7 +30,7 @@ class LoginView(tb.Frame): self.secret_entry.grid(row=2, column=1, padx=10, pady=10) self.secret_entry.bind("", lambda event: self.on_connect()) - # Remember Me and Save Password Checkboxes + # Remember Me, Save Password, and HTTPS toggle remember_frame = tb.Frame(self) remember_frame.pack(pady=5) @@ -38,6 +38,10 @@ class LoginView(tb.Frame): self.remember_me_check = tb.Checkbutton(remember_frame, text="Remember Me", variable=self.remember_me_var, bootstyle="primary") # type: ignore self.remember_me_check.pack(side="left", padx=10) + self.https_var = tb.BooleanVar() + self.https_check = tb.Checkbutton(remember_frame, text="Use HTTPS", variable=self.https_var, bootstyle="primary") # type: ignore + self.https_check.pack(side="left", padx=10) + self.save_password_var = tb.BooleanVar() self.save_password_check = tb.Checkbutton(remember_frame, text="Save Password", variable=self.save_password_var, bootstyle="primary") # type: ignore self.save_password_check.pack(side="left", padx=10) diff --git a/uv.lock b/uv.lock index 24b854c..709b7bf 100644 --- a/uv.lock +++ b/uv.lock @@ -43,7 +43,7 @@ wheels = [ ] [[package]] -name = "hysteria-panel-python" +name = "hysteria-panel" version = "0.2.3" source = { editable = "." } dependencies = [