Commit Graph

252 Commits

Author SHA1 Message Date
infosave2007 ddaf9360be fix(awg): fix AWG Advanced install script - create container before generating keys
- Container now starts FIRST with docker run, then wg genkey is called inside it
- After config creation, explicitly reload wg0 interface with 'ip link del wg0' + 'wg-quick up'
- This ensures AWG obfuscation parameters (Jc, S1, S2, H1-H4) are applied to kernel
- Removed duplicate 'amnezia-xray' protocol from migration 047
2026-01-27 14:46:38 +03:00
infosave2007 cb3165670a fix(awg): fix AWG Advanced install script - create container before generating keys
- Container now starts FIRST with docker run, then wg genkey is called inside it
- After config creation, explicitly reload wg0 interface with 'ip link del wg0' + 'wg-quick up'
- This ensures AWG obfuscation parameters (Jc, S1, S2, H1-H4) are applied to kernel
- Removed duplicate 'amnezia-xray' protocol from migration 047
2026-01-27 14:46:38 +03:00
infosave2007 dad3aa93f4 feat: XRay Reality key backup and restoration
- Modified migrations/048_enable_xray_stats.sql to accept existing keys via env vars (PRIVATE_KEY, SHORT_ID)
- Updated InstallProtocolManager.php to extract and store reality_private_key after XRay installation
- Added key restoration logic in buildExports() to reuse saved keys during reinstallation
- Fixed VpnClient.php to correctly parse JSON stats output from XRay API
- Security fix: removed exposed port 2375 from docker-compose.yml (dind container)
2026-01-26 21:41:26 +03:00
infosave2007 ca51fa62dd feat: XRay Reality key backup and restoration
- Modified migrations/048_enable_xray_stats.sql to accept existing keys via env vars (PRIVATE_KEY, SHORT_ID)
- Updated InstallProtocolManager.php to extract and store reality_private_key after XRay installation
- Added key restoration logic in buildExports() to reuse saved keys during reinstallation
- Fixed VpnClient.php to correctly parse JSON stats output from XRay API
- Security fix: removed exposed port 2375 from docker-compose.yml (dind container)
2026-01-26 21:41:26 +03:00
infosave2007 904d725c7b Fix: Read keys from host file in sync script to prevent container deadlock 2026-01-24 21:36:13 +03:00
infosave2007 a2b6cdd41f Fix: Read keys from host file in sync script to prevent container deadlock 2026-01-24 21:36:13 +03:00
infosave2007 94be6f9b2f Fix: Add missing $ in sync script and skip invalid clients 2026-01-24 21:16:57 +03:00
infosave2007 486c9a862a Fix: Add missing $ in sync script and skip invalid clients 2026-01-24 21:16:57 +03:00
infosave2007 f51606b6f7 Feat: Auto-sync existing clients to AmneziaWG server (Fix) 2026-01-24 20:43:55 +03:00
infosave2007 8b0a95c7a1 Feat: Auto-sync existing clients to AmneziaWG server (Fix) 2026-01-24 20:43:55 +03:00
infosave2007 373a987063 Add script to sync clients from DB to AmneziaWG server 2026-01-24 20:39:20 +03:00
infosave2007 cd984870d7 Add script to sync clients from DB to AmneziaWG server 2026-01-24 20:39:20 +03:00
infosave2007 a92a12073f Fix: Case-sensitive AWG params and XRay Identifier logic 2026-01-24 20:34:07 +03:00
infosave2007 9969014d3e Fix: Case-sensitive AWG params and XRay Identifier logic 2026-01-24 20:34:07 +03:00
infosave2007 5cacdcfae9 Fix: Randomize AmneziaWG obfuscation parameters (H1..H4) in install script logic 2026-01-24 20:21:46 +03:00
infosave2007 a86e0cac9a Fix: Randomize AmneziaWG obfuscation parameters (H1..H4) in install script logic 2026-01-24 20:21:46 +03:00
infosave2007 86d67226d5 Fix: Client deletion UI, Enable XRay stats, fix dns_servers schema 2026-01-24 19:53:23 +03:00
infosave2007 e3f0e954ac Fix: Client deletion UI, Enable XRay stats, fix dns_servers schema 2026-01-24 19:53:23 +03:00
infosave2007 6f15b62ef1 fix(db): Add missing migration 047 to create protocols table 2026-01-24 15:35:41 +03:00
infosave2007 071c37cb39 fix(db): Add missing migration 047 to create protocols table 2026-01-24 15:35:41 +03:00
infosave2007 de10268ab4 fix(qr): Generate full X-Ray Client config JSON to match Native Amnezia format 2026-01-24 14:56:13 +03:00
infosave2007 0139c31557 fix(qr): Generate full X-Ray Client config JSON to match Native Amnezia format 2026-01-24 14:56:13 +03:00
infosave2007 fdbb18c9df fix(qr): Pass raw VLESS URI in last_config without JSON wrapper 2026-01-24 14:50:55 +03:00
infosave2007 1018f96fc4 fix(qr): Pass raw VLESS URI in last_config without JSON wrapper 2026-01-24 14:50:55 +03:00
infosave2007 5097186757 fix(qr): Use raw URI for X-Ray QR codes to ensure compatibility 2026-01-24 14:35:12 +03:00
infosave2007 4554a77033 fix(qr): Use raw URI for X-Ray QR codes to ensure compatibility 2026-01-24 14:35:12 +03:00
infosave2007 7735a25256 fix(client): Propagate show_text_content setting from protocol to client view 2026-01-24 14:28:53 +03:00
infosave2007 0268e26c85 fix(client): Propagate show_text_content setting from protocol to client view 2026-01-24 14:28:53 +03:00
infosave2007 57e331239c feat(xray): Implement universal client addition with fallback
- Added InstallProtocolManager::addClient and fallback logic for X-Ray VLESS
  to update server configuration (server.json) and restart container.
