* 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/)
- [Shadowsocks](https://shadowsocks.org/)
- [Qt](https://www.qt.io/)
- [LibSsh](https://libssh.org) - forked form Qt Creator
- [LibSsh](https://libssh.org) - forked from Qt Creator
- and more...
## Checking out the source code
@@ -36,40 +63,63 @@ AmneziaVPN uses a number of open source projects to work:
Make sure to pull all submodules after checking out the repo.
```bash
git submodule update --init
git submodule update --init --recursive
```
## Development
Want to contribute? Welcome!
### Building sources and deployment
Look deploy folder for build scripts.
### Help with translations
### How to build iOS app from source code on MacOS
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.
### Building sources and deployment
Check deploy folder for build scripts.
### How to build an iOS app from source code on MacOS
1. First, make sure you have [XCode](https://developer.apple.com/xcode/) installed, at least version 14 or higher.
2. We use QT to generate the XCode project. we need QT version 6.4. Install QT for macos in [here](https://doc.qt.io/qt-6/macos.html)
2. We use QT to generate the XCode project. We need QT version 6.6.2. Install QT for MacOS [here](https://doc.qt.io/qt-6/macos.html) or [QT Online Installer](https://www.qt.io/download-open-source). Required modules:
- MacOS
- iOS
- Qt 5 Compatibility Module
- Qt Shader Tools
- Additional Libraries:
- Qt Image Formats
- Qt Multimedia
- Qt Remote Objects
3. Install cmake is require. We recommend cmake version 3.25. You can install cmake in [here](https://cmake.org/download/)
3. Install CMake if required. We recommend CMake version 3.25. You can install CMake [here](https://cmake.org/download/)
4. You also need to install go >= v1.16. If you don't have it done already,
4. You also need to install go >= v1.16. If you don't have it installed already,
download go from the [official website](https://golang.org/dl/) or use Homebrew.
Latest version is recommended. Install gomobile
The latest version is recommended. Install gomobile
```bash
export PATH=$PATH:~/go/bin
go install golang.org/x/mobile/cmd/gomobile@latest
Add a userdefined variable to both AmneziaVPN and WireGuardNetworkExtension targets' build settings with
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`.
if above error still persists on you M1 Mac, then most probably you need to install arch based cmake
if the above error persists on your M1 Mac, then most probably you need to install arch based CMake
```
arch -arm64 brew install cmake
```
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.
Build might fail with the "source files not found" error the first time you try it, because the 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.
## How to build the Android app
_tested on Mac OS_
_Tested on Mac OS_
The Android app has the following requirements:
* JDK 11
* Android platform SDK 33
* cmake 3.25.0
* 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)
After you have installed QT, QT Creator, and Android Studio, you need to configure QT Creator correctly.
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!
- 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`)
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.
In case you get errors regarding missing SDK or 'SDK manager not running', you cannot fix them by correcting the paths. If 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 clicking 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 for `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 `Projects`, and 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 all Android targets will be built. 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 the QT Creator Window is not running in full screen!). Here we are: Choose `android-33` as `Android Build Platform SDK`.
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!
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 QTCreator 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.
After you've hit the build button, QT-Creator copies the whole project to a folder in the repository 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 repository's 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 go.
## 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/)
- [Shadowsocks](https://shadowsocks.org/)
- [Qt](https://www.qt.io/)
- [LibSsh](https://libssh.org)
- и другие...
## Проверка исходного кода
После клонирования репозитория обязательно загрузите все подмодули.
```bash
git submodule update --init --recursive
```
## Разработка
Хотите внести свой вклад? Добро пожаловать!
### Помощь с переводами
Загрузите самые актуальные файлы перевода.
Перейдите на [вкладку "Actions"](https://github.com/amnezia-vpn/amnezia-client/actions?query=is%3Asuccess+branch%3Adev), нажмите на первую строку. Затем прокрутите вниз до раздела "Artifacts" и скачайте "AmneziaVPN_translations".
Распакуйте этот файл. Каждый файл с расширением *.ts содержит строки для соответствующего языка.
Переведите или исправьте строки в одном или нескольких файлах *.ts и загрузите их обратно в этот репозиторий в папку ``client/translations``. Это можно сделать через веб-интерфейс или любым другим знакомым вам способом.
### Сборка исходного кода и деплой
Проверьте папку deploy для скриптов сборки.
### Как собрать iOS-приложение из исходного кода на MacOS
1. Убедитесь, что у вас установлен Xcode версии 14 или выше.
2. Для генерации проекта Xcode используется QT. Требуется версия QT 6.6.2. Установите QT для MacOS здесь или через QT Online Installer. Необходимые модули:
- MacOS
- iOS
- Модуль совместимости с Qt 5
- Qt Shader Tools
- Дополнительные библиотеки:
- Qt Image Formats
- Qt Multimedia
- Qt Remote Objects
3. Установите CMake, если это необходимо. Рекомендуемая версия — 3.25. Скачать CMake можно здесь.
4. Установите Go версии >= v1.16. Если Go ещё не установлен, скачайте егос [официального сайта](https://golang.org/dl/) или используйте Homebrew. Установите gomobile:
```bash
export PATH=$PATH:~/go/bin
go install golang.org/x/mobile/cmd/gomobile@latest
Добавьте пользовательскую переменную PATH в настройки сборки для целей AmneziaVPN и WireGuardNetworkExtension с ключом `PATH` и значением `${PATH}/path/to/bin/folder/with/go/executable`, e.g. `${PATH}:/usr/local/go/bin`.
Если ошибка повторяется на Mac с M1, установите версию CMake для архитектуры ARM:
```
arch -arm64 brew install cmake
```
При первой попытке сборка может завершиться с ошибкой source files not found. Это происходит из-за параллельной компиляции зависимостей в XCode. Просто перезапустите сборку.
## Как собрать Android-приложение
Сборка тестировалась на MacOS. Требования:
- JDK 11
- Android SDK 33
- CMake 3.25.0
Установите QT, QT Creator и Android Studio.
Настройте QT Creator:
- В меню QT Creator перейдите в `QT Creator` -> `Preferences` -> `Devices` ->`Android`.
- Укажите путь к JDK 11.
- Укажите путь к Android SDK (`$ANDROID_HOME`)
Если вы сталкиваетесь с ошибками, связанными с отсутствием SDK или сообщением «SDK manager not running», их нельзя исправить просто корректировкой путей. Если у вас есть несколько свободных гигабайт на диске, вы можете позволить Qt Creator установить все необходимые компоненты, выбрав пустую папку для расположения Android SDK и нажав кнопку **Set Up SDK**. Учтите: это установит второй Android SDK и NDK на вашем компьютере!
Убедитесь, что настроена правильная версия CMake: перейдите в **Qt Creator -> Preferences** и в боковом меню выберите пункт **Kits**. В центральной части окна, на вкладке **Kits**, найдите запись для инструмента **CMake Tool**. Если выбранная по умолчанию версия CMake ниже 3.25.0, установите на свою систему CMake версии 3.25.0 или выше, а затем выберите опцию **System CMake at <путь>** из выпадающего списка. Если этот пункт отсутствует, это может означать, что вы еще не установили CMake, или Qt Creator не смог найти путь к нему. В таком случае в окне **Preferences** перейдите в боковое меню **CMake**, затем во вкладку **Tools** в центральной части окна и нажмите кнопку **Add**, чтобы указать путь к установленному CMake.
Убедитесь, что для вашего проекта выбрана Android Platform SDK 33: в главном окне на боковой панели выберите пункт **Projects**, и слева вы увидите раздел **Build & Run**, показывающий различные целевые Android-платформы. Вы можете выбрать любую из них, так как настройка проекта Amnezia VPN разработана таким образом, чтобы все Android-цели могли быть собраны. Перейдите в подраздел **Build** и прокрутите центральную часть окна до раздела **Build Steps**. Нажмите **Details** в заголовке **Build Android APK** (кнопка **Details** может быть скрыта, если окно Qt Creator не запущено в полноэкранном режиме!). Вот здесь выберите **android-33** в качестве Android Build Platform SDK.
### Разработка Android-компонентов
После сборки QT Creator копирует проект в отдельную папку, например, `build-amnezia-client-Android_Qt_<version>_Clang_<architecture>-<BuildType>`. Для разработки Android-компонентов откройте сгенерированный проект в Android Studio, указав папку `build-amnezia-client-Android_Qt_<version>_Clang_<architecture>-<BuildType>/client/android-build` в качестве корневой.
Изменения в сгенерированном проекте нужно вручную перенести в репозиторий. После этого можно коммитить изменения.
Если возникают проблемы со сборкой в QT Creator после работы в Android Studio, выполните команду `./gradlew clean` в корневой папке сгенерированного проекта (`<path>/client/android-build/.`).
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.