* feat: initial conan support
* feat: add awg-go and awg-apple recipes
* feat: macos full feature conan build, except ss and cloak
* feat: conan android initial support
* fix: android libssh fixes
* conan: android additional recipes and fixes
* feat: openvpn add support android
* fix: awg android connection establish
* conan: apple full-featured support
* chore: bump min macos version
* chore: get rid of manual deploy recursive copying
* conan: beautify makefile-based recipes
* conan: add geosite.dat and geoip.dat
* conan: use lib linking instead of QT_EXTRA_LIBS for OVPN
* conan: address lack of SONAME of libck-ovpn-plugin.so correctly
* conan: windows initial support
* conan: make awg-windows and wintun be interpret as exes
* conan: fix version for v2ray-rules-dat
* feat: conan and platform bootstrap rework in cmake
* feat: 16kb support for Android
* chore(conan): recipes cleanup
* feat: support of drivers for windows
* feat: support full-featured cmake install
* chore: exclude qtkeychain from the target build
* fix: install for apple systems
* fix: provide flags for cloak plugin for openvpn-pt-android
* chore: bump android deps for 16kb support
* feat(conan): patch cloak to properly provide env for golang
* chore: remove redundant hint from conan find
* feat: linux <-> conan features
* feat: linux initial packaging support
* feat: linux cpack support
* feat: cpack windows full-featured build
* feat: productbuild cpack support
* feat: rework CI/CD for macos
* feat: rework CI/CD for Linux
* fix: libncap automake args
* fix: CI/CD correct QT paths
* fix: windows rework CI/CD
* fix: windows artifact upload
* chore: remove MacOS-old from build targets
* feat: add conan to all mobile and NE builds
* feat: support default amnezia conan remote
* fix: use Release instead of release on Android
* feat: get rid of 3rd-prebuilt
* feat: conan CI/CD upload
* fix: CI/CD change windows toolset versions
* fix: remove MSVC version from CI/CD
* feat: conan CI/CD add Release and Debug build types
* feat: add multiple xcode versions for conan CI/CD
* fix: correct conan CI/CD clang versions
* feat: separate prebuilt baking, and add some for NE
* feat: rework keychain on ios/macos even more
* fix: add desktop Qt for iOS
* feat: add QT_HOST_PATH to build.sh
* fix: add deploy definition to cmake
* fix: android adjustments for toolchains and CI/CD
* fix: add needs for Android CI/CD
* fix: Android CI/CD use android-28
* fix: modernize translations, and CI/CD fixes
* fix: gradle min sdk compilation error
* fix: CI/CD add installers to all jobs
* fix: parse android platform more precisely
* fix: adjust aab path in CI/CD
* feat: CI/CD do not execute artifact build if there is nothing changed
* fix: CI/CD use common jobs even if previous were failed
* fix: Apple CI/CD use set-key-partition-list for keychains
* fix: Apple CI/CD do not specify any keychain (use default)
* fix: build aab as a different step in build script
* chore: beautify build.sh script
* feat: CI/CD build separate APKs per ABI
* fix: Android CI/CD upload artifact in separate steps
* chore: recipes cleanup
* feat: add hints for conan on MacOS
* fix: add main.cpp and tests back to CMakeLists.txt
* chore: xrayProtocol codestyle changes
* fix: openssl set proper X509 request version
* fix: make openvpn protocol rely only on client while configuring
* chore: get rid of old scripts
* chore: readme update describing build process more precisely
* feat: windows build script add multiprocessing capabilities
* chore: bump Qt version in README
* feat: add generator option and use Ninja by default in CI/CD for linux/macos
---------
Co-authored-by: NickVs2015 <nv@amnezia.org>
* added changelog drawer
* Created a scaffold for Linux installation
* implement Linux updating
* Add debug logs about installer in service
* Add client side of installation logic for Windows and MacOS
* Add service side of installation logic for Windows
* ru readme
* Update README_RU.md
* Add files via upload
* chore: added clang-format config files (#1293)
* Update README_RU.md
* Update README.md
* feature: added subscription expiration date for premium v2 (#1261)
* feature: added subscription expiration date for premium v2
* feature: added a check for the presence of the “services” field in the response body of the getServicesList() function
* feature: added prohibition to change location when connection is active
* bugfix: renamed public_key->end_date to public_key->expires_at according to the changes on the backend
* feature/xray user management (#972)
* feature: implement client management functionality for Xray
---------
Co-authored-by: aiamnezia <ai@amnezia.org>
Co-authored-by: vladimir.kuznetsov <nethiuswork@gmail.com>
* Fix formatting
* Add some logs
* Add logs from installattion shell on Windows
* Fix installation for Windows and MacOS
* Optimized code
* Move installer running to client side for Ubuntu
* Move installer launch logic to client side for Windows
* Clean service code
* Add linux_install script to resources
* Add logs for UpdateController
* Add draft for MacOS installation
* Disable updates checking for Android and iOS
* chore: fixed macos update script
* chore: remove duplicate lines
* chore: post merge fixes
* chore: add missing ifdef
* decrease version for testing
* chore: added changelog text processing depend on OS
* add .vscode to .gitignore
* Change updater downloading method to retrieving link from the gateway
* add Release date file creation to s3 deploy script
* Add release date downloading from endpoint
* update check refactoring
* feat: switch macOS auto-update from DMG to ZIP+PKG installer
- Update macOS artifact URL from .dmg to .zip
- Rewrite mac_installer.sh to extract ZIP and install PKG via osascript
- Increase download timeout to 30s for larger ZIP files
* fix: fix Android build
* feat: Change get request for updater link to post
* refactor: preparing NewsModel for update notifications
- Changed `updateModel` to `setNewsList` for better semantic meaning.
- Delegate model container updating to private method updateModel
- Updated the logic for marking news as read to use item IDs instead of a boolean flag.
* feat: Move update notification in news list
- Updated `UpdateController` to handle empty release dates in header text.
- Added `getVersion` method to `UpdateController` for version retrieval.
- Enhanced `NewsModel` to support update notifications with new methods for marking updates as skipped and setting update notifications.
- Updated QML pages to display update information and provide actions for updates and skipping them.
- Introduced `isUpdate` property in `NewsItem` to differentiate between regular news and updates.
* feat: Implement rate limit workaround for gateway requests
- Added a delay before contacting the gateway in both `UpdateController` and `ApiNewsController` to prevent rate limit issues caused by simultaneous requests.
* refactor: Convert synchronous network requests to asynchronous in UpdateController
- Updated `UpdateController` to use asynchronous network requests for fetching gateway URL, version info, changelog, and release date.
- Introduced `doGetAsync` method to handle asynchronous GET requests with error handling.
- Removed synchronous methods to improve responsiveness and prevent blocking the UI during network operations.
- Added a mechanism to prevent multiple concurrent update checks.
* chore: Decrease AmneziaVPN version to 4.8.10.0 in CMakeLists.txt for testing
* refactor: Improve update check handling to avoid rate limit issues
- Updated `CoreController` to initiate update checks after news fetching is complete.
- Removed synchronous waiting in `ApiNewsController` to streamline the fetching process.
* fix: fixed typo in IsReadRole
* fix: fix updater filenames
* chore: move updateController to core
* refactor: update to mvvm
* chore: tiny fix
---------
Co-authored-by: aiamnezia <ai@amnezia.org>
Co-authored-by: aiamnezia <ai@amnezia.com>
Co-authored-by: Pokamest Nikak <pokamest@gmail.com>
Co-authored-by: KsZnak <ksu@amnezia.org>
Co-authored-by: Cyril Anisimov <cyan84@gmail.com>
Co-authored-by: vkamn <vk@amnezia.org>
* refactor: move business logic from servers model
* refactor: move containersModel initialization
* refactor: added protocol ui controller and removed settings class from protocols model
* refactor: moved cli management to separate controller
* refactor: moved app split to separate controller
* refactor: moved site split to separate controller
* refactor: moved allowed dns to separate controller
* refactor: moved language logic to separate ui controller
* refactor: removed Settings from devices model
* refactor: moved configs and services api logit to separate core controller
* refactor: added a layer with a repository between the storage and controllers
* refactor: use child parent system instead of smart pointers for controllers and models initialization
* refactor: moved install functions from server controller to install controller
* refactor: install controller refactoring
* chore: renamed exportController to exportUiController
* refactor: separate export controller
* refactor: removed VpnConfigurationsController
* chore: renamed ServerController to SshSession
* refactor: replaced ServerController to SshSession
* chore: moved qml controllers to separate folder
* chore: include fixes
* chore: moved utils from core root to core/utils
* chore: include fixes
* chore: rename core/utils files to camelCase foramt
* chore: include fixes
* chore: moved some utils to api and selfhosted folders
* chore: include fixes
* chore: remove unused file
* chore: moved serialization folder to core/utils
* chore: include fixes
* chore: moved some files from client root to core/utils
* chore: include fixes
* chore: moved ui utils to ui/utils folder
* chore: include fixes
* chore: move utils from root to ui/utils
* chore: include fixes
* chore: moved configurators to core/configurators
* chore: include fixes
* refactor: moved iap logic from ui controller to core
* refactor: moved remaining core logic from ApiConfigsController to SubscriptionController
* chore: rename apiNewsController to apiNewsUiController
* refactor: moved core logic from news ui controller to core
* chore: renamed apiConfigsController to subscriptionUiController
* chore: include fixes
* refactor: merge ApiSettingsController with SubscriptionUiController
* chore: moved ui selfhosted controllers to separate folder
* chore: include fixes
* chore: rename connectionController to connectiomUiController
* refactor: moved core logic from connectionUiController
* chore: rename settingsController to settingsUiController
* refactor: move core logic from settingsUiController
* refactor: moved core controller signal/slot connections to separate class
* fix: newsController fixes after refactoring
* chore: rename model to camelCase
* chore: include fixes
* chore: remove unused code
* chore: move selfhosted core to separate folder
* chore: include fixes
* chore: rename importController to importUiController
* refactor: move core logic from importUiController
* chore: minor fixes
* chore: remove prem v1 migration
* refactor: remove openvpn over cloak and openvpn over shadowsocks
* refactor: removed protocolsForContainer function
* refactor: add core models
* refactor: replace json with c++ structs for server config
* refactor: move getDnsPair to ServerConfigUtils
* feat: add admin selfhosted config export test
* feat: add multi import test
* refactor: use coreController for tests
* feat: add few simple tests
* chore: qrepos in all core controllers
* feat: add test for settings
* refactor: remove repo dependency from configurators
* chore: moved protocols to core folder
* chore: include fixes
* refactor: moved containersDefs, defs, apiDefs, protocolsDefs to different places
* chore: include fixes
* chore: build fixes
* chore: build fixes
* refactor: remove q repo and interface repo
* feat: add test for ui servers model and controller
* chore: renamed to camelCase
* chore: include fixes
* refactor: moved core logic from sites ui controller
* fix: fixed api config processing
* fix: fixed processed server index processing
* refactor: protocol models now use c++ structs instead of json configs
* refactor: servers model now use c++ struct instead of json config
* fix: fixed default server index processing
* fix: fix logs init
* fix: fix secure settings load keys
* chore: build fixes
* fix: fixed clear settings
* fix: fixed restore backup
* fix: sshSession usage
* fix: fixed export functions signatures
* fix: return missing part from buildContainerWorker
* fix: fixed server description on page home
* refactor: add container config helpers functions
* refactor: c++ structs instead of json
* chore: add dns protocol config struct
* refactor: move config utils functions to config structs
* feat: add test for selfhosted server setup
* refactor: separate resources.qrc
* fix: fixed server rename
* chore: return nameOverriddenByUser
* fix: build fixes
* fix: fixed models init
* refactor: cleanup models usage
* fix: fixed models init
* chore: cleanup connections and functions signatures
* chore: cleanup updateModel calls
* feat: added cache to servers repo
* chore: cleanup unused functions
* chore: ssxray processing
* chore: remove transportProtoWithDefault and portWithDefault functions
* chore: removed proto types any and l2tp
* refactor: moved some constants
* fix: fixed native configs export
* refactor: remove json from processConfigWith functions
* fix: fixed processed server index usage
* fix: qml warning fixes
* chore: merge fixes
* chore: update tests
* fix: fixed xray config processing
* fix: fixed split tunneling processing
* chore: rename sites controllers and model
* chore: rename fixes
* chore: minor fixes
* chore: remove ability to load backup from "file with connection settings" button
* fix: fixed api device revoke
* fix: remove full model update when renaming a user
* fix: fixed premium/free server rename
* fix: fixed selfhosted new server install
* fix: fixed updateContainer function
* fix: fixed revoke for external premium configs
* feat: add native configs qr processing
* chore: codestyle fixes
* fix: fixed admin config create
* chore: again remove ability to load backup from "file with connection settings" button
* chore: minor fixes
* fix: fixed variables initialization
* fix: fixed qml imports
* fix: minor fixes
* fix: fix vpnConnection function calls
* feat: add buckup error handling
* fix: fixed admin config revok
* fix: fixed selfhosted awg installation
* fix: ad visability
* feat: add empty check for primary dns
* chore: minor fixes
* fix: fixed links on page with service description
* fix: fixed subscription text color
* chore: update ru translations
* chore: add save button
* fix: ru translation fixes
* feat: iap for apple now use storekit2
* fix: fixed error 101 on connection event
* feat: enhance StoreKit2Helper to handle entitlements and improve restore service from App Store functionality
* chore: add isInAppPurchase and isTestPurchase in primary config
* refactor: use end_date from primary config for renew ui
* fix: hide renew button for free
* fix: hide renew button for appstore purchases
* feat: add new premium info page
* feat: add new free info page
* chore: minor fixes
* refactor: move plan and benefits into separate models
* fix: fixed expired status when configs without an end date
* feat: add trial api support
* chore: add api message parsing for 422 error
* feat: move privacy policy and term of use to gateway
* feat: add iap support for new premium info page
* chore: minor fixes
* chore: minor fix
* chore: minor fixes
* feat: additional parsing for storekit subscription plans
* chore: minor codestyle fixes
* chore: simplify benefits
* chore: hide extend buttons on external premium
* feat: add trial error processing
* fix: remove wrong check from tiral handler
* chore: cleanup
---------
Co-authored-by: spectrum <yyy@amnezia.org>
* fix: xray heap corruption
* fix: use proper configuration for split-tunneled apps
* chore: enable killswitch
* chore: xray windows split-tunneling cleanup
* chore: proper xray killswitch log
* feat: add wait for the tun device
* chore: update amnezia_xray deps for macos
* fix: add nullptr check for split-tunnel on win
* fix: modernize vpnAdapter grabbing function
* fix: remove network watcher due to its fragileness
* chore: xrayprotocol cleanup
* fix: correct wrong iface index on win
* chore: move tun2socks implementation to the client from the service
* chore: xrayprotocol cleanup
* chore: more xrayprotocol cleanup
* fix: consistent tun device with GUID specified
* chore: tun2socks logs
* chore: PrivilegedProcess cleanup
* better error handling in establishment phase
* terminate&kill ops for remote process
* fix: straighforward killing the process on windows
* fix: finally remove GUID setting from tun2socks due to instability
* fix: add sanitizer to ipc process
* chore: do not collect sensitive info from tun2socks
* feat: add support gamepad buttons
* feat: add support gamepad with github repo
* feat: add gitmodules dependency
* feat: add submodule qtgamepad
* chore: update qtgamepad submodule to commit 4e57142e563b931766056b4c7507c16892260222
* fix: update qtgamepad with standard CMake and private headers support
Update qtgamepad to commit f72b3e0 which:
- Replaces qt_add_library with standard add_library to avoid Qt 6.10 macro conflicts
- Copies private headers to build include tree for Android backend
- Creates Qt:: and Qt6:: namespace aliases for proper linking
* fix: add enablePeerTraffic call to xray
* chore: remove unnecessary steps during xray TUN setup phase
* chore: move tun init from tun2socks code to ipcserver
* chore: rework xray routing
* get rid of redundant delays
* check if remote calls are successful
* chore: xray routing fine-tuning
* fix: add service qt deps to deployment build
* Checking Linux kernel version when installing amneziawg-go
print the Linux kernel version to stdOut for subsequent checking by the server controller.
* Add error for old linux kernel
Add error 214 ServerLinuxKernelTooOld
* Add case for old linux kernel
Add case for error 214 ServerLinuxKernelTooOld
* Added kernel check for Awg2
Added Linux kernel version check and introduced corresponding ServerLinuxKernelTooOld error for Awg2.
* chore: bump version
* chore: fix deploy.yml
* chore: return jurplel/install-qt-action@v3
* chore: bump qt version
* chore: disable cache
* chore: fix qt bin folder path
* chore: downgraded qt version for linux
* chore: disable gradle cache
* chore: use large runner for linux and android
* chore: change runner name for android and linux
* fix: change github runner label
* fix: set github runner specific os version in label
* chore: add self-hosted runner ubuntu-24.04-4cores
* fix: changed label to self-hosted for github runners
* fix: changed label to 4-core for github runners
* fix: fixed app closing delay
* fix: fixed awg description
* chore: bump version
---------
Co-authored-by: irvinklause <ik@amnezia.org>
* Submodule amneziawg-apple updated
* feat: add support for controlled junk and special handshake timeout in AWG configurator
* refactor: improve AWG configurator and iOS controller logic
* awg_configurator.cpp reverted
* fix: context menu fixes for qt6.9
* chore: is-test-flight porcessing
* chore: bump version and minor build fixes
* refactor: moved test purchase processing on client side
* fix: fixed free import on ios
* chore: bump qt version in deploy.yml
* fix: minor fixes
* feat: integrated xray as a library and added split-tunneling
* fix: added copying amnezia_xray.dll to build dir
* fix: changed path on darwin
* chore: clean up getting default device
* chore: removed WSAGetLastError from sockopt logging
* fix: get rid of debug logs in xray handlers
* fix: minor fixes and xray debugging capabilities
* fix: macos default interface fix
* fix: roll-back ipv6 sockopt for mac
* fix: bind IPv6 on Windows
* fix: (win) better IPv6 handling and router fixes
* feat: prebuilts uploaded
* fix: removed redundant cmake definitions
* feat: moved xray to service process, reworked errors
* fix: return values in networkUtilities
* fix: macos build fixes
* fix: (windows) cmake fixes
* fix: (windows) compilation fix
* fix: (windows) changed location of amnezia_xray.dll
* feat: xray logs added to system service
* chore: bump xray&tun2socks versions for android
* chore: cleanup of XrayProtocol class
* removed killswitch
* removed redundant members and basic cleanup
* feat: support split-tunneling in iOS and macOS NE
* chore: update active interface index based on network path and available interfaces
* refactor: update network path handling and logging in PacketTunnelProvider
* chore: bump xray deps
---------
Co-authored-by: Yaroslav Yashin <yaroslav.yashin@gmail.com>
* fix: clear file name to remove header
* update: clear on signal
* removed uneccessary function
* fix: clear filename on invalid config type
---------
Co-authored-by: vkamn <vk@amnezia.org>
* fix: app freeze on quit
* fix: typo in VpnConnection destructor
* add trace info
* add more trace info
* set timelimit for flushDns
* Refactor IpcClient::Interface access logic
* cleanup unused variable
* cleanup trace info
* fix: remove second disconnect from VPN on app close
* this object will be deleted at app close
* Don't terminate VPN thread on Linux
* Revert "Don't terminate VPN thread on Linux"
This reverts commit 20e4ea2d4a.
* disconnect all signals from vpnconnection on exit
* add interruption request on vpnConnectionThread
* use checktimer only for iOS
* disconnect all signals from vpnconnection on exit
* disconnect signals on exit before VPN disconnect
* add disconnectSlots method
* fix: add allow traffic rules on killswitch disable
* wait for response from service before object destroy
* change disconnect from vpn order
* add delay for connection close
* change disconnect method order
* use stop method for protocol disconnecect
* change disconnect method order
* allow dns traffic after app close
* delete tun on disconnect
---------
Co-authored-by: vkamn <vk@amnezia.org>
* fix(api_key): added displaying vpn_key field added in older version of the app
* revert changes
* fix: implemented generation of api key text for PremiumV2
* fix: deleted unnecessary code
* saving apikey text when generating
* added method for vpn key export, fixed wrong saving file
* feat: enhance OpenVPN configuration handling and logging for iOS platform
* refactor: remove $OPENVPN_TA_KEY_SANITIZED and use $OPENVPN_TA_KEY instead
- Windows (x64/x86):
- Remove delegation to `AmneziaVPN.exe -c`
- Delete `%ProgramData%\AmneziaVPN\log\AmneziaVPN-service.log`
- Delete current user logs at `%AppData%\AmneziaVPN.ORG\AmneziaVPN\log`
- Remove empty parent dirs (app/org, log)
- Linux:
- Delete only `/var/log/AmneziaVPN/AmneziaVPN-service.log` (preserve `post-uninstall.log`)
- Delete current user logs at `$HOME/.local/share/AmneziaVPN.ORG/AmneziaVPN/log`
* refactor(app options): use QCommandLineOption members for autostart/cleanup
* fix(app): initialize QCommandLineOption members in ctor/field to avoid no-default-ctor build failures
* There's a common issue of building iOS apps on Qt 6.8 because of new introduced ffmpeg dependency in multimedia Qt package
ref: https://community.esri.com/t5/qt-maps-sdk-questions/build-failure-on-ios-with-qt-6-8/m-p/1548701#M5339
* Cmake related changes
* Source code changes
* Various entitlements
* Ci-cd config update
* Resources changes
* Submodules updated
* Remove me
* QtWidget exclusion omitted
* Distribution errors fixed
* Outdated files deleted
* macos_ne cmake fixed
* fix: update provisioning profile specifiers for macOS network extension
* fix: update provisioning profile specifiers and code sign flags for macOS build
* Revert me
(temporary 3rd-build commit pointer)
* fix: Welcome screen fix
* fix: ci/cd hanging forever fix
* fix: Fixed error popup on macos on file save
* refactor: rename networkextension target to AmneziaVPNNetworkExtension in macos build configuration
* feat: add autostart support for Mac App Store builds on macOS
Fixes: QA-8
* feat: add debug logging to Autostart functionality on macOS
* Revert "feat: add autostart support for Mac App Store builds on macOS"
This reverts commit 3bd25656fb.
* feat: add platform-specific close window behavior for macOS App Store build with Network Extension
Closes: QA-12
* When the application starts with "Start minimized" enabled on macOS (especially the
sandboxed App-Store build compiled with MACOS_NE), fully hiding the window prevents it
from being restored by clicking the Dock icon. The proper behaviour is to start the
window in the *minimized* state instead. That way the window is still part of the
window list and the system automatically brings it back when the user clicks the Dock
icon, replicating the native experience.
On the other platforms we keep the old behaviour (hide the window completely and rely
on the tray icon), therefore we switch at runtime by checking the current OS.
Closes: QA-7
Closes: QA-8
* Revert "When the application starts with "Start minimized" enabled on macOS (especially the"
This reverts commit 7b0d17987c.
* feat: MACOS_NE systray menu support
* feat: add macOS notification handler and install event filter on main window
* feat: implement custom close behavior for Amnezia application on different platforms
* fix: update provisioning profile specifiers for macos builds
* fix: Fatal error in logs
CLI-216
* fix: disabled unavailable on macos ne service logs
* fix: dock icon now hides only when window is closed; menubar icon shows always
Initial state of the docker icon to be presented follows "Start minimized" setting in app settings.
* temp-fix: temporary disable all OpenVPN options of VPN on MACOS_NE since it's not working yet.
* fix: build script updated
* feat: add macOS NE build workflow to GitHub Actions
* fix: Not working Auto start toggle is hidden
* fix: Log spamming during xray connection fixed
* 3rd-prebuild points to commit that stores macos_ne universal binaries.
* fix: missing native dependency on linking stage fixed
* chore: update link to submodule
---------
Co-authored-by: vladimir.kuznetsov <nethiuswork@gmail.com>
* added signal-slot connection between corecontroller and systemtraynofificationhandler updating websiteurl
* cleared up the commented lines
* fixed andorid includes for systemtraynotificationhandler
* change position view mode
* remove `parentFlickable` from `PageShare`
* replace `FlickableType` with `ListViewType` in `PageSettings`
* reorganize `PageSettingsAbout` for improved structure
* replace `Flickable` with `ListViewType` in drawer in `PageSettingsApiNativeConfigs`
* replace `FlickableType` with `ListViewType` in `PageSettingsApplication` and update layout structure
* replace `FlickableType` with `ListViewType` in `PageSettingsAppSplitTunneling` and adjust layout for better structure
* replace `FlickableType` with `ListViewType` in `PageSettingsBackup`
* replace `FlickableType` with `ListViewType` in `PageSettingsConnection`
* replace `FlickableType` with `ListViewType` in `PageSettingsDns`
* replace `FlickableType` with `ListViewType` in `PageSettingsLogging`
* replace `FlickableType` with `ListViewType` in `PageSettingsServerData`
* update structure of `PageSettingsServerProtocol`
* update `PageSettingsServersList`
* replace `ListView` with `ListViewType` in `PageSettingsSplitTunneling`
* replace `FlickableType` with `ListViewType` in `PageServiceDnsSettings`
* update `PageServiceSftpSettings`
* update `PageServiceSocksProxySettings`
* replace `FlickableType` with `ListViewType` in `PageServiceTorWebsiteSettings`
* replace `FlickableType` with `ListViewType` in `PageSetupWizardApiServiceInfo`
* update `PageSetupWizardApiServicesList`
* replace `ListView` with `ListViewType` in `PageSetupWizardConfigSource`
* replace `ListView` with `ListViewType` in `PageSetupWizardCredentials`
* replace `FlickableType` with `ListViewType` in `PageSetupWizardEasy`
* replace `FlickableType` with `ListViewType` in `PageSetupWizardInstalling`
* replace `ListView` with `ListViewType` in `PageSetupWizardProtocols`
* replace `FlickableType` with `ListViewType` in `PageSetupWizardProtocolSettings`
* replace `FlickableType` with `ListViewType` in `PageSetupWizardTextKey`
* replace `FlickableType` with `ListViewType` in `PageSetupWizardViewConfig`
* update `PageProtocolAwgClientSettings`
* update `PageProtocolAwgSettings`
* replace `FlickableType` with `ListViewType` in `PageProtocolCloakSettings`
* replace `FlickableType` with `ListViewType` in `PageProtocolRaw`
* replace `FlickableType` with `ListViewType` in `PageProtocolShadowSocksSettings`
* replace `FlickableType` with `ListViewType` in `PageProtocolWireGuardClientSettings`
* replace `FlickableType` with `ListViewType` in `PageProtocolWireGuardSettings`
* replace `FlickableType` with `ListViewType` in `PageProtocolXraySettings`
* replace `FlickableType` with `ListViewType` in `PageShareFullAccess`
* replace `FlickableType` with `ListViewType` in `PageDeinstalling`
* update `PageDevMenu`
* remove `Flickable` references in `LabelWithButtonType`
* remove useless key navigation handlers from `ListViewType`
* replace `ListView` with `ListViewType` in `ListViewWithRadioButtonType.qml` and remove unnecessary properties
* remove references to `Flickable` in `TextAreaType.qml`
* remove references to `Flickable` in `TextAreaWithFooterType`
* remove references to `FlickableType` in `TextFieldWithHeaderType`
* remove references to `FlickableType` in `SwitcherType`
* remove references to `FlickableType` in `CheckBoxType`
* remove references to `FlickableType` in `CardWithIconsType.qml`
* remove references to `FlickableType` in `BasicButtonType.qml`
* update `ServersListView`
* update `SettingsContainersListView`
* update `InstalledAppsDrawer`
* update `SelectLanguageDrawer`
* update `HomeContainersListView`
* update `HomeSplitTunnelingDrawer`
* fix `PageSetupWizardApiServicesList`
---------
Co-authored-by: vladimir.kuznetsov <nethiuswork@gmail.com>
* added warning label when config files have changed in premium configuration files display
* moved warning display from PageSettingsApiNativeConfigs.qml to PageSettingsApiServerInfo.qml
* added subscription key display element to subscription management page
* refactrored KeySubscription item to a new page
* minor fix
* changed PageShareDrawer into PageShareConnection
* added back button
* Removed deprecated ShareConnectionDrawer and migrated to PageShareConnection
* fixed issue when show-connection settings button was not working
* deleted empty lines
* minor fix
* refactor: update `ScrollBarType` policy to use
`AsNeeded` for better usability
* add selecting of location settings with Enter
* add handlers to enter push
* fixed issue with restoring wrong platform specific variables in backup
* fixed wrong line
* fixed issue when restong app split tunneling mode not intended for windows platform
* added field containing application platform to backup file, added feature to clear appsSplitTunneling list from backup file if backup was made on other platform
* fixed issue when ui was not getting update about clearing profile cache right after it
* fixed the problem of not clearing the profile
* refactored reload function in protolocolsModel
* refactored the issue with signal connect in corecontroller
* added lines for restoring settings when scanning server for OpenVPN, OpenVPN over Cloak and OpenVPN over SS protocols
* minor fix
* added functionality to restore config for multiprotocol configsCloak and Shadowsocks
* Update amneziavpn_ru_RU.ts
* Update amneziavpn_ru_RU.ts
* Update amneziavpn_ru_RU.ts
* Deleted corrupted ru translation
* Updated amneziavpn_ru_RU.ts
* Saved amneziavpn_ru_RU.ts
* Rewrite some back on english
* Rewrite small issues
* Rewrite another small issues
* Create deploy_mod.yml
Modificated deploy.yml - removed Linux, IOS and MacOS jobs
Made just for test and learning
* some changes
* deleted my uneccessary file
* new translations
* refactoring: moved shared code into reusable functions for ApiConfigsController
* feat: add xray support in apiConfigsController
* feat: added a temporary switch for the xray protocol on api settings page
* feat: added supported protocols field processing
* refactoring: moved IsProtocolSelectionSupported to apiAccountInfoModel
* Add uninstall option and output pkg
Improve installer mode detection
Fix macOS installer packaging
Fix default selection for uninstall choice
Remove obsolete tar handling and clean script copies
* Improve macOS build script
* fix: update macos firewall and package scripts for better compatibility and cleanup
* Add DeveloperID certificate and improve macOS signing script
Use keychain option for codesign and restore login keychain to list
after signing
* Update build_macos.sh
* feat: add script to quit GUI application during uninstall on macos
* fix: handle macos post-install when app is unpacked into localized folder
* fix: improve post_install script to handle missing service plist and provide error logging
* Allow secondary DNS usage when AmneziaDNS is disabled
* Don't setup secondary DNS for OpenVPN with AmneziaDNS
---------
Co-authored-by: vladimir.kuznetsov <nethiuswork@gmail.com>
* added notification about disconnecting users after applying changes for SS and Cloak servers pages
* added notification about changing protocol data for server and some minor changes
* LOCK_FILE for zypper
Checking LOCK_FILE for zypper to support OpenSUSE
* Installation for OpenSUSE
Docker installation support for OpenSUSE
* quiet for zypper
* LOCK_CMD variable
Implementing the LOCK_CMD variable for different OS.
* additional exception for "server is busy"
* Replacing and with or
Replacing && with ||
* undo changes to serverController
* rpm.lock
rpm.lock for dnf yum and zypper
* LOCK_CMD
check for dnf
* Added zypper in check_user_in_sudo
* fixed the bug when split tunneling was not preserving after backup for Windows and Android platforms
* fixed camelCase and setRouteMode() call
* fixed site splitTunneling for all platforms
* fixed issue with not preserving tunneling route mode
* fixed issue with not restoring autostart setting after backup
* fixed bug when autostart setting was not saving innto backup file and not preserving after backup
* deleted unused lines
* bugfix: fixed the migration form appearing on app start
* feature: added app version to api requests payload
* chore: remove unused file
* feature: extended logging in service part
* chore: bump version
* chore: update ru translation file
* added the ability to change port after installing xray
* fixed issue with not updating server config for xray on windows platform
* fixed some warning in exportcontroller.cpp
* fixed bug with not applying changes to subnet address when reinstalling server
* fixed wireguard empty 'subnet address' field after reinstalling and removed showing mask for AWG and wireguard in UI
* Fix ListViewType scrolling on country selection page
* Disable highlightFollowsCurrentItem for country selection page
* Fix scrolling on container DropDown
* Fix ListView height
* Fix listview layout in DropDownType
* Remove unnecessary MouseArea from country selection page
* Add allowed DNS list for killswitch
* Windows killswitch strict mode backend part
* Killswitch strict mode for Linux and MacOS
* Windows fixes
* feature: Add Kill Switch settings page with strict mode option
* fix windows build after merge
* Refresh killswitch mode when it toggled
* Use HLM to store strictMode flag
* Some Linux updates
* feat: Enhance VerticalRadioButton with improved styling and disabled states
* Refresh killSwitch state update
* Fix build
* refactor: Modularize header components
* Change kill switch radio button styling
* Fix strict kill switch mode handling
* Refactor: Replace HeaderType with new Types for headers in QML pages
* Remove deprecated HeaderType QML component
* Refresh strict mode killswitch after global toggle change
* Implement model, controller and UI for killswitch dns exceptions
* Connect backend part and UI
* Change label text to DNS exceptions
* Remove HeaderType from PageSettingsApiDevices
* Some pretty fixes
* Fix problem with definition sequence of PageSettingsKillSwitchExceptions.pml elements
* Add exclusion method for Windows firewall
* Change ubuntu version in deploy script
* Update ubuntu version in GH actions
* Add confirmation popup for strict killswitch mode
* Add qt standard path for build script
* Add method to killswitch for expanding strickt mode exceptions list and fix allowTrafficTo() for Windows. Also Added cache in KillSwitch class for exceptions
* Add insertion of gateway address to strict killswitch exceptions
* Review fixes
* buildfix and naming
---------
Co-authored-by: aiamnezia <ai@amnezia.org>
* fix: AWG/WG protocol with system disabled IPv6
* add check for route prefix type
* fix: ignore IPv6 setup error for Linux
This error can be cased by system disabled IPv6
* Error for cgroup mountpoint
Added handling of message: cgroup mountpoint does not exist.
* Case for error cgroup
Added case and case description for: Cgroup Mountpoint Does Not Exist
* Case for Runc
Added error handling for Runc, which does not work in cgroup v2.
Changed numbering of new errors.
* stdErr handling fot run_container
Enabling stdErr handling fot run_container.sh
* change for stdErr handling
* Another place to handle the error 211
Another place to handle the error: ServerRuncNotWorkOnCgroupsV2
* test_1
* test 2
* test 3
* Moving error handling
Moving error handling to the right place in the controller.
* Polishing
* Еext correction
Сorrection of description text.
* Disable split tunneling with empty list
* Fix bug with Amnezia DNS in split tunneling list
* update ubuntu version for linux deploy pipeline
* Fix deploy script
* Direct use of the $HOME variable.
* Sudo check witch variable $HOME.
Direct use of the $HOME variable.
* Changing for Error 208
Changing description and title for error 208
* Revert "Changing for Error 208"
This reverts commit f45624c023.
* Changing for Error 207
Changing description and title for Error 207
* Username if whoami returns an error
Сommand to use home directory name if whoami returns error or is missing for prepare_host.sh.
* Update check_user_in_sudo.sh
Сommand to use home directory name if whoami returns error or is missing for check_user_in_sudo.sh.
Checking server user permissions to use sudo using a package manager or using uname.
Сhecking and redefining the system language.
Checking requirements for sudo users or root in script.
* Cases have been changed and added.
Changed description of the “Server User Not In Sudo” case.
Corrected the name and description of the "ServerPacketManagerError" case. Packet to Package.
Adding a "SudoPackageIsNotPreinstalled" case.
Adding a "ServerUserNotAllowedInSudoers" case.
Adding a "ServerUserPasswordRequired" case.
* Serves errors have been changed and added.
Corrected the name of the "ServerPacketManagerError" error to "ServerPackageManagerError".
Adding a "SudoPackageIsNotPreinstalled" error.
Adding a "ServerUserNotAllowedInSudoers" error.
Adding a "ServerUserPasswordRequired" error.
* Return ServerPacketManagerError
Return to the name "ServerPacketManagerError".
* Added errors handling
Added new errors' handling to serverController.cpp.
Permission checks are also performed for the root user.
* Update translations
Updating translations for two existing server errors.
* Myanmar translation update
* Update for my_MM.ts
* checking for not allowed
Checking for "not allowed" in stdOut
* Removed "not allowed"
Removed check for "not allowed" in stdOut
* Removed nested launch
Removed nested launch via sudo
* Returned nested launch
Returned nested launch via sudo
* All checks with sudo
Both checks with sudo always run.
* Moved removing timestamp sudo
Removing the sudo timestamp is done every time.
* Checking the user directory
Checking the accessibility of the user's home directory
* Polishing
Изменение порядка обработки ошибок.
* changing detection order
change the order of detection of inconsistencies:
1. sudo not preinstalled. (if user != root)
2. user not in sudo or wheel group. (if user != root)
3. user's directory is not accessible. (for all)
4. user not allowed in sudoers. (for all)
5. user password required. (for all)
* Packet to Package
* chore: bump version (#1463)
* fix for sh (#1462)
Fix for servers where sh is used as default shell.
* Username if whoami returns an error
Сommand to use home directory name if whoami returns error or is missing for prepare_host.sh.
* Update check_user_in_sudo.sh
Сommand to use home directory name if whoami returns error or is missing for check_user_in_sudo.sh.
Checking server user permissions to use sudo using a package manager or using uname.
Сhecking and redefining the system language.
Checking requirements for sudo users or root in script.
* Cases have been changed and added.
Changed description of the “Server User Not In Sudo” case.
Corrected the name and description of the "ServerPacketManagerError" case. Packet to Package.
Adding a "SudoPackageIsNotPreinstalled" case.
Adding a "ServerUserNotAllowedInSudoers" case.
Adding a "ServerUserPasswordRequired" case.
* Serves errors have been changed and added.
Corrected the name of the "ServerPacketManagerError" error to "ServerPackageManagerError".
Adding a "SudoPackageIsNotPreinstalled" error.
Adding a "ServerUserNotAllowedInSudoers" error.
Adding a "ServerUserPasswordRequired" error.
* Return ServerPacketManagerError
Return to the name "ServerPacketManagerError".
* Update translations
Updating translations for two existing server errors.
* Added errors handling
Added new errors' handling to serverController.cpp.
Permission checks are also performed for the root user.
* Myanmar translation update
* Update for my_MM.ts
* checking for not allowed
Checking for "not allowed" in stdOut
* Removed "not allowed"
Removed check for "not allowed" in stdOut
* Removed nested launch
Removed nested launch via sudo
* Returned nested launch
Returned nested launch via sudo
* All checks with sudo
Both checks with sudo always run.
* Moved removing timestamp sudo
Removing the sudo timestamp is done every time.
* Checking the user directory
Checking the accessibility of the user's home directory
* Polishing
Изменение порядка обработки ошибок.
* changing detection order
change the order of detection of inconsistencies:
1. sudo not preinstalled. (if user != root)
2. user not in sudo or wheel group. (if user != root)
3. user's directory is not accessible. (for all)
4. user not allowed in sudoers. (for all)
5. user password required. (for all)
* Undoing unintended changes
Undoing unintended changes.
* Undoing unintended change
Undoing unintended change.
* not allowed to use sudo
The user is not allowed to use sudo on this server.
* Capital letters in the error
Capital letters in the error description.
---------
Co-authored-by: albexk <albexk@proton.me>
* Update Windows OpenSSL to 3.0.16 and add shared library for QSslSocket plugin
* chore: update link to submodule 3rd-prebuild
---------
Co-authored-by: vladimir.kuznetsov <nethiuswork@gmail.com>
* cherry-pick 4dfcad96506fb5b88c5bb27342b6d9413fc361c9 from mozilla upstream
* cherry-pick a95fa8c088b9edaff2de18751336942c2d145a9a from mozilla
* cherry-pick commit 4fc1ebbad86a9abcafdc761725a7afd811c8d2d3 from mozilla
* cherry-pick 4dfcad96506fb5b88c5bb27342b6d9413fc361c9 from mozilla upstream
* cherry-pick 22de4fcbd454c64ff496c3380eeaeeb6afff4d64 from mozilla upstream
* cherry-pick 649673be561b66c96367adf379da1545f8838763 from mozilla upstream
* cherry-pick 41bdad34517d0ddaef32139482e5505d92e4b533 from mozilla upstream
* cherry-pick f6e49a85538eaa230d3a8634fa7600966132ccab from mozilla upstream
* cherry-pick 86c585387efa0a09c7937dfe799a90a666404fcd from mozilla upstream
* cherry-pick a18c1fac740469ca3566751b74a16227518630c4 from mozilla upstream
* fixed missing ;
* added excludeLocalNetworks() for linux
* build fixes on windows after cherry-picks
* Add rules for excluded sites splittunell mode
* Fix app splittunell when ipv6 is not setup
* Fix Linux build
---------
Co-authored-by: Mykola Baibuz <mykola.baibuz@gmail.com>
Affected functions (all on Linux/Mac):
- `RouterLinux::flushDns` was not reloading the DNS manager.
- `Utils::processIsRunning` was always saying that the process
is not running when `fullFlag` was set to `false`.
- `Utils::killProcessByName` was not killing anything.
* add focusController class
* add more key handlers
* add focus navigation to qml
* fixed language selector
* add reverse focus change to FocusController
* add default focus item
* update transitions
* update pages
* add ListViewFocusController
* fix ListView navigation
* update CardType for using with focus navigation
* remove useless key navigation
* remove useless slots, logs, Drawer open and close
* fix reverse focus move on listView
* fix drawer radio buttons selection
* fix drawer layout and focus move
* fix PageSetupWizardProtocolSettings focus move
* fix back navigation on default focus item
* fix crashes after ListView navigation
* fix protocol settings focus move
* fix focus on users on page share
* clean up page share
* fix server rename
* fix page share default server selection
* refactor about page for correct focus move
* fix focus move on list views with header and-or footer
* minor fixes
* fix server list back button handler
* fix spawn signals on switch
* fix share details drawer
* fix drawer open close usage
* refactor listViewFocusController
* refactor focusController to make the logic more
straightforward
* fix focus on notification
* update config page for scrolling with tab
* fix crash on return with esc key
* fix focus navigation in dynamic delegate of list view
* fix focus move on qr code on share page
* refactor page logging settings for focus navigation
* update popup
* Bump version
* Add mandatory requirement for android.software.leanback.
* Fix importing files on TVs
* fix: add separate method for reading files to fix file reading on Android TV
* fix(android): add CHANGE_NETWORK_STATE permission for all Android versions
* Fix connection check for AWG/WG
* chore: minor fixes (#1235)
* fix: add a workaround to open files on Android TV due to lack of SAF
* fix: change the banner format for TV
* refactor: make TvFilePicker activity more sustainable
* fix: add the touch emulation method for Android TV
* fix: null uri processing
* fix: add the touch emulation method for Android TV
* fix: hide UI elements that use file saving
* chore: bump version code
* add `ScrollBarType`
* update initial config page
* refactor credentials setup page to handle the focus navigation
* add `setDelegateIndex` method to `listViewFocusController`
* fix focus behavior on new page/popup
* make minor fixes and clean up
* fix: get rid of the assign function call
* Scrollbar is on if the content is larger than a screen
* Fix selection in language change list
* Update select language list
* update logging settings page
* fix checked item in lists
* fix split tunneling settings
* make unchangable properties readonly
* refactor SwitcherType
* fix hide/unhide password
* `PageShare` readonly properties
* Fix list view focus moving on `PageShare`
* remove manual focus control on `PageShare`
* format `ListViewFocusController`
* format `FocusController`
* add `focusControl` with utility functions for
focus control
* refactor `listViewFocusController` acoording to `focusControl`
* refactor `focusConroller` according to `focusControl`
* add `printSectionName` method to `listViewController`
* remove arrow from `Close application` item
* fix focus movement in `ServersListView`
* `Restore from backup` is visible only on start screen
* `I have nothing` is visible only on start screen
* fix back button on `SelectLanguageDrawer`
* rename `focusControl` to `qmlUtils`
* fix `CMakeLists.txt`
* fix `ScrollBarType`
* fix `PageSetupWizardApiServicesList`
* fix focus movement on dynamic delegates in listView
* refactor `PageSetupWizardProtocols`
* remove comments and clean up
* fix `ListViewWithLabelsType`
* fix `PageProtocolCloakSettings`
* fix `PageSettingsAppSplitTunneling`
* fix `PageDevMenu`
* remove debug output from `FocusController`
* remove debug output from `ListViewFocusController`
* remove debug output from `focusControl`
* `focusControl` => `FocusControl`
---------
Co-authored-by: albexk <albexk@proton.me>
Co-authored-by: Nethius <nethiuswork@gmail.com>
* feature: added subscription expiration date for premium v2
* feature: added a check for the presence of the “services” field in the response body of the getServicesList() function
* feature: added prohibition to change location when connection is active
* bugfix: renamed public_key->end_date to public_key->expires_at according to the changes on the backend
* Up Qt to 6.7.3
* Bump version to 4.8.2.0
* Raise the minimum Android version to 8 (API 26)
* Update version code to separate versions for new and old Androids
* Fix mouse not working on TVs
* Refactor logging
* Bump version code
* added saving allowed_ips to the array of strings for old configs
* Remove config string processing, add getting all AWG, WG parameters from JSON
* fixed checking of default routes when adding split tunneling from the application
* added check when processing siteBasedSplitTunneling
* added open service logs to logs page
* redesign of log saving buttons
* hide service logs buttons for mobile platforms
* refactoring: moved logger to common folder
* feature: added the ability to enable logs to the start screen
* Up Gradle to 8.10
* Update Android dependencies
* Up Qt to 6.7.2
* Up qtkeychain to 0.14.3
* Move function of changing the color of the navigation bar to the android side
* Fix splashscreen and recent apps thumbnail backgrounds
* Android authentication refactoring
* Fix GitHub action
* Fix the extra circle around the connect button on Android
* Fix keyboard popup
* Increase the amount of requestNetwork attempts on Android 11
Add a link about a corresponding PR to a workflow run build summary. Each time a PR is updated, a corresponding link to the PR will be added to the build summary and will be accessible within a workflow run.
In addition, remove unnecessary job names.
* Add an explicit value for the hasFragileUserData parameter
* Fix app crashes when canceling file opening
* Fix requestNetwork bug for Android 11
* Fix activity onStop method
* Fix udpgso
* Fix amneziawg run dir
* Update Windows AWG binaries
* Update AWG (v0.2.8)
* Fix Windows pipe name
* Fix Windows tunnel service name
* Update Windows x86 AWG binary
* Change default MTU for WireGuard and AWG
* Fix preprocessor macros
* Attempt to fix API error 1100
* NSURLSession fake call to exec iOS network settings dialog
* use http://captive.apple.com/generate_204 for requesting internet
permission
* moved MobileUtils to IosController
* replaced callbacks with signal-slots in apiController
- Added tab navigation functional.
- In basic types added parentFlickable property, which will help to ensure, that the item is visible within flickable parent during tab navigation.
- Added focus state for some basic types.
- In PageType qml file added lastItemTabClicked function, which will help to focus tab bar buttons when the last tab on the current page clicked.
- Added Focus for back button for all pages and drawers.
- Added scroll on tab for Servers ListView on PageHome.
ROOT CAUSE: When disconnecting service, m_logworker is deleted in thread which does not have affinity with m_logworker.
The time m_logworker is deleted, it may be used by m_logthread and make the service crashed
ACTION: Connect signal finished() of m_logthread to deleteLater() slot of m_logworker to safety delete it.
ROOT CAUSE: The button state is decided by the attribute isServerInfoShow and it was added by commit 68fe20ddf6. The logic to decide whether server info showed is not correct
ACTION: Revert commit 68fe20ddf6
* Add Quick Settings tile
- Add multi-client support to AmneziaVpnService
- Make AmneziaActivity permanently connected to AmneziaVpnService while it is running
- Refactor processing of connection state changes on qt side
- Add VpnState DataStore
- Add check if AmneziaVpnService is running
* Add tile reset when the server is removed from the application
* removed the display of servers without containers on PageShare
* removed unused isAnyContainerInstalled() from containers model
* added tab navigation to the share connection drawer
* fixed display of default server without containers on PageShare
* added error handler for api controller
* while downloading the config from the api, the Connecting status is now displayed
* added a button to delete container config for api servers
* added crc check to avoid re-import of api configs
* fixed currentIndex of serversMenuContent after DefaultServerIndexChanged
* added closing the import window after re-importing the config from api
Improved docker cleanup.
Removing anonymous volumes associated with containers.
Specifying the full name of the amn0 network interface to remove when cleaning the server.
- config created on connection is displayed as admin (platform name) on the client management page
- added config creation time on the client management page
Remove the path filter, as the content path may not contain a filename.
Disable import when viewing files.
Config can be imported from:
- shared file
- shared text
- vpn:// link
Move to gradle kotlin DSL
Use gradle version catalog
All android build parameters are set via cmake files
Use gradle abi split to build APKs
Improve local development in the android project folder
[Amnezia](https://amnezia.org?utm_source=github&utm_campaign=amnezia_website-readme-en) is an open-source VPN client, with a key feature that enables you to deploy your own VPN server on your server.
> If the [Amnezia website](https://amnezia.org?utm_source=github&utm_campaign=amnezia_website-readme-en) is blocked in your region, you can use an [Alternative website link](https://storage.googleapis.com/amnezia/amnezia.org?utm_source=github&utm_campaign=amnezia_website-readme-en-mirror).
- Very easy to use - enter your ip address, ssh login and password, and Amnezia will automatically install VPN docker containers to your server and connect to VPN.
-Split tunneling support - add any sites to client to enable VPN only for them (only for desktops)
-Very easy to use - enter your IP address, SSH login, password and Amnezia will automatically install VPN docker containers to your server and connect to the VPN.
-Classic VPN-protocols: OpenVPN, WireGuard and IKEv2 protocols.
-Protocols with traffic Masking (Obfuscation): OpenVPN over [Cloak](https://github.com/cbeuw/Cloak) plugin, Shadowsocks (OpenVPN over Shadowsocks), [AmneziaWG](https://docs.amnezia.org/documentation/amnezia-wg/) and XRay.
- Split tunneling support - add any sites to the client to enable VPN only for them or add Apps (only for Android and Desktop).
- Windows, MacOS, Linux, Android, iOS releases.
- Support for AmneziaWG protocol configuration on [Keenetic beta firmware](https://docs.keenetic.com/ua/air/kn-1611/en/6319-latest-development-release.html#UUID-186c4108-5afd-c10b-f38a-cdff6c17fab3_section-idm33192196168192-improved).
AmneziaVPN uses a number of opensource projects to work:
AmneziaVPN uses several open-source projects to work:
- [OpenSSL](https://www.openssl.org/)
- [OpenVPN](https://openvpn.net/)
- [ShadowSocks](https://shadowsocks.org/)
- [Qt](https://www.qt.io/)
- [LibSsh](https://libssh.org) - forked form Qt Creator
- [LibSsh](https://libssh.org)
- [WireGuard](https://www.wireguard.com/)
- [Xray-core](https://xtls.github.io/en/)
- [Conan](https://conan.io/)
- and more...
## Help us with translations
Download the most actual translation files.
Go to ["Actions" tab](https://github.com/amnezia-vpn/amnezia-client/actions?query=is%3Asuccess+branch%3Adev), click on the first line.
Then scroll down to the "Artifacts" section and download "AmneziaVPN_translations".
Unzip this file.
Each *.ts file contains strings for one corresponding language.
Translate or correct some strings in one or multiple *.ts files and commit them back to this repository into the ``client/translations`` folder.
You can do it via a web-interface or any other method you're familiar with.
## Checking out the source code
Make sure to pull all submodules after checking out the repo.
```bash
git submodule update --init
git submodule update --init --recursive
```
## Development
## Hacking guide
Want to contribute? Welcome!
### Building sources and deployment
Look deploy folder for build scripts.
### Build requirements
### How to build iOS app from source code on MacOS
* [`CMake`](https://cmake.org/download/)
* Compiler and underlying build system, depending on the target:
- [Linux] Any of `make` and `gcc`
- [Apple] [`Xcode`](https://developer.apple.com/xcode/) or [`Xcode command line tools`](https://developer.apple.com/xcode/)
- [Windows] [`Visual Studio 2022`](https://aka.ms/vs/17/release/vs_community.exe) or [`VS 2022 Build Tools`](https://aka.ms/vs/17/release/vs_buildtools.exe)
- [Android] [`Android SDK`](#installing-android-sdk) and [`Ninja`](https://ninja-build.org/)
* [`Qt 6.10+`](https://www.qt.io/download-open-source) with the following modules:
- Core module for targeting platform (Desktop/Android/iOS)
Add a user defined variable to both AmneziaVPN and WireGuardNetworkExtension targets' build settings with
key `PATH` and value `${PATH}/path/to/bin/folder/with/go/executable`, e.g. `${PATH}:/usr/local/go/bin`.
* Basically, you can use any IDE that handles CMake and Qt kits properly to run configure and build steps, and to navigate through the code nicely. For example:
- `Qt Creator`
- `Visual Studio Code` with `Qt Extension Pack`
- and so on
if above error still persists on you M1 Mac, then most probably you need to install arch based cmake
```
arch -arm64 brew install cmake
```
* To use `Xcode`, you have to configure project first by using `cmake`. The easiest way to do it is to use `Qt Creator` for configuration. Then open `AmneziaVPN.xcodeproj` file from the build folder by using `Xcode`. Note that none of the files changed are saved - the files actually getting changed in build directory. Copy them manually if necessary
Build might fail with "source files not found" error the first time you try it, because modern XCode build system compiles
dependencies in parallel, and some dependencies end up being built after the ones that
require them. In this case simply restart the build.
* `Android studio` could be used in the same way - just configure the project by using `cmake` manually or by using `Qt Creator`. Open `<build-dir>/client/android-build` in `Android studio` then. Do not forget to copy the changes - everything you do is saved under the build directory actually.
## How to build the Android app
_tested on Mac OS_
### Installing Android SDK
The Android app has the following requirements:
* JDK 11
* Android platform SDK 33
* cmake 3.25.0
After you have installed QT, QT Creator and Android Studio installed, you need to configure QT Creator correctly. Click in the top menu bar on `QT Creator` -> `Preferences` -> `Devices` and select the tab `Android`.
* set path to jdk 11
* set path to Android SDK ($ANDROID_HOME)
In case you get errors regarding missing SDK or 'sdkmanager not running', you cannot fix them by correcting the paths and you have some spare GBs on your disk, you can let QT Creator install all requirements by choosing an empty folder for `Android SDK location` and click on `Set Up SDK`. Be aware: This will install a second Android SDK and NDK on your machine!
Double check that the right cmake version is configured: Click on `QT Creator` -> `Preferences` and click on the side menu on `Kits`. Under the center content view's `Kits` tab you'll find an entry `CMake Tool`. If the default selected CMake version is lower than 3.25.0, install on your system CMake >= 3.25.0 and choose `System CMake at <path>` from the drop down list. If this entry is missing, you either have not installed CMake yet or QT Creator hasn't found the path to it. In that case click in the preferences window on the side menu item `CMake`, then on the tab `Tools`in the center content view and finally on the Button `Add` to set the path to your installed CMake.
Please make sure that you have selected Android Platform SDK 33 for your project: click in the main view's side menu on on `Projects`, on the left you'll see a section `Build & Run` showing different Android build targets. You can select any of them, Amnezia VPN's project setup is designed in a way that always all Android targets will be build. Click on the targets submenu item `Build` and scroll in the center content view to `Build Steps`. Click on `Details` at the end of the headline `Build Android APK` (The `Details` button might be hidden in case QT Creator Window is not running in full screen!). Here we are: choose `android-33` as `Android Build platform SDK`.
That's it you should be ready to compile the project from QT Creator!
### Development flow
After you've hit the build button, QT-Creator copies the whole project to a folder in the repositories parent directory. The folder should look something like `build-amnezia-client-Android_Qt_<version>_Clang_<architecture>-<BuildType>`.
If you want to develop Amnezia VPNs Android components written in Kotlin, such as components using system APIs, you need to import the generated project in Android Studio with `build-amnezia-client-Android_Qt_<version>_Clang_<architecture>-<BuildType>/client/android-build` as the projects root directory. While you should be able to compile the generated project from Android Studio, you cannot work directly in the repository's Android project. So whenever you are confident with your work in the generated project, you'll need to copy and paste the affected files to the corresponding path in the repositories Android project so that you can add and commit your changes!
You may face compiling issues in QT Creator after you've worked in Android Studio on the generated project. Just do a `./gradlew clean` in the generated project's root directory (`<path>/client/android-build/.`) and you should be good to continue.
* Android SDK could be installed using the following methods:
- Using `Qt Creator`. Use `Preferences`->`SDKs`
- Using `Android studio`. By default it installs necessary `SDKs` automatically during the installation
- Manually by using `sdk-manager`. Check [this](https://developer.android.com/tools) page for details
## License
GPL v.3
This project is licensed under the GNU General Public License v3.0 (see LICENSE) and also includes third-party components distributed under their own terms (see THIRD_PARTY_LICENSES.md).
### [English](https://github.com/amnezia-vpn/amnezia-client/blob/dev/README.md) | Русский
[AmneziaVPN](https://amnezia.org?utm_source=github&utm_campaign=amnezia_website-readme-ru) — это open source VPN-клиент, ключевая особенность которого заключается в возможности развернуть собственный VPN на вашем сервере.
> Если [сайт Amnezia](https://amnezia.org?utm_source=github&utm_campaign=amnezia_website-readme-ru) заблокирован в вашем регионе, вы можете воспользоваться [ссылкой на зеркало](https://storage.googleapis.com/amnezia/amnezia.org?utm_source=github&utm_campaign=amnezia_website-readme-ru-mirror).
- Простой в использовании — введите IP-адрес, SSH-логин и пароль, и Amnezia автоматически установит VPN-контейнеры Docker на ваш сервер и подключится к VPN.
- Классические VPN-протоколы: OpenVPN, WireGuard и IKEv2.
- Протоколы с маскировкой трафика (обфускацией): OpenVPN с плагином [Cloak](https://github.com/cbeuw/Cloak), Shadowsocks (OpenVPN over Shadowsocks), [AmneziaWG](https://docs.amnezia.org/documentation/amnezia-wg/) and XRay.
- Поддержка Split Tunneling — добавляйте любые сайты или приложения в список, чтобы включить VPN только для них.
- Поддерживает платформы: Windows, macOS, Linux, Android, iOS.
- Поддержка конфигурации протокола AmneziaWG на [бета-прошивке Keenetic](https://docs.keenetic.com/ua/air/kn-1611/en/6319-latest-development-release.html#UUID-186c4108-5afd-c10b-f38a-cdff6c17fab3_section-idm33192196168192-improved).
## Ссылки
- [https://amnezia.org](https://amnezia.org) - Веб-сайт проекта | [Альтернативная ссылка (зеркало)](https://storage.googleapis.com/kldscp/amnezia.org)
AmneziaVPN использует несколько проектов с открытым исходным кодом:
- [OpenSSL](https://www.openssl.org/)
- [OpenVPN](https://openvpn.net/)
- [Qt](https://www.qt.io/)
- [LibSsh](https://libssh.org)
- [WireGuard](https://www.wireguard.com/)
- [Xray-core](https://xtls.github.io/en/)
- [Conan](https://conan.io/)
- и другие...
## Помощь с переводами
Загрузите самые актуальные файлы перевода.
Перейдите на [вкладку "Actions"](https://github.com/amnezia-vpn/amnezia-client/actions?query=is%3Asuccess+branch%3Adev), нажмите на первую строку. Затем прокрутите вниз до раздела "Artifacts" и скачайте "AmneziaVPN_translations".
Распакуйте этот файл. Каждый файл с расширением *.ts содержит строки для соответствующего языка.
Переведите или исправьте строки в одном или нескольких файлах *.ts и загрузите их обратно в этот репозиторий в папку ``client/translations``. Это можно сделать через веб-интерфейс или любым другим знакомым вам способом.
## Проверка исходного кода
После клонирования репозитория обязательно загрузите все подмодули.
```bash
git submodule update --init --recursive
```
## Руководство по разработке
Хотите внести свой вклад? Добро пожаловать!
### Требования для сборки
* [`CMake`](https://cmake.org/download/)
* Компилятор и система сборки, в зависимости от таргета:
- [Linux] Любые `make` и `gcc`
- [Apple] [`Xcode`](https://developer.apple.com/xcode/) или [`Xcode command line tools`](https://developer.apple.com/xcode/)
- [Windows] [`Visual Studio 2022`](https://aka.ms/vs/17/release/vs_community.exe) или [`VS 2022 Build Tools`](https://aka.ms/vs/17/release/vs_buildtools.exe)
- [Android] [`Android SDK`](#установка-android-sdk) и [`Ninja`](https://ninja-build.org/)
* [`Qt 6.10+`](https://www.qt.io/download-open-source) со следующими модулями:
- Основные модули для таргета (Desktop/Android/iOS)
- и другие. Их можно получить из вышеуказанных скриптов
Unix-like:
```bash
# Build executables for the host platform
deploy/build.sh
# Or just
deploy/build.sh
# Build executables and installers for the host platform
deploy/build.sh --installer all
# Build Android APK and AAB
deploy/build.sh -t android --aab
# Call for help
deploy/build.sh -h
```
Windows:
```batch
:: Build executables for Windows
deploy/build.bat
:: Build executables with IFW installer for Windows
deploy/build.bat --installer ifw
:: Build executables with IFW and WIX installer for Windows
deploy/build.bat --installer ifw --installer wix
:: Or just
deploy/build.bat --installer all
```
### Разработка в IDE
* Можно использовать любые IDE которые умеют работать с CMake и находить Qt Kits. Например:
- `Qt Creator`
- `Visual Studio Code` with `Qt Extension Pack`
- и так далее
* Для использования `Xcode` нужно сконфигурировать проект с помощью `cmake`. Самый простой способ это сделать - использовать `Qt Creator` для конфигурации. Затем, нужно открыть файл `AmneziaVPN.xcodeproj` из папки сборки с помощью `Xcode`. Учтите, что никакие файлы фактически не сохраняются - они сохраняются в директории сборки. Если требуется, скопируйте файлы вручную
* `Android studio` может быть использована подобным вышеуказанному способу - нужно использовать `cmake` вручную или через `Qt Creator` для конфигурации. Далее, откройте `<build-dir>/client/android-build` в `Android studio`. Не забудьте скопировать изменённые файлы в папку с исходным кодом - все файлы, изменённые в IDE, сохраняются фактически в папке сборки.
### Установка Android SDK
* Android SDK может быть установлен следующими способами:
- Используя `Qt Creator`, через настройки в пунктах `Preferences`->`SDKs`
- Используя `Android studio`. По умолчанию необходимые `SDK` устанавливаются автоматически.
- Вручную, используя `sdk-manager`. Подробности можно найти [здесь](https://developer.android.com/tools)
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.