- Updated VpnClient::create to invoke InstallProtocolManager::addClient for
  scripted protocols, enabling dynamic user addition.
- Ensured UUID generation for X-Ray clients.
2026-01-24 14:08:43 +03:00
infosave2007 e4d4b4bdc0 feat(xray): Implement universal client addition with fallback
- Added InstallProtocolManager::addClient and fallback logic for X-Ray VLESS
  to update server configuration (server.json) and restart container.
- Updated VpnClient::create to invoke InstallProtocolManager::addClient for
  scripted protocols, enabling dynamic user addition.
- Ensured UUID generation for X-Ray clients.
2026-01-24 14:08:43 +03:00
infosave2007 dde0ff9ea1 fix(qr): Use raw VLESS URI in last_config->config
Instead of generating a JSON config for X-Ray, pass the raw VLESS URI string
wrapped in a JSON object  inside .
This matches the behavior of WireGuard config handling in the master branch
and is likely the expected format for Amnezia Android X-Ray import.
2026-01-24 13:48:57 +03:00
infosave2007 657fbf8df0 fix(qr): Use raw VLESS URI in last_config->config
Instead of generating a JSON config for X-Ray, pass the raw VLESS URI string
wrapped in a JSON object  inside .
This matches the behavior of WireGuard config handling in the master branch
and is likely the expected format for Amnezia Android X-Ray import.
2026-01-24 13:48:57 +03:00
infosave2007 174a2fb1e8 fix(qr): Add isThirdPartyConfig and reorder keys
- Added 'isThirdPartyConfig' => true to X-Ray config object. This flag is present in imported configs in Amnezia Android.
- Reordered keys so protocol object ('xray') comes before 'container' key, matching the order seen in WireGuard QR codes.
2026-01-24 13:45:56 +03:00
infosave2007 a508cc665c fix(qr): Add isThirdPartyConfig and reorder keys
- Added 'isThirdPartyConfig' => true to X-Ray config object. This flag is present in imported configs in Amnezia Android.
- Reordered keys so protocol object ('xray') comes before 'container' key, matching the order seen in WireGuard QR codes.
2026-01-24 13:45:56 +03:00
infosave2007 b2f42ec7ec fix(qr): Return to 12-byte Amnezia header but keep config wrapping
Reverting header to 12-byte format (0x07C00100 + compressedLen + uncompressedLen).
This header format is known to be scanned correctly by Amnezia app.
Previous failure with this header was due to missing config wrapping.
Now we have both: correct header AND correct content structure.
2026-01-24 13:42:20 +03:00
infosave2007 1006debc42 fix(qr): Return to 12-byte Amnezia header but keep config wrapping
Reverting header to 12-byte format (0x07C00100 + compressedLen + uncompressedLen).
This header format is known to be scanned correctly by Amnezia app.
Previous failure with this header was due to missing config wrapping.
Now we have both: correct header AND correct content structure.
2026-01-24 13:42:20 +03:00
infosave2007 939cba70b7 fix(qr): Use hybrid Chunked+Qt format for QR codes
The format that likely works with Amnezia Android is:
HEADER: 0x07C00100 (Magic 1984, Count 1, Id 0)
PAYLOAD: [UncompressedLen (4b)] + [Zlib Data]

This satisfies the Chunked QR check (magic 0x07C0) and then passes
the payload to qUncompress, which expects the 4-byte uncompressed length prefix.

