From 26092db4ca2ad9972c5c275d1fcfb262ac7573ac Mon Sep 17 00:00:00 2001 From: "kali kaneko (leap communications)" Date: Fri, 9 Jul 2021 20:29:45 +0200 Subject: [ui] give feedback about gateway selection -Resolves: #524 --- gui/providers/providers.json | 24 ++++++++++++------------ gui/qml/VPNSwitch.qml | 17 ----------------- gui/qml/VpnState.qml | 17 +++++++++++++++++ gui/qml/main.qml | 40 ++++++++++++++++++++++++++++++++++++++++ pkg/vpn/openvpn.go | 5 ++++- 5 files changed, 73 insertions(+), 30 deletions(-) diff --git a/gui/providers/providers.json b/gui/providers/providers.json index 2401866..8592ba0 100644 --- a/gui/providers/providers.json +++ b/gui/providers/providers.json @@ -1,21 +1,21 @@ { - "default": "floatdemo", + "default": "riseup", "providers": [ { - "name": "floatdemo", - "applicationName": "FloatDemoVPN", - "binaryName": "floatdemo-vpn", + "name": "Riseup", + "applicationName": "RiseupVPN", + "binaryName": "riseup-vpn", "auth": "anon", "authEmptyPass": false, - "providerURL": "float.bitmask.net", - "tosURL": "https://float.bitmask.net/", - "helpURL": "https://float.bitmask.net/", + "providerURL": "riseup.net", + "tosURL": "https://riseup.net/tos", + "helpURL": "https://riseup.net/support", "askForDonations": true, - "donateURL": "", - "apiURL": "https://api.float.bitmask.net:4430/", - "geolocationAPI": "https://menshen.float.bitmask.net/json", - "caCertString": "-----BEGIN CERTIFICATE-----\nMIIBQjCB6aADAgECAgEBMAoGCCqGSM49BAMCMBcxFTATBgNVBAMTDExFQVAgUm9v\ndCBDQTAeFw0yMTA0MDYxODIzMzVaFw0yNjA0MDYxODI4MzVaMBcxFTATBgNVBAMT\nDExFQVAgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLiY2PRd7sct\n/d0qy0EHjP+MLA+bUOV2RjMErxZrQfok9bMAFFLza9dg0LTbsdLjved1f7ezraa1\nyTYD3i2NncWjJjAkMA4GA1UdDwEB/wQEAwICpDASBgNVHRMBAf8ECDAGAQH/AgEB\nMAoGCCqGSM49BAMCA0gAMEUCIEq2RG2egV566bOFzAL68qoOTVA3+58YYssn+Jrg\nadPSAiEAkYbYV5JLlA54lXy6XlZEmCCcVb7u/Domsk9smMQzWq4=\n-----END CERTIFICATE-----", - "timeStamp": "2021-07-07 19:38:08" + "donateURL": "https://riseup.net/vpn/donate", + "apiURL": "https://api.black.riseup.net/", + "geolocationAPI": "https://api.black.riseup.net:9001/json", + "caCertString": "-----BEGIN CERTIFICATE-----\nMIIFjTCCA3WgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBZMRgwFgYDVQQKDA9SaXNl\ndXAgTmV0d29ya3MxGzAZBgNVBAsMEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UE\nAwwXUmlzZXVwIE5ldHdvcmtzIFJvb3QgQ0EwHhcNMTQwNDI4MDAwMDAwWhcNMjQw\nNDI4MDAwMDAwWjBZMRgwFgYDVQQKDA9SaXNldXAgTmV0d29ya3MxGzAZBgNVBAsM\nEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UEAwwXUmlzZXVwIE5ldHdvcmtzIFJv\nb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC76J4ciMJ8Sg0m\nTP7DF2DT9zNe0Csk4myoMFC57rfJeqsAlJCv1XMzBmXrw8wq/9z7XHv6n/0sWU7a\n7cF2hLR33ktjwODlx7vorU39/lXLndo492ZBhXQtG1INMShyv+nlmzO6GT7ESfNE\nLliFitEzwIegpMqxCIHXFuobGSCWF4N0qLHkq/SYUMoOJ96O3hmPSl1kFDRMtWXY\niw1SEKjUvpyDJpVs3NGxeLCaA7bAWhDY5s5Yb2fA1o8ICAqhowurowJpW7n5ZuLK\n5VNTlNy6nZpkjt1QycYvNycffyPOFm/Q/RKDlvnorJIrihPkyniV3YY5cGgP+Qkx\nHUOT0uLA6LHtzfiyaOqkXwc4b0ZcQD5Vbf6Prd20Ppt6ei0zazkUPwxld3hgyw58\nm/4UIjG3PInWTNf293GngK2Bnz8Qx9e/6TueMSAn/3JBLem56E0WtmbLVjvko+LF\nPM5xA+m0BmuSJtrD1MUCXMhqYTtiOvgLBlUm5zkNxALzG+cXB28k6XikXt6MRG7q\nhzIPG38zwkooM55yy5i1YfcIi5NjMH6A+t4IJxxwb67MSb6UFOwg5kFokdONZcwj\nshczHdG9gLKSBIvrKa03Nd3W2dF9hMbRu//STcQxOailDBQCnXXfAATj9pYzdY4k\nha8VCAREGAKTDAex9oXf1yRuktES4QIDAQABo2AwXjAdBgNVHQ4EFgQUC4tdmLVu\nf9hwfK4AGliaet5KkcgwDgYDVR0PAQH/BAQDAgIEMAwGA1UdEwQFMAMBAf8wHwYD\nVR0jBBgwFoAUC4tdmLVuf9hwfK4AGliaet5KkcgwDQYJKoZIhvcNAQENBQADggIB\nAGzL+GRnYu99zFoy0bXJKOGCF5XUXP/3gIXPRDqQf5g7Cu/jYMID9dB3No4Zmf7v\nqHjiSXiS8jx1j/6/Luk6PpFbT7QYm4QLs1f4BlfZOti2KE8r7KRDPIecUsUXW6P/\n3GJAVYH/+7OjA39za9AieM7+H5BELGccGrM5wfl7JeEz8in+V2ZWDzHQO4hMkiTQ\n4ZckuaL201F68YpiItBNnJ9N5nHr1MRiGyApHmLXY/wvlrOpclh95qn+lG6/2jk7\n3AmihLOKYMlPwPakJg4PYczm3icFLgTpjV5sq2md9bRyAg3oPGfAuWHmKj2Ikqch\nTd5CHKGxEEWbGUWEMP0s1A/JHWiCbDigc4Cfxhy56CWG4q0tYtnc2GMw8OAUO6Wf\nXu5pYKNkzKSEtT/MrNJt44tTZWbKV/Pi/N2Fx36my7TgTUj7g3xcE9eF4JV2H/sg\ntsK3pwE0FEqGnT4qMFbixQmc8bGyuakr23wjMvfO7eZUxBuWYR2SkcP26sozF9PF\ntGhbZHQVGZUTVPyvwahMUEhbPGVerOW0IYpxkm0x/eaWdTc4vPpf/rIlgbAjarnJ\nUN9SaWRlWKSdP4haujnzCoJbM7dU9bjvlGZNyXEekgeT0W2qFeGGp+yyUWw8tNsp\n0BuC1b7uW/bBn/xKm319wXVDvBgZgcktMolak39V7DVO\n-----END CERTIFICATE-----", + "timeStamp": "2021-07-09 20:10:58" } ] } \ No newline at end of file diff --git a/gui/qml/VPNSwitch.qml b/gui/qml/VPNSwitch.qml index 14b3734..89c455f 100644 --- a/gui/qml/VPNSwitch.qml +++ b/gui/qml/VPNSwitch.qml @@ -5,27 +5,10 @@ import QtQuick.Controls 2.4 SwitchDelegate { - //id: vpntoggle - text: qsTr("") checked: false anchors.horizontalCenter: parent.horizontalCenter - /* - Connections { - function onCheckedChanged() { - if (vpntoggle.checked == true - && ctx.status == "off") { - backend.switchOn() - } - if (vpntoggle.checked === false - && ctx.status == "on") { - backend.switchOff() - } - } - } - */ - contentItem: Text { rightPadding: vpntoggle.indicator.width + vpntoggle.spacing text: vpntoggle.text diff --git a/gui/qml/VpnState.qml b/gui/qml/VpnState.qml index 86239e4..a4bb779 100644 --- a/gui/qml/VpnState.qml +++ b/gui/qml/VpnState.qml @@ -24,6 +24,7 @@ StateGroup { PropertyChanges { target: vpntoggle checked: false + checkable: true } PropertyChanges { target: statusItem @@ -65,6 +66,7 @@ StateGroup { PropertyChanges { target: vpntoggle checked: true + checkable: true } PropertyChanges { target: statusItem @@ -122,6 +124,11 @@ StateGroup { target: mainCurrentGateway text: "" } + PropertyChanges { + target: vpntoggle + checked: true + checkable: false + } }, State { name: "stopping" @@ -147,6 +154,11 @@ StateGroup { target: mainCurrentGateway text: "" } + PropertyChanges { + target: vpntoggle + checked: false + checkable: false + } }, State { name: "failed" @@ -172,6 +184,11 @@ StateGroup { target: mainCurrentGateway text: "" } + PropertyChanges { + target: vpntoggle + checked: false + checkable: true + } } ] } diff --git a/gui/qml/main.qml b/gui/qml/main.qml index 1d67924..e166d65 100644 --- a/gui/qml/main.qml +++ b/gui/qml/main.qml @@ -88,10 +88,12 @@ ApplicationWindow { if (vpntoggle.checked == true && ctx.status == "off") { backend.switchOn() + vpntoggle.checkable = false } if (vpntoggle.checked === false && ctx.status == "on") { backend.switchOff() + vpntoggle.checkable = false } } } @@ -114,6 +116,7 @@ ApplicationWindow { anchors.centerIn: parent spacing: 10 + //width: parent.width RadioButton { id: autoSelectionButton @@ -124,12 +127,14 @@ ApplicationWindow { manualSelectionItem.checked = false } } + RadioButton { id: manualSelectionButton checked: isManualLocation() text: qsTr("Manual") onClicked: setGwSelection() } + ComboBox { id: gwSelector editable: false @@ -139,6 +144,12 @@ ApplicationWindow { model: [qsTr("Recommended")] onActivated: { console.debug("Selected gateway:", currentText) + if (ctx.status == "off") { + gwNextConnectionText.visible = true + } + if (ctx.status == "on") { + gwReconnectText.visible = true + } backend.useLocation(currentText.toString()) manualSelectionItem.checked = true } @@ -170,7 +181,31 @@ ApplicationWindow { color: "#000000" } } + + } + + Text { + id: gwReconnectText + anchors.horizontalCenter: parent.horizontalCenter + width: 180 + font.pixelSize: 12 + color: "green" + wrapMode: Text.WordWrap + text: qsTr("Reconnecting to the selected gateway…") + visible: false + } + + Text { + id: gwNextConnectionText + anchors.horizontalCenter: parent.horizontalCenter + width: 180 + font.pixelSize: 12 + color: "green" + wrapMode: Text.WordWrap + text: qsTr("This gateway will be used for next connection.") + visible: false } + } // end column } // end item @@ -214,6 +249,11 @@ ApplicationWindow { if (ctx.donateURL) { donateItem.visible = true } + + if (ctx.status == "on") { + gwNextConnectionText.visible = false + gwReconnectText.visible = false + } } } diff --git a/pkg/vpn/openvpn.go b/pkg/vpn/openvpn.go index 6682094..3df5a23 100644 --- a/pkg/vpn/openvpn.go +++ b/pkg/vpn/openvpn.go @@ -121,6 +121,7 @@ func (b *Bitmask) listenShapeErr() { func (b *Bitmask) startOpenVPN() error { arg := []string{} + b.statusCh <- Starting if b.GetTransport() == "obfs4" { gateways, err := b.bonafide.GetGateways("obfs4") if err != nil { @@ -251,8 +252,9 @@ func (b *Bitmask) Reconnect() error { if err != nil { return err } - log.Println("reconnect") + log.Println("DEBUG Reconnecting") if status != Off { + b.statusCh <- Stopping if b.shapes != nil { b.shapes.Close() b.shapes = nil @@ -264,6 +266,7 @@ func (b *Bitmask) Reconnect() error { } err = b.launch.firewallStop() + // FIXME - there's a window in which we might leak traffic here! if err != nil { return err } -- cgit v1.2.3