diff --git a/.env.example b/.env.example index ff5ffc9..dfd5f08 100644 --- a/.env.example +++ b/.env.example @@ -3,7 +3,7 @@ # Можно перечислить через запятую — будет пробовать по порядку, пока кто-то не примет. # Установщик сам подставит LAN-IP роутера, если запущен на нём. # Часто loopback закрыт админкой Keenetic — основной кандидат это LAN-IP. -ROUTER_HOST=http://192.168.1.1,http://my.keenetic.net,http://127.0.0.1 +ROUTER_HOST=http://192.168.1.1,https://192.168.1.1,http://192.168.1.1:81,http://my.keenetic.net,https://my.keenetic.net,http://127.0.0.1 # Логин по умолчанию в форме входа (можно изменить руками при логине) ROUTER_LOGIN=admin diff --git a/auth.py b/auth.py index a5c6b60..cced8f8 100644 --- a/auth.py +++ b/auth.py @@ -14,6 +14,7 @@ import http.cookiejar import json import logging import secrets +import ssl import threading import time import urllib.error @@ -21,6 +22,11 @@ import urllib.request log = logging.getLogger("kssh.auth") +# У Keenetic админка на HTTPS обычно с самоподписанным сертификатом — отключаем проверку. +_SSL_CTX = ssl.create_default_context() +_SSL_CTX.check_hostname = False +_SSL_CTX.verify_mode = ssl.CERT_NONE + def _normalize_host(host: str) -> str: h = (host or "").strip().rstrip("/") @@ -41,7 +47,10 @@ def keenetic_validate(host: str, login: str, password: str, timeout: float = 5.0 if not base or not login or password is None: return False cj = http.cookiejar.CookieJar() - opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) + opener = urllib.request.build_opener( + urllib.request.HTTPCookieProcessor(cj), + urllib.request.HTTPSHandler(context=_SSL_CTX), + ) realm = "" challenge = "" try: diff --git a/install.sh b/install.sh index 7b78228..3744f20 100644 --- a/install.sh +++ b/install.sh @@ -27,8 +27,9 @@ if [ ! -f "$INST/.env" ]; then | awk '$4 ~ /^(192\.168|10|172\.(1[6-9]|2[0-9]|3[01]))\..*\.1\// {sub("/.*","",$4); print $4; exit}' )" if [ -n "$LAN_IP_GUESS" ]; then - sed -i "s|^ROUTER_HOST=.*|ROUTER_HOST=http://${LAN_IP_GUESS},http://my.keenetic.net,http://127.0.0.1|" "$INST/.env" 2>/dev/null || true - echo "==> .env: ROUTER_HOST подставлен LAN-IP $LAN_IP_GUESS (можно изменить в $INST/.env)" + DEFAULT_HOSTS="http://${LAN_IP_GUESS},https://${LAN_IP_GUESS},http://${LAN_IP_GUESS}:81,http://my.keenetic.net,https://my.keenetic.net,http://127.0.0.1" + sed -i "s|^ROUTER_HOST=.*|ROUTER_HOST=${DEFAULT_HOSTS}|" "$INST/.env" 2>/dev/null || true + echo "==> .env: ROUTER_HOST подставлен LAN-IP $LAN_IP_GUESS (HTTP/HTTPS, можно изменить в $INST/.env)" fi echo "!!! Создан $INST/.env — при необходимости задайте WEB_PASSWORD/ALLOWED_IPS" fi