X-Git-Url: https://www.flypig.org.uk/git/?a=blobdiff_plain;f=src%2Fvpncontrol.cpp;h=3f809133600e679ec43d4e0ccd3ea907b88ffd53;hb=6bef755f7d79ccd2a8467ea9eea0db4d8532a41c;hp=7bd002f666f0b6ba5f253fb3433e2cdbbdc51640;hpb=ee3968ffa08d4e0fcbad87765efa3aeb32ff0554;p=openvpnui.git diff --git a/src/vpncontrol.cpp b/src/vpncontrol.cpp index 7bd002f..3f80913 100644 --- a/src/vpncontrol.cpp +++ b/src/vpncontrol.cpp @@ -15,12 +15,19 @@ VPNControl::VPNControl(QObject *parent) : { // Read in the settings QSettings settings; + settings.setValue("showAll", false); + // Read configuration settings server = settings.value("server", "127.0.0.1").toString(); port = settings.value("port", 1194).toInt(); compressed = settings.value("compressed", true).toBool(); useTLS = settings.value("useTLS", true).toBool(); tlsDirection = settings.value("tlsDirection", 1).toInt(); + caCertFile = settings.value("caCertFile", "").toString(); + clientCertFile = settings.value("clientCertFile", "").toString(); + clientKeyFile = settings.value("clientKeyFile", "").toString(); + tlsKeyFile = settings.value("tlsKeyFile", "").toString(); + configFile = settings.value("configFile", "").toString(); } void VPNControl::initialise() @@ -33,7 +40,6 @@ void VPNControl::setStatus(VPNSTATUS newStatus) if (vpnStatus != newStatus) { vpnStatus = newStatus; emit statusChanged(newStatus); - printf ("Emitting status %d\n", newStatus); } } int VPNControl::getTlsDirection() const @@ -44,7 +50,6 @@ int VPNControl::getTlsDirection() const void VPNControl::setTlsDirection(int value) { if (value != tlsDirection) { - printf ("TLS direction set to %d\n", value); tlsDirection = value; settingsSetValue("tlsDirection", value); emit tlsDirectionChanged (value); @@ -59,7 +64,6 @@ bool VPNControl::getUseTLS() const void VPNControl::setUseTLS(bool value) { if (value != useTLS) { - printf ("Use TLS set to %d\n", value); useTLS = value; settingsSetValue("useTLS", value); emit useTLSChanged(useTLS); @@ -74,7 +78,6 @@ bool VPNControl::getCompressed() const void VPNControl::setCompressed(bool value) { if (value != compressed) { - printf ("Use compression set to %d\n", value); compressed = value; settingsSetValue("compressed", value); emit compressedChanged(compressed); @@ -89,7 +92,6 @@ unsigned int VPNControl::getPort() const void VPNControl::setPort(unsigned int value) { if (value != port) { - printf ("Port set to %d\n", value); port = value; settingsSetValue("port", value); emit portChanged(port); @@ -104,13 +106,93 @@ QString VPNControl::getServer() const void VPNControl::setServer(const QString &value) { if (value != server) { - printf ("Server set to %s\n", value.toUtf8().constData()); server = value; settingsSetValue("server", value); emit serverChanged(server); } } +QString VPNControl::getCaCertFile () const +{ + return caCertFile; +} + +void VPNControl::setCaCertFile(const QString &value) +{ + if (value != caCertFile) { + caCertFile = value; + settingsSetValue("caCertFile", value); + emit caCertFileChanged(caCertFile); + } +} + +void VPNControl::setClientCertFile(const QString &value) +{ + if (value != clientCertFile) { + clientCertFile = value; + settingsSetValue("clientCertFile", value); + emit clientCertFileChanged(clientCertFile); + } +} + +void VPNControl::setClientKeyFile(const QString &value) +{ + if (value != clientKeyFile) { + clientKeyFile = value; + settingsSetValue("clientKeyFile", value); + emit clientKeyFileChanged(clientKeyFile); + } +} + +void VPNControl::setTlsKeyFile(const QString &value) +{ + if (value != tlsKeyFile) { + tlsKeyFile = value; + settingsSetValue("tlsKeyFile", value); + emit tlsKeyFileChanged(tlsKeyFile); + } +} + +void VPNControl::setConfigFile(const QString &value) +{ + if (value != configFile) { + configFile = value; + settingsSetValue("configFile", value); + emit tlsKeyFileChanged(configFile); + } +} + +QString VPNControl::getClientCertFile () const +{ + return clientCertFile; +} + +QString VPNControl::getClientKeyFile () const +{ + return clientKeyFile; +} + +QString VPNControl::getTlsKeyFile () const +{ + return tlsKeyFile; +} + +QString VPNControl::getConfigFile () const +{ + return configFile; +} + +QString VPNControl::getLogText() const +{ + return logText; +} + +void VPNControl::setLogText(const QString &value) +{ + logText = value; + emit logTextChanged(logText); +} + void VPNControl::settingsSetValue (QString key, QString value) { QSettings settings; @@ -128,10 +210,8 @@ void VPNControl::vpnConnect() { printf ("Process already running.\n"); } else { - printf ("Connect\n"); - vpnProcess = new QProcess(); - QString program = "openvpn"; + QString program = "/usr/share/OpenVPNUI/bin/ovpnpermit"; collectArguments (); vpnProcess->setReadChannel(QProcess::StandardOutput); connect(vpnProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(readError(QProcess::ProcessError))); @@ -149,17 +229,27 @@ void VPNControl::vpnConnect() { void VPNControl::collectArguments () { arguments.clear(); - addArgument("config", "/home/nemo/Documents/Configure/OpenVPN/config.ovpn"); - addArgument("remote", server); - addArgument("port", QString::number(port)); + addArgumentNonempty("config", configFile); + addOption("client", true); + addOption("persist-key", true); + addOption("persist-tun", true); + addOption("nobind", true); + addArgument("resolv-retry", "infinite"); + addArgument("dev", "tun"); + addArgument("verb", "3"); + addArgument("proto", "udp"); + addArgument("user", "nemo"); + addArgument("group", "nemo"); + addArgumentNonempty("remote", server); + addArgumentNonempty("port", QString::number(port)); addOption("comp-lzo", compressed); - if (useTLS) { - addArgument("tls-auth", "/home/nemo/Documents/Configure/OpenVPN/ta.key"); + if ((useTLS) && (!tlsKeyFile.isEmpty())) { + addArgument("tls-auth", tlsKeyFile); addValue(QString::number(tlsDirection)); } - addArgument("ca", "/home/nemo/Documents/Configure/OpenVPN/ca.crt"); - addArgument("cert", "/home/nemo/Documents/Configure/OpenVPN/Jolla.crt"); - addArgument("key", "/home/nemo/Documents/Configure/OpenVPN/Jolla.key"); + addArgumentNonempty("ca", caCertFile); + addArgumentNonempty("cert", clientCertFile); + addArgumentNonempty("key", clientKeyFile); } void VPNControl::addArgument (QString key, QString value) { @@ -167,7 +257,17 @@ void VPNControl::addArgument (QString key, QString value) { argument = "--" + key; arguments.append(argument); - if (value != "") { + if (!value.isEmpty()) { + arguments.append(value); + } +} + +void VPNControl::addArgumentNonempty (QString key, QString value) { + QString argument; + + if (!value.isEmpty()) { + argument = "--" + key; + arguments.append(argument); arguments.append(value); } } @@ -191,7 +291,6 @@ void VPNControl::addValue (QString key) { void VPNControl::vpnDisconnect() { if (vpnProcess != NULL) { - printf ("Disconnect\n"); vpnProcess->terminate(); setStatus(VPNSTATUS_DISCONNECTING); @@ -201,25 +300,26 @@ void VPNControl::vpnDisconnect() { void VPNControl::readData() { while (vpnProcess->canReadLine()) { QByteArray read = vpnProcess->readLine(); - printf ("Output: %s", read.data()); + //printf ("Output: %s", read.data()); + + logAppend(read); + if (read.endsWith("Initialization Sequence Completed\n")) { - printf ("We're connected!\n"); setStatus(VPNSTATUS_CONNECTED); } } } void VPNControl::started() { - printf ("Started\n"); setStatus(VPNSTATUS_CONNECTING); } void VPNControl::finished(int code) { - printf ("Finished with code %d\n", code); if (vpnProcess != NULL) { //delete vpnProcess; vpnProcess = NULL; } + logAppend("Finished with code " + QString::number(code)); setStatus(VPNSTATUS_UNINITIALISED); } @@ -242,3 +342,32 @@ void VPNControl::updateConfiguration() { printf ("Update configuration\n"); } + +void VPNControl::logAppend(const QString &text) +{ + if (!text.isEmpty()) { + QString append = text; + // Ensure we end with a newline + if (!append.endsWith('\n')) { + append += '\n'; + } + // How many lines to add + int newLines = append.count('\n'); + int currentLines = logText.count('\n'); + int removeLines = currentLines + newLines - 24; + + // Remove excess lines from the top + while (removeLines > 0) { + int nextLine = logText.indexOf('\n'); + if (nextLine > 0) { + logText = logText.mid(nextLine + 1); + } + removeLines--; + } + + // Add new lines + logText.append(append); + emit logTextChanged(logText); + } +} +