From 339a30fd1917011d8ad8a3900509f3a8880d569d Mon Sep 17 00:00:00 2001
From: "kali kaneko (leap communications)" <kali@leap.se>
Date: Thu, 20 Aug 2020 14:54:31 +0200
Subject: [PATCH] [feat] reset error

---
 branding/config/vendor.conf |  2 +-
 gui/backend.go              |  9 ++++--
 gui/handlers.cpp            | 21 ++++++++-----
 gui/handlers.h              |  4 +++
 gui/main.cpp                |  4 +--
 gui/qml/LoginOKDialog.qml   |  3 +-
 pkg/backend/api.go          |  7 ++++-
 pkg/backend/init.go         |  8 +++++
 pkg/config/config.go        | 59 +++++++++++--------------------------
 9 files changed, 59 insertions(+), 58 deletions(-)

diff --git a/branding/config/vendor.conf b/branding/config/vendor.conf
index 4b3d4a94..687caadd 100644
--- a/branding/config/vendor.conf
+++ b/branding/config/vendor.conf
@@ -1,6 +1,6 @@
 [default]
 
-provider = riseup
+provider = demolib
 
 
 [riseup]
diff --git a/gui/backend.go b/gui/backend.go
index a5cb3abe..c953d182 100644
--- a/gui/backend.go
+++ b/gui/backend.go
@@ -23,8 +23,8 @@ func GetAppName() *C.char {
 }
 
 //export Login
