mirror of
https://github.com/andrey271192/PCA_Phobos.git
synced 2026-09-20 11:55:32 +00:00
fix: preserve wireguard key padding
This commit is contained in:
@@ -22,6 +22,8 @@ phobos-update beta # или: phobos-update dev
|
||||
## stable
|
||||
|
||||
### 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:** клиентский 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`.
|
||||
@@ -57,7 +59,7 @@ phobos-update beta # или: phobos-update dev
|
||||
|--------|----------|---------|
|
||||
| 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 | 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 | 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` |
|
||||
|
||||
31
app.py
31
app.py
@@ -707,7 +707,10 @@ def build_phone_config(cid, mode="android"):
|
||||
pass
|
||||
out = []
|
||||
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
|
||||
inst = ""
|
||||
if os.path.exists(instpath):
|
||||
@@ -746,6 +749,9 @@ def _prepare_phoboswg_payload(conf):
|
||||
key, value = ln.split("=", 1)
|
||||
k = key.strip().lower()
|
||||
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"):
|
||||
continue
|
||||
if header.lower() == "[peer]" and k == "allowedips":
|
||||
@@ -771,6 +777,29 @@ def _prepare_phoboswg_payload(conf):
|
||||
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):
|
||||
"""Legacy helper kept for old endpoints that may call it."""
|
||||
return _prepare_phoboswg_payload(conf)
|
||||
|
||||
@@ -555,7 +555,7 @@ phobos-update stable
|
||||
|
||||
### 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() {
|
||||
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
|
||||
''|\#*) continue ;;
|
||||
esac
|
||||
|
||||
Reference in New Issue
Block a user