2023-09-22 00:37:55 +05:00
import QtQuick
import QtQuick . Controls
import QtQuick . Layouts
2024-12-31 04:16:52 +01:00
import QtCore
2023-09-22 00:37:55 +05:00
import SortFilterProxyModel 0.2
2023-10-06 16:43:52 +05:00
import PageEnum 1.0
2024-08-20 16:54:05 +07:00
import Style 1.0
2023-10-06 16:43:52 +05:00
2023-09-22 00:37:55 +05:00
import "./"
import "../Controls2"
import "../Controls2/TextTypes"
import "../Config"
import "../Components"
2024-02-17 23:09:05 +02:00
2023-09-22 00:37:55 +05:00
PageType {
id: root
ColumnLayout {
2024-04-18 17:54:55 +04:00
id: backButtonLayout
2023-09-22 00:37:55 +05:00
anchors.top: parent . top
anchors.left: parent . left
anchors.right: parent . right
anchors.topMargin: 20
BackButtonType {
2024-04-18 17:54:55 +04:00
id: backButton
2023-09-22 00:37:55 +05:00
}
}
2024-12-31 04:16:52 +01:00
ListView {
id: listview
2025-01-08 09:12:55 +03:00
property bool isFocusable: true
2024-04-18 17:54:55 +04:00
anchors.top: backButtonLayout . bottom
2023-09-22 00:37:55 +05:00
anchors.bottom: parent . bottom
2024-12-31 04:16:52 +01:00
width: parent . width
Keys.onTabPressed: {
FocusController . nextKeyTabItem ( )
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
Keys.onBacktabPressed: {
FocusController . previousKeyTabItem ( )
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
Keys.onUpPressed: {
FocusController . nextKeyUpItem ( )
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
Keys.onDownPressed: {
FocusController . nextKeyDownItem ( )
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
Keys.onLeftPressed: {
FocusController . nextKeyLeftItem ( )
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
Keys.onRightPressed: {
FocusController . nextKeyRightItem ( )
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
clip: true
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
model: AwgConfigModel
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
delegate: Item {
id: delegateItem
implicitWidth: listview . width
implicitHeight: col . implicitHeight
2023-09-22 00:37:55 +05:00
2025-01-02 08:07:12 +01:00
property alias vpnAddressSubnetTextField: vpnAddressSubnetTextField
2024-12-31 04:16:52 +01:00
property bool isEnabled: ServersModel . isProcessedServerHasWriteAccess ( )
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
ColumnLayout {
id: col
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
anchors.top: parent . top
anchors.left: parent . left
anchors.right: parent . right
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
anchors.leftMargin: 16
anchors.rightMargin: 16
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
spacing: 0
2023-09-22 00:37:55 +05:00
2025-05-02 23:54:36 -07:00
BaseHeaderType {
2024-12-31 04:16:52 +01:00
Layout.fillWidth: true
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
headerText: qsTr ( "AmneziaWG settings" )
}
2024-09-13 12:38:48 +04:00
2024-12-31 04:16:52 +01:00
TextFieldWithHeaderType {
2025-01-02 08:07:12 +01:00
id: vpnAddressSubnetTextField
2024-12-31 04:16:52 +01:00
Layout.fillWidth: true
Layout.topMargin: 40
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
enabled: delegateItem . isEnabled
2023-10-06 16:43:52 +05:00
2025-01-02 08:07:12 +01:00
headerText: qsTr ( "VPN address subnet" )
2025-01-24 23:27:01 +07:00
textField.text: subnetAddress
2025-01-02 08:07:12 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== subnetAddress ) {
subnetAddress = textField . text
2025-01-02 08:07:12 +01:00
}
}
checkEmptyText: true
}
TextFieldWithHeaderType {
id: portTextField
Layout.fillWidth: true
Layout.topMargin: 16
enabled: delegateItem . isEnabled
2024-12-31 04:16:52 +01:00
headerText: qsTr ( "Port" )
2025-01-24 23:27:01 +07:00
textField.text: port
2024-12-31 04:16:52 +01:00
textField.maximumLength: 5
textField.validator: IntValidator { bottom: 1 ; top: 65535 }
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== port ) {
port = textField . text
2024-03-18 12:41:53 +02:00
}
2024-12-31 04:16:52 +01:00
}
2024-03-18 12:41:53 +02:00
2024-12-31 04:16:52 +01:00
checkEmptyText: true
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: junkPacketCountTextField
headerText: qsTr ( "Jc - Junk packet count" )
2025-01-24 23:27:01 +07:00
textField.text: serverJunkPacketCount
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverJunkPacketCount ) {
serverJunkPacketCount = textField . text
2024-12-31 04:16:52 +01:00
}
}
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: junkPacketMinSizeTextField
headerText: qsTr ( "Jmin - Junk packet minimum size" )
2025-01-24 23:27:01 +07:00
textField.text: serverJunkPacketMinSize
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverJunkPacketMinSize ) {
serverJunkPacketMinSize = textField . text
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: junkPacketMaxSizeTextField
headerText: qsTr ( "Jmax - Junk packet maximum size" )
2025-01-24 23:27:01 +07:00
textField.text: serverJunkPacketMaxSize
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverJunkPacketMaxSize ) {
serverJunkPacketMaxSize = textField . text
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: initPacketJunkSizeTextField
headerText: qsTr ( "S1 - Init packet junk size" )
2025-01-24 23:27:01 +07:00
textField.text: serverInitPacketJunkSize
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverInitPacketJunkSize ) {
serverInitPacketJunkSize = textField . text
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: responsePacketJunkSizeTextField
headerText: qsTr ( "S2 - Response packet junk size" )
2025-01-24 23:27:01 +07:00
textField.text: serverResponsePacketJunkSize
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverResponsePacketJunkSize ) {
serverResponsePacketJunkSize = textField . text
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
// AwgTextField {
// id: cookieReplyPacketJunkSizeTextField
// headerText: qsTr("S3 - Cookie reply packet junk size")
// textField.text: serverCookieReplyPacketJunkSize
// textField.onEditingFinished: {
// if (textField.text !== serverCookieReplyPacketJunkSize) {
// serverCookieReplyPacketJunkSize = textField.text
// }
// }
// }
// AwgTextField {
// id: transportPacketJunkSizeTextField
// headerText: qsTr("S4 - Transport packet junk size")
// textField.text: serverTransportPacketJunkSize
// textField.onEditingFinished: {
// if (textField.text !== serverTransportPacketJunkSize) {
// serverTransportPacketJunkSize = textField.text
// }
// }
// }
AwgTextField {
2024-12-31 04:16:52 +01:00
id: initPacketMagicHeaderTextField
headerText: qsTr ( "H1 - Init packet magic header" )
2025-01-24 23:27:01 +07:00
textField.text: serverInitPacketMagicHeader
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverInitPacketMagicHeader ) {
serverInitPacketMagicHeader = textField . text
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: responsePacketMagicHeaderTextField
headerText: qsTr ( "H2 - Response packet magic header" )
2025-01-24 23:27:01 +07:00
textField.text: serverResponsePacketMagicHeader
2023-10-06 16:43:52 +05:00
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverResponsePacketMagicHeader ) {
serverResponsePacketMagicHeader = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-07 12:03:25 +08:00
}
2024-02-17 23:09:05 +02:00
2025-07-07 12:03:25 +08:00
AwgTextField {
id: underloadPacketMagicHeaderTextField
headerText: qsTr ( "H3 - Underload packet magic header" )
textField.text: serverUnderloadPacketMagicHeader
textField.onEditingFinished: {
if ( textField . text !== serverUnderloadPacketMagicHeader ) {
serverUnderloadPacketMagicHeader = textField . text
}
}
2024-12-31 04:16:52 +01:00
}
2025-07-07 12:03:25 +08:00
AwgTextField {
2024-12-31 04:16:52 +01:00
id: transportPacketMagicHeaderTextField
headerText: qsTr ( "H4 - Transport packet magic header" )
2025-01-24 23:27:01 +07:00
textField.text: serverTransportPacketMagicHeader
2024-12-31 04:16:52 +01:00
textField.onEditingFinished: {
2025-01-24 23:27:01 +07:00
if ( textField . text !== serverTransportPacketMagicHeader ) {
serverTransportPacketMagicHeader = textField . text
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
BasicButtonType {
id: saveRestartButton
Layout.fillWidth: true
Layout.topMargin: 24
Layout.bottomMargin: 24
enabled: underloadPacketMagicHeaderTextField . errorText === "" &&
transportPacketMagicHeaderTextField . errorText === "" &&
responsePacketMagicHeaderTextField . errorText === "" &&
initPacketMagicHeaderTextField . errorText === "" &&
responsePacketJunkSizeTextField . errorText === "" &&
2025-07-07 12:03:25 +08:00
// cookieReplyHeaderJunkTextField.errorText === "" &&
// transportHeaderJunkTextField.errorText === "" &&
2024-12-31 04:16:52 +01:00
initPacketJunkSizeTextField . errorText === "" &&
junkPacketMaxSizeTextField . errorText === "" &&
junkPacketMinSizeTextField . errorText === "" &&
junkPacketCountTextField . errorText === "" &&
2025-01-02 08:07:12 +01:00
portTextField . errorText === "" &&
vpnAddressSubnetTextField . errorText === ""
2024-12-31 04:16:52 +01:00
text: qsTr ( "Save" )
onActiveFocusChanged: {
if ( activeFocus ) {
listview . positionViewAtEnd ( )
2023-09-22 00:37:55 +05:00
}
2024-12-31 04:16:52 +01:00
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
clickedFunc: function ( ) {
forceActiveFocus ( )
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
if ( delegateItem . isEnabled ) {
if ( AwgConfigModel . isHeadersEqual ( underloadPacketMagicHeaderTextField . textField . text ,
transportPacketMagicHeaderTextField . textField . text ,
responsePacketMagicHeaderTextField . textField . text ,
initPacketMagicHeaderTextField . textField . text ) ) {
PageController . showErrorMessage ( qsTr ( "The values of the H1-H4 fields must be unique" ) )
return
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
if ( AwgConfigModel . isPacketSizeEqual ( parseInt ( initPacketJunkSizeTextField . textField . text ) ,
parseInt ( responsePacketJunkSizeTextField . textField . text ) ) ) {
PageController . showErrorMessage ( qsTr ( "The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92)" ) )
return
2023-09-22 00:37:55 +05:00
}
2025-07-07 12:03:25 +08:00
// if (AwgConfigModel.isPacketSizeEqual(parseInt(initPacketJunkSizeTextField.textField.text),
// parseInt(responsePacketJunkSizeTextField.textField.text),
// parseInt(cookieReplyPacketJunkSizeTextField.textField.text),
// parseInt(transportPacketJunkSizeTextField.textField.text))) {
// PageController.showErrorMessage(qsTr("The value of the field S1 + message initiation size (148) must not equal S2 + message response size (92) + S3 + cookie reply size (64) + S4 + transport packet size (32)"))
// return
// }
2024-12-31 04:16:52 +01:00
}
2023-10-06 16:43:52 +05:00
2024-12-31 04:16:52 +01:00
var headerText = qsTr ( "Save settings?" )
var descriptionText = qsTr ( "All users with whom you shared a connection with will no longer be able to connect to it." )
var yesButtonText = qsTr ( "Continue" )
var noButtonText = qsTr ( "Cancel" )
2024-02-17 23:09:05 +02:00
2024-12-31 04:16:52 +01:00
var yesButtonFunction = function ( ) {
if ( ConnectionController . isConnected && ServersModel . getDefaultServerData ( "defaultContainer" ) === ContainersModel . getProcessedContainerIndex ( ) ) {
PageController . showNotificationMessage ( qsTr ( "Unable change settings while there is an active connection" ) )
return
}
2023-09-22 00:37:55 +05:00
2024-12-31 04:16:52 +01:00
PageController . goToPage ( PageEnum . PageSetupWizardInstalling ) ;
InstallController . updateContainer ( AwgConfigModel . getConfig ( ) )
}
var noButtonFunction = function ( ) {
if ( ! GC . isMobile ( ) ) {
saveRestartButton . forceActiveFocus ( )
2023-09-22 00:37:55 +05:00
}
}
2024-12-31 04:16:52 +01:00
showQuestionDrawer ( headerText , descriptionText , yesButtonText , noButtonText , yesButtonFunction , noButtonFunction )
2023-09-22 00:37:55 +05:00
}
}
}
}
}
}