-func Login(username, password *C.char) {
-	backend.Login(C.GoString(username), C.GoString(password))
+func Login(username, password string) {
+	backend.Login(username, password)
 }
 
 //export SwitchOn
@@ -76,6 +76,11 @@ func RefreshContext() *C.char {
 	return (*C.char)(backend.RefreshContext())
 }
 
+//export ResetError
+func ResetError(errname string) {
+	backend.ResetError(errname)
+}
+
 //export InstallHelpers
 func InstallHelpers() {
 	backend.InstallHelpers()
diff --git a/gui/handlers.cpp b/gui/handlers.cpp
index 3959964b..f34133e2 100644
--- a/gui/handlers.cpp
+++ b/gui/handlers.cpp
@@ -6,6 +6,13 @@
 #include "handlers.h"
 #include "lib/libgoshim.h"
 
+GoString toGoStr(QString s)
+{
+    char *c = s.toLocal8Bit().data();
+    return (GoString){c, (long int)strlen(c)};
+}
+
+
 Backend::Backend(QObject *parent) : QObject(parent)
 {
 }
@@ -37,14 +44,12 @@ void Backend::donateAccepted()
 
 void Backend::login(QString username, QString password)
 {
-    // TODO: there has to be a cleaner way to do the conversion
-    char * u = new char [username.length()+1];
-    char * p = new char [password.length()+1];
-    strcpy(u, username.toStdString().c_str());
-    strcpy(p, password.toStdString().c_str());
-    Login(u, p);
-    delete [] u;
-    delete [] p;
+    Login(toGoStr(username), toGoStr(password));
+}
+
+void Backend::resetError(QString errlabel)
+{
+    ResetError(toGoStr(errlabel));
 }
 
 void Backend::quit()
diff --git a/gui/handlers.h b/gui/handlers.h
index 656a4516..9299827f 100644
--- a/gui/handlers.h
+++ b/gui/handlers.h
@@ -4,6 +4,9 @@
 #include <QDebug>
 #include <QObject>
 #include "qjsonmodel.h"
+#include "lib/libgoshim.h"
+
+GoString toGoStr(QString s);
 
 class QJsonWatch : public QObject {
 
@@ -36,6 +39,7 @@ public slots:
     void switchOff();
     void donateAccepted();
     void login(QString username, QString password);
+    void resetError(QString errlabel);
     void quit();
 };
 
diff --git a/gui/main.cpp b/gui/main.cpp
index 2a300e21..e3b8530f 100644
--- a/gui/main.cpp
+++ b/gui/main.cpp
@@ -144,9 +144,7 @@ int main(int argc, char **argv) {
 
     /* if requested, enable web api for controlling the VPN */
     if (webAPI) {
-        char* wp = webPort.toLocal8Bit().data();
-        GoString p = {wp, (long int)strlen(wp)};
-        EnableWebAPI(p);
+        EnableWebAPI(toGoStr(webPort));
     };
 
     /* kick off your shoes, put your feet up */
diff --git a/gui/qml/LoginOKDialog.qml b/gui/qml/LoginOKDialog.qml
index 52b37701..be023dd9 100644
--- a/gui/qml/LoginOKDialog.qml
+++ b/gui/qml/LoginOKDialog.qml
@@ -12,9 +12,8 @@ Dialog {
         }
     }
 
-    // TODO implement cleanNotifications on backend
     function _loginOk() {
-        loginDone = true;
+        backend.resetError("bad_auth")
     }
 
     visible: false
diff --git a/pkg/backend/api.go b/pkg/backend/api.go
index 7c049fc2..7aa55279 100644
--- a/pkg/backend/api.go
+++ b/pkg/backend/api.go
@@ -85,6 +85,11 @@ func RefreshContext() *C.char {
 	return C.CString(string(c))
 }
 
+func ResetError(errname string) {
+	log.Println("DEBUG: resetting error", errname)
+	resetErrors(errname)
+}
+
 func InstallHelpers() {
 	pickle.InstallHelpers()
 }
@@ -105,7 +110,7 @@ func EnableWebAPI(port string) {
 /* these two are a bit redundant since we already add them to ctx. however, we
    want to have them available before everything else, to be able to parse cli
    arguments. In the long run, we probably want to move all vendoring to qt, so
-   this probably should not live in the backend. */
+   this probably should not live in the backend, see #326*/
 
 func GetVersion() *C.char {
 	return C.CString(version.VERSION)
diff --git a/pkg/backend/init.go b/pkg/backend/init.go
index bae9b9b8..af43bab4 100644
--- a/pkg/backend/init.go
+++ b/pkg/backend/init.go
@@ -34,11 +34,19 @@ func initializeContext(opts *InitOpts) {
 func checkErrors(errCh chan string) {
 	for {
 		err := <-errCh
+		// TODO consider a queue instead
 		ctx.Errors = err
 		go trigger(OnStatusChanged)
 	}
 }
 
+func resetErrors(errname string) {
+	if ctx.Errors == errname {
+		ctx.Errors = ""
+		log.Println("DEBUG: reset error", errname)
+	}
+}
+
 func initializeBitmask(errCh chan string, opts *InitOpts) {
 	if ctx == nil {
 		log.Println("bug: cannot initialize bitmask, ctx is nil!")
diff --git a/pkg/config/config.go b/pkg/config/config.go
index e7991761..908409ad 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -1,22 +1,22 @@
 // Code generated by go generate; DO NOT EDIT.
 // This file was generated by vendorize.py
-// At 2020-08-19 17:38:43
+// At 2020-08-20 13:39:50
 
 package config
 
 /* All these constants are defined in the vendor.conf file
  */
 const (
-	Provider        = "riseup.net"
-	ApplicationName = "RiseupVPN"
-	BinaryName      = "riseup-vpn"
-	Auth            = "anon"
-	DonateURL       = "https://riseup.net/vpn/donate"
-	AskForDonations = "true"
-	HelpURL         = "https://riseup.net/support"
-	TosURL          = "https://riseup.net/tos"
-	APIURL          = "https://api.black.riseup.net/"
-	GeolocationAPI  = "https://api.black.riseup.net:9001/json"
+	Provider        = "vpnlib.bitmask.net"
+	ApplicationName = "DemoLib"
+	BinaryName      = "demo-lib"
+	Auth            = "sip"
+	DonateURL       = ""
+	AskForDonations = "false"
+	HelpURL         = "https://libraryvpn.org/"
+	TosURL          = "https://libraryvpn.org/"
+	APIURL          = "https://api.vpnlib.bitmask.net:4430/"
+	GeolocationAPI  = "https://getmyip.vpnlib.bitmask.net/json"
 )
 
 var Version string
@@ -29,34 +29,11 @@ CaCert : a string containing a representation of the provider CA, used to
 
 */
 var CaCert = []byte(`-----BEGIN CERTIFICATE-----
-MIIFjTCCA3WgAwIBAgIBATANBgkqhkiG9w0BAQ0FADBZMRgwFgYDVQQKDA9SaXNl
-dXAgTmV0d29ya3MxGzAZBgNVBAsMEmh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UE
-AwwXUmlzZXVwIE5ldHdvcmtzIFJvb3QgQ0EwHhcNMTQwNDI4MDAwMDAwWhcNMjQw
-NDI4MDAwMDAwWjBZMRgwFgYDVQQKDA9SaXNldXAgTmV0d29ya3MxGzAZBgNVBAsM
-Emh0dHBzOi8vcmlzZXVwLm5ldDEgMB4GA1UEAwwXUmlzZXVwIE5ldHdvcmtzIFJv
-b3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC76J4ciMJ8Sg0m
-TP7DF2DT9zNe0Csk4myoMFC57rfJeqsAlJCv1XMzBmXrw8wq/9z7XHv6n/0sWU7a
-7cF2hLR33ktjwODlx7vorU39/lXLndo492ZBhXQtG1INMShyv+nlmzO6GT7ESfNE
-LliFitEzwIegpMqxCIHXFuobGSCWF4N0qLHkq/SYUMoOJ96O3hmPSl1kFDRMtWXY
-iw1SEKjUvpyDJpVs3NGxeLCaA7bAWhDY5s5Yb2fA1o8ICAqhowurowJpW7n5ZuLK
-5VNTlNy6nZpkjt1QycYvNycffyPOFm/Q/RKDlvnorJIrihPkyniV3YY5cGgP+Qkx
-HUOT0uLA6LHtzfiyaOqkXwc4b0ZcQD5Vbf6Prd20Ppt6ei0zazkUPwxld3hgyw58
-m/4UIjG3PInWTNf293GngK2Bnz8Qx9e/6TueMSAn/3JBLem56E0WtmbLVjvko+LF
-PM5xA+m0BmuSJtrD1MUCXMhqYTtiOvgLBlUm5zkNxALzG+cXB28k6XikXt6MRG7q
-hzIPG38zwkooM55yy5i1YfcIi5NjMH6A+t4IJxxwb67MSb6UFOwg5kFokdONZcwj
-shczHdG9gLKSBIvrKa03Nd3W2dF9hMbRu//STcQxOailDBQCnXXfAATj9pYzdY4k
-ha8VCAREGAKTDAex9oXf1yRuktES4QIDAQABo2AwXjAdBgNVHQ4EFgQUC4tdmLVu
-f9hwfK4AGliaet5KkcgwDgYDVR0PAQH/BAQDAgIEMAwGA1UdEwQFMAMBAf8wHwYD
-VR0jBBgwFoAUC4tdmLVuf9hwfK4AGliaet5KkcgwDQYJKoZIhvcNAQENBQADggIB
-AGzL+GRnYu99zFoy0bXJKOGCF5XUXP/3gIXPRDqQf5g7Cu/jYMID9dB3No4Zmf7v
-qHjiSXiS8jx1j/6/Luk6PpFbT7QYm4QLs1f4BlfZOti2KE8r7KRDPIecUsUXW6P/
-3GJAVYH/+7OjA39za9AieM7+H5BELGccGrM5wfl7JeEz8in+V2ZWDzHQO4hMkiTQ
-4ZckuaL201F68YpiItBNnJ9N5nHr1MRiGyApHmLXY/wvlrOpclh95qn+lG6/2jk7
-3AmihLOKYMlPwPakJg4PYczm3icFLgTpjV5sq2md9bRyAg3oPGfAuWHmKj2Ikqch
-Td5CHKGxEEWbGUWEMP0s1A/JHWiCbDigc4Cfxhy56CWG4q0tYtnc2GMw8OAUO6Wf
-Xu5pYKNkzKSEtT/MrNJt44tTZWbKV/Pi/N2Fx36my7TgTUj7g3xcE9eF4JV2H/sg
-tsK3pwE0FEqGnT4qMFbixQmc8bGyuakr23wjMvfO7eZUxBuWYR2SkcP26sozF9PF
-tGhbZHQVGZUTVPyvwahMUEhbPGVerOW0IYpxkm0x/eaWdTc4vPpf/rIlgbAjarnJ
-UN9SaWRlWKSdP4haujnzCoJbM7dU9bjvlGZNyXEekgeT0W2qFeGGp+yyUWw8tNsp
-0BuC1b7uW/bBn/xKm319wXVDvBgZgcktMolak39V7DVO
+MIIBQzCB6aADAgECAgEBMAoGCCqGSM49BAMCMBcxFTATBgNVBAMTDExFQVAgUm9v
+dCBDQTAeFw0yMDA4MDYxOTA3NDRaFw0yNTA4MDYxOTEyNDRaMBcxFTATBgNVBAMT
+DExFQVAgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIG5POr4cAdK
+kTavKpSJr8nW1V7HLpr27qKaShpk1TUy5ipaAlusmavGLxKsPE+i3AMlvf/f6ch3
+1MjAtIf5rYujJjAkMA4GA1UdDwEB/wQEAwICpDASBgNVHRMBAf8ECDAGAQH/AgEB
+MAoGCCqGSM49BAMCA0kAMEYCIQDXj280LNZbSbi0Y2WvtQrJBUw4wdm8qAeOeuH7
+6XiLEwIhAPBRsmst/ujcChsG2t6LpG+p8s4rfIfh8YLo/4qrcc5p
 -----END CERTIFICATE-----`)
-- 
GitLab