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
2025-07-26 16:28:06 +02:00
BackButtonType {
id: backButton
2023-09-22 00:37:55 +05:00
anchors.top: parent . top
anchors.left: parent . left
anchors.right: parent . right
anchors.topMargin: 20
2025-07-26 16:28:06 +02:00
onActiveFocusChanged: {
if ( backButton . enabled && backButton . activeFocus ) {
listView . positionViewAtBeginning ( )
}
2023-09-22 00:37:55 +05:00
}
}
2025-07-26 16:28:06 +02:00
ListViewType {
id: listView
2025-01-08 09:12:55 +03:00
2024-04-18 17:54:55 +04:00
anchors.top: backButtonLayout . bottom
2023-09-22 00:37:55 +05:00
anchors.bottom: parent . bottom
2025-07-26 16:28:06 +02:00
anchors.left: parent . left
anchors.right: parent . right
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
model: AwgConfigModel
2024-12-31 04:16:52 +01:00
2025-07-26 16:28:06 +02:00
delegate: ColumnLayout {
id: delegateItem
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
width: listView . width
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
property alias vpnAddressSubnetTextField: vpnAddressSubnetTextField
property bool isEnabled: ServersModel . isProcessedServerHasWriteAccess ( )
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
spacing: 0
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
BaseHeaderType {
Layout.fillWidth: true
Layout.leftMargin: 16
Layout.rightMargin: 16
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
headerText: qsTr ( "AmneziaWG settings" )
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
TextFieldWithHeaderType {
id: vpnAddressSubnetTextField
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
Layout.fillWidth: true
Layout.topMargin: 40
Layout.leftMargin: 16
Layout.rightMargin: 16
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
enabled: delegateItem . isEnabled
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
headerText: qsTr ( "VPN address subnet" )
textField.text: subnetAddress
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
textField.onEditingFinished: {
if ( textField . text !== subnetAddress ) {
subnetAddress = textField . text
}
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
checkEmptyText: true
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
TextFieldWithHeaderType {
id: portTextField
Layout.fillWidth: true
Layout.topMargin: 16
Layout.leftMargin: 16
Layout.rightMargin: 16
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
enabled: delegateItem . isEnabled
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
headerText: qsTr ( "Port" )
textField.text: port
textField.maximumLength: 5
textField.validator: IntValidator { bottom: 1 ; top: 65535 }
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
textField.onEditingFinished: {
if ( textField . text !== port ) {
port = textField . text
}
2024-12-31 04:16:52 +01:00
}
2024-09-13 12:38:48 +04:00
2025-07-26 16:28:06 +02:00
checkEmptyText: true
}
2025-01-02 08:07:12 +01:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: junkPacketCountTextField
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
2023-10-06 16:43:52 +05:00
2025-07-26 16:28:06 +02:00
headerText: qsTr ( "Jc - Junk packet count" )
textField.text: serverJunkPacketCount
2025-01-02 08:07:12 +01:00
2025-07-26 16:28:06 +02:00
textField.onEditingFinished: {
if ( textField . text !== serverJunkPacketCount ) {
serverJunkPacketCount = textField . text
2025-01-02 08:07:12 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2025-01-02 08:07:12 +01:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: junkPacketMinSizeTextField
2025-01-02 08:07:12 +01:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
2025-01-02 08:07:12 +01:00
2025-07-26 16:28:06 +02:00
headerText: qsTr ( "Jmin - Junk packet minimum size" )
textField.text: serverJunkPacketMinSize
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
textField.onEditingFinished: {
if ( textField . text !== serverJunkPacketMinSize ) {
serverJunkPacketMinSize = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: junkPacketMaxSizeTextField
2024-12-31 04:16:52 +01:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
headerText: qsTr ( "Jmax - Junk packet maximum size" )
textField.text: serverJunkPacketMaxSize
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
textField.onEditingFinished: {
if ( textField . text !== serverJunkPacketMaxSize ) {
serverJunkPacketMaxSize = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: initPacketJunkSizeTextField
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
headerText: qsTr ( "S1 - Init packet junk size" )
textField.text: serverInitPacketJunkSize
textField.onEditingFinished: {
if ( textField . text !== serverInitPacketJunkSize ) {
serverInitPacketJunkSize = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: responsePacketJunkSizeTextField
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
headerText: qsTr ( "S2 - Response packet junk size" )
textField.text: serverResponsePacketJunkSize
textField.onEditingFinished: {
if ( textField . text !== serverResponsePacketJunkSize ) {
serverResponsePacketJunkSize = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
// AwgTextField {
// id: cookieReplyPacketJunkSizeTextField
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
// Layout.leftMargin: 16
// Layout.rightMargin: 16
// headerText: qsTr("S3 - Cookie reply packet junk size")
// textField.text: serverCookieReplyPacketJunkSize
// textField.onEditingFinished: {
// if (textField.text !== serverCookieReplyPacketJunkSize) {
// serverCookieReplyPacketJunkSize = textField.text
// }
// }
// }
// AwgTextField {
// id: transportPacketJunkSizeTextField
// Layout.leftMargin: 16
// Layout.rightMargin: 16
// headerText: qsTr("S4 - Transport packet junk size")
// textField.text: serverTransportPacketJunkSize
// textField.onEditingFinished: {
// if (textField.text !== serverTransportPacketJunkSize) {
// serverTransportPacketJunkSize = textField.text
// }
// }
// }
AwgTextField {
id: initPacketMagicHeaderTextField
Layout.leftMargin: 16
Layout.rightMargin: 16
headerText: qsTr ( "H1 - Init packet magic header" )
textField.text: serverInitPacketMagicHeader
textField.onEditingFinished: {
if ( textField . text !== serverInitPacketMagicHeader ) {
serverInitPacketMagicHeader = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: responsePacketMagicHeaderTextField
Layout.leftMargin: 16
Layout.rightMargin: 16
headerText: qsTr ( "H2 - Response packet magic header" )
textField.text: serverResponsePacketMagicHeader
textField.onEditingFinished: {
if ( textField . text !== serverResponsePacketMagicHeader ) {
serverResponsePacketMagicHeader = textField . text
2024-12-31 04:16:52 +01:00
}
}
2025-07-26 16:28:06 +02:00
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: underloadPacketMagicHeaderTextField
2023-10-06 16:43:52 +05:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
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
}
2025-07-26 16:28:06 +02:00
}
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
AwgTextField {
id: transportPacketMagicHeaderTextField
2025-07-07 12:03:25 +08:00
2025-07-26 16:28:06 +02:00
Layout.leftMargin: 16
Layout.rightMargin: 16
headerText: qsTr ( "H4 - Transport packet magic header" )
textField.text: serverTransportPacketMagicHeader
textField.onEditingFinished: {
if ( textField . text !== serverTransportPacketMagicHeader ) {
serverTransportPacketMagicHeader = textField . text
2025-07-07 12:03:25 +08:00
}
2024-12-31 04:16:52 +01:00
}
2025-07-26 16:28:06 +02:00
}
2024-12-31 04:16:52 +01:00
2025-07-26 16:28:06 +02:00
BasicButtonType {
id: saveRestartButton
Layout.fillWidth: true
Layout.topMargin: 24
Layout.bottomMargin: 24
Layout.leftMargin: 16
Layout.rightMargin: 16
enabled: underloadPacketMagicHeaderTextField . errorText === "" &&
transportPacketMagicHeaderTextField . errorText === "" &&
responsePacketMagicHeaderTextField . errorText === "" &&
initPacketMagicHeaderTextField . errorText === "" &&
responsePacketJunkSizeTextField . errorText === "" &&
// cookieReplyHeaderJunkTextField.errorText === "" &&
// transportHeaderJunkTextField.errorText === "" &&
initPacketJunkSizeTextField . errorText === "" &&
junkPacketMaxSizeTextField . errorText === "" &&
junkPacketMinSizeTextField . errorText === "" &&
junkPacketCountTextField . errorText === "" &&
portTextField . errorText === "" &&
vpnAddressSubnetTextField . errorText === ""
text: qsTr ( "Save" )
onActiveFocusChanged: {
if ( activeFocus ) {
listView . positionViewAtEnd ( )
2024-12-31 04:16:52 +01:00
}
}
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
clickedFunc: function ( ) {
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
}
2024-12-31 04:16:52 +01:00
2025-07-26 16:28:06 +02: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-26 16:28:06 +02: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-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02: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" )
var yesButtonFunction = function ( ) {
if ( ConnectionController . isConnected && ServersModel . getDefaultServerData ( "defaultContainer" ) === ContainersModel . getProcessedContainerIndex ( ) ) {
PageController . showNotificationMessage ( qsTr ( "Unable change settings while there is an active connection" ) )
return
2024-12-31 04:16:52 +01:00
}
2023-10-06 16:43:52 +05:00
2025-07-26 16:28:06 +02:00
PageController . goToPage ( PageEnum . PageSetupWizardInstalling ) ;
InstallController . updateContainer ( AwgConfigModel . getConfig ( ) )
}
2024-02-17 23:09:05 +02:00
2025-07-26 16:28:06 +02:00
var noButtonFunction = function ( ) { }
2023-09-22 00:37:55 +05:00
2025-07-26 16:28:06 +02:00
showQuestionDrawer ( headerText , descriptionText , yesButtonText , noButtonText , yesButtonFunction , noButtonFunction )
2023-09-22 00:37:55 +05:00
}
}
}
}
}