mirror of
https://github.com/andrey271192/PCA_Phobos.git
synced 2026-09-21 12:01:56 +00:00
fix: preserve wireguard key padding
This commit is contained in:
@@ -22,6 +22,8 @@ phobos-update beta # или: phobos-update dev
|
|||||||
## stable
|
## stable
|
||||||
|
|
||||||
### v1.2.8
|
### v1.2.8
|
||||||
|
- **fix:** Android/iOS phone configs теперь восстанавливают потерянный `=` в WireGuard `PrivateKey/PublicKey/PresharedKey`. Это закрывает ошибку PhobosWG «Неправильная длина ключа в PublicKey».
|
||||||
|
- **fix:** `lib-core.sh` больше не теряет финальный `=` при чтении `server.env`, поэтому новые клиентские `.conf` получают полный `PublicKey`.
|
||||||
- **fix:** Android PhobosWG больше не получает `PresharedKey = none` в phobos payload, из-за чего импорт мог падать с «Неправильная длина ключа в PublicKey».
|
- **fix:** Android PhobosWG больше не получает `PresharedKey = none` в phobos payload, из-за чего импорт мог падать с «Неправильная длина ключа в PublicKey».
|
||||||
- **fix:** клиентский router package теперь содержит обязательные `lib-client.sh`, `install-obfuscator.sh`, `install-wireguard.sh` и дополнительные helper-скрипты из PCA repo, поэтому `wget .../init/TOKEN.sh | sh` больше не падает с `can't open './lib-client.sh'`.
|
- **fix:** клиентский router package теперь содержит обязательные `lib-client.sh`, `install-obfuscator.sh`, `install-wireguard.sh` и дополнительные helper-скрипты из PCA repo, поэтому `wget .../init/TOKEN.sh | sh` больше не падает с `can't open './lib-client.sh'`.
|
||||||
- **fix:** поле имени клиента больше не даёт ошибку в консоли Chrome из-за HTML `pattern`.
|
- **fix:** поле имени клиента больше не даёт ошибку в консоли Chrome из-за HTML `pattern`.
|
||||||
@@ -57,7 +59,7 @@ phobos-update beta # или: phobos-update dev
|
|||||||
|--------|----------|---------|
|
|--------|----------|---------|
|
||||||
| 1.2.7 / 1.3.x | PhobosWG: «невозможно импортировать туннель» | `phobos://` дополняется `= none` для всех обязательных полей (`PresharedKey`) по спеке формата |
|
| 1.2.7 / 1.3.x | PhobosWG: «невозможно импортировать туннель» | `phobos://` дополняется `= none` для всех обязательных полей (`PresharedKey`) по спеке формата |
|
||||||
| 1.2.8 / 1.3.x | Stable не показывал кнопку скачивания APK без локального файла | кнопка **PhobosWG (APK)** всегда доступна на Android-странице; `/download/apk` ведет на public stable release |
|
| 1.2.8 / 1.3.x | Stable не показывал кнопку скачивания APK без локального файла | кнопка **PhobosWG (APK)** всегда доступна на Android-странице; `/download/apk` ведет на public stable release |
|
||||||
| 1.2.8 / 1.3.x | Android PhobosWG: «Неправильная длина ключа в PublicKey» | Android payload нормализован без `PresharedKey = none`, QR/link нужно открыть заново |
|
| 1.2.8 / 1.3.x | Android PhobosWG: «Неправильная длина ключа в PublicKey» | Android/iOS payload восстанавливает потерянный `=` в WireGuard ключах и не добавляет `PresharedKey = none`; QR/link нужно открыть заново |
|
||||||
| 1.2.8 / 1.3.x | Router init: `can't open './lib-client.sh'` | обязательные router helper-скрипты добавлены в PCA overlay и managed update |
|
| 1.2.8 / 1.3.x | Router init: `can't open './lib-client.sh'` | обязательные router helper-скрипты добавлены в PCA overlay и managed update |
|
||||||
| 1.2.8 / 1.3.x | Stable `/clients`: `lib-core.sh: No such file or directory`, `check_root/load_env: command not found` | `lib-core.sh` добавлен в public repo, installer и updater |
|
| 1.2.8 / 1.3.x | Stable `/clients`: `lib-core.sh: No such file or directory`, `check_root/load_env: command not found` | `lib-core.sh` добавлен в public repo, installer и updater |
|
||||||
| 1.2.8 / 1.3.x | Install `[6/9] PCA patches`: `curl: (23) Failure writing output to destination` | `fetch()` создаёт папку назначения перед `curl -o` |
|
| 1.2.8 / 1.3.x | Install `[6/9] PCA patches`: `curl: (23) Failure writing output to destination` | `fetch()` создаёт папку назначения перед `curl -o` |
|
||||||
|
|||||||
31
app.py
31
app.py
@@ -707,7 +707,10 @@ def build_phone_config(cid, mode="android"):
|
|||||||
pass
|
pass
|
||||||
out = []
|
out = []
|
||||||
for ln in wg.split("\n"):
|
for ln in wg.split("\n"):
|
||||||
out.append("Endpoint = %s:51820" % server_ip if ln.strip().startswith("Endpoint") else ln)
|
if ln.strip().startswith("Endpoint"):
|
||||||
|
out.append("Endpoint = %s:51820" % server_ip)
|
||||||
|
else:
|
||||||
|
out.append(_normalize_wg_key_line(ln))
|
||||||
return "\n".join(out) + "\n", None
|
return "\n".join(out) + "\n", None
|
||||||
inst = ""
|
inst = ""
|
||||||
if os.path.exists(instpath):
|
if os.path.exists(instpath):
|
||||||
@@ -746,6 +749,9 @@ def _prepare_phoboswg_payload(conf):
|
|||||||
key, value = ln.split("=", 1)
|
key, value = ln.split("=", 1)
|
||||||
k = key.strip().lower()
|
k = key.strip().lower()
|
||||||
v = value.strip()
|
v = value.strip()
|
||||||
|
if k in ("privatekey", "publickey", "presharedkey"):
|
||||||
|
ln = "%s = %s" % (key.strip(), _normalize_wg_key_value(v))
|
||||||
|
v = _normalize_wg_key_value(v)
|
||||||
if k == "presharedkey" and v.lower() in ("", "none"):
|
if k == "presharedkey" and v.lower() in ("", "none"):
|
||||||
continue
|
continue
|
||||||
if header.lower() == "[peer]" and k == "allowedips":
|
if header.lower() == "[peer]" and k == "allowedips":
|
||||||
@@ -771,6 +777,29 @@ def _prepare_phoboswg_payload(conf):
|
|||||||
return "\n".join(out).rstrip("\n") + "\n"
|
return "\n".join(out).rstrip("\n") + "\n"
|
||||||
|
|
||||||
|
|
||||||
|
def _normalize_wg_key_line(line):
|
||||||
|
if "=" not in line:
|
||||||
|
return line
|
||||||
|
key, value = line.split("=", 1)
|
||||||
|
if key.strip().lower() not in ("privatekey", "publickey", "presharedkey"):
|
||||||
|
return line
|
||||||
|
return "%s = %s" % (key.strip(), _normalize_wg_key_value(value.strip()))
|
||||||
|
|
||||||
|
|
||||||
|
def _normalize_wg_key_value(value):
|
||||||
|
"""Restore dropped base64 padding for WireGuard 32-byte keys."""
|
||||||
|
value = (value or "").strip()
|
||||||
|
if not value or value.lower() == "none":
|
||||||
|
return value
|
||||||
|
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
|
||||||
|
if any(ch not in alphabet for ch in value):
|
||||||
|
return value
|
||||||
|
padded = value + ("=" * ((4 - len(value) % 4) % 4))
|
||||||
|
if len(padded) == 44:
|
||||||
|
return padded
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
def _pad_conf_with_none(conf):
|
def _pad_conf_with_none(conf):
|
||||||
"""Legacy helper kept for old endpoints that may call it."""
|
"""Legacy helper kept for old endpoints that may call it."""
|
||||||
return _prepare_phoboswg_payload(conf)
|
return _prepare_phoboswg_payload(conf)
|
||||||
|
|||||||
@@ -555,7 +555,7 @@ phobos-update stable
|
|||||||
|
|
||||||
### Android PhobosWG: `Неправильная длина ключа в PublicKey`
|
### Android PhobosWG: `Неправильная длина ключа в PublicKey`
|
||||||
|
|
||||||
Причина: старый phobos payload мог добавлять `PresharedKey = none` или отдавать старый QR/ссылку после обновления панели. PhobosWG воспринимает это как битый ключ.
|
Причина: старый phobos payload мог добавлять `PresharedKey = none`, отдавать старый QR/ссылку после обновления панели или терять финальный `=` в WireGuard `PublicKey`. PhobosWG воспринимает это как битый ключ.
|
||||||
|
|
||||||
Решение:
|
Решение:
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,12 @@ check_root() {
|
|||||||
|
|
||||||
load_env() {
|
load_env() {
|
||||||
if [ -f "$SERVER_ENV" ]; then
|
if [ -f "$SERVER_ENV" ]; then
|
||||||
while IFS='=' read -r k v; do
|
while IFS= read -r line || [ -n "$line" ]; do
|
||||||
|
case "$line" in
|
||||||
|
''|\#*) continue ;;
|
||||||
|
esac
|
||||||
|
k="${line%%=*}"
|
||||||
|
v="${line#*=}"
|
||||||
case "$k" in
|
case "$k" in
|
||||||
''|\#*) continue ;;
|
''|\#*) continue ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user