Previous attempts failed because:
1. 12-byte header included compressedLen, which qUncompress interpreted as uncompressedLen (causing size mismatch error)
2. 4-byte header (Qt only) failed the Magic check
2026-01-24 13:38:32 +03:00
infosave2007 dc23a8f213 fix(qr): Use hybrid Chunked+Qt format for QR codes
The format that likely works with Amnezia Android is:
HEADER: 0x07C00100 (Magic 1984, Count 1, Id 0)
PAYLOAD: [UncompressedLen (4b)] + [Zlib Data]

This satisfies the Chunked QR check (magic 0x07C0) and then passes
the payload to qUncompress, which expects the 4-byte uncompressed length prefix.

Previous attempts failed because:
1. 12-byte header included compressedLen, which qUncompress interpreted as uncompressedLen (causing size mismatch error)
2. 4-byte header (Qt only) failed the Magic check
2026-01-24 13:38:32 +03:00
infosave2007 00affda8f2 fix(qr): Wrap X-Ray config in 'config' field inside last_config
Amnezia Android expects the contents of 'last_config' to be a JSON object
containing a 'config' field which holds the actual protocol configuration string.
Previously we were putting the configuration directly into 'last_config',
which caused the import to fail.
2026-01-24 13:34:13 +03:00
infosave2007 f5ab0ec2e3 fix(qr): Wrap X-Ray config in 'config' field inside last_config
Amnezia Android expects the contents of 'last_config' to be a JSON object
containing a 'config' field which holds the actual protocol configuration string.
Previously we were putting the configuration directly into 'last_config',
which caused the import to fail.
2026-01-24 13:34:13 +03:00
infosave2007 e283fdac1d fix(qr): Revert to original 12-byte Amnezia header format
The working QR format from Amnezia app uses:
- 12-byte header: version (0x07C00100) + compressedLen + uncompressedLen
- zlib compressed JSON data

Previously I incorrectly changed this to Qt qCompress format (4-byte header).
This commit reverts to the correct Amnezia-compatible format.
2026-01-24 13:26:24 +03:00
infosave2007 48f85365bd fix(qr): Revert to original 12-byte Amnezia header format
The working QR format from Amnezia app uses:
- 12-byte header: version (0x07C00100) + compressedLen + uncompressedLen
- zlib compressed JSON data

Previously I incorrectly changed this to Qt qCompress format (4-byte header).
This commit reverts to the correct Amnezia-compatible format.
2026-01-24 13:26:24 +03:00
infosave2007 45c0985ace fix(qr): Use Qt qCompress format for QR code encoding
Amnezia Android uses qUncompress which expects:
- 4-byte big-endian uncompressed length prefix
- zlib compressed data (gzcompress output)

Previously we used a custom 12-byte header (version, compressedLen, uncompressedLen)
which was incompatible with Qt's qUncompress.

This fix ensures X-Ray QR codes can be properly decoded by Amnezia VPN app.
2026-01-24 13:17:57 +03:00
infosave2007 644ee460af fix(qr): Use Qt qCompress format for QR code encoding
Amnezia Android uses qUncompress which expects:
- 4-byte big-endian uncompressed length prefix
- zlib compressed data (gzcompress output)

Previously we used a custom 12-byte header (version, compressedLen, uncompressedLen)
which was incompatible with Qt's qUncompress.

This fix ensures X-Ray QR codes can be properly decoded by Amnezia VPN app.
2026-01-24 13:17:57 +03:00
infosave2007 25ff0949ce fix(xray): Fix X-Ray install script and QR code generation
- Fix docker run command in install script (use single line instead of
  backslash continuations which break when stored in MySQL)
- Handle new xray x25519 output format that uses 'Password' instead of 'Public key'
- Make addClientToServer method public for backup restore functionality
- Created migration 046 with complete fix for X-Ray VLESS protocol
2026-01-24 13:03:05 +03:00
infosave2007 7734f54137 fix(xray): Fix X-Ray install script and QR code generation
- Fix docker run command in install script (use single line instead of
  backslash continuations which break when stored in MySQL)
- Handle new xray x25519 output format that uses 'Password' instead of 'Public key'
- Make addClientToServer method public for backup restore functionality
- Created migration 046 with complete fix for X-Ray VLESS protocol
2026-01-24 13:03:05 +03:00
infosave2007 cbcd260498 fix: set xray default port to 443 to match android client 2026-01-23 20:07:27 +03:00
infosave2007 5bffc0fbbd fix: set xray default port to 443 to match android client 2026-01-23 20:07:27 +03:00
infosave2007 6b15cbc942 fix: add flow xtls-rprx-vision to xray server config 2026-01-23 19:55:56 +03:00
infosave2007 8fd8e19317 fix: add flow xtls-rprx-vision to xray server config 2026-01-23 19:55:56 +03:00