mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-05-20 07:26:58 -04:00
Add a scripting mode to GPClient (#110)
This commit is contained in:
@@ -3,24 +3,22 @@
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QStandardPaths>
|
||||
#include <plog/Log.h>
|
||||
#include <plog/Init.h>
|
||||
#include <plog/Appenders/ColorConsoleAppender.h>
|
||||
#include <plog/Formatters/TxtFormatter.h>
|
||||
|
||||
#include "singleapplication.h"
|
||||
#include "gpclient.h"
|
||||
#include "vpn_dbus.h"
|
||||
#include "vpn_json.h"
|
||||
#include "enhancedwebview.h"
|
||||
#include "sigwatch.h"
|
||||
#include "version.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
const QDir path = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + "/GlobalProtect-openconnect";
|
||||
const QString logFile = path.path() + "/gpclient.log";
|
||||
if (!path.exists()) {
|
||||
path.mkpath(".");
|
||||
}
|
||||
|
||||
static plog::ColorConsoleAppender<plog::TxtFormatter> consoleAppender;
|
||||
plog::init(plog::debug, logFile.toUtf8()).addAppender(&consoleAppender);
|
||||
plog::ColorConsoleAppender<plog::TxtFormatter> consoleAppender(plog::streamStdErr);
|
||||
plog::init(plog::debug, &consoleAppender);
|
||||
|
||||
PLOGI << "GlobalProtect started, version: " << VERSION;
|
||||
|
||||
@@ -33,9 +31,35 @@ int main(int argc, char *argv[])
|
||||
SingleApplication app(argc, argv);
|
||||
app.setQuitOnLastWindowClosed(false);
|
||||
|
||||
GPClient w;
|
||||
QCommandLineParser parser;
|
||||
parser.addHelpOption();
|
||||
parser.addVersionOption();
|
||||
parser.addPositionalArgument("server", "The URL of the VPN server. Optional.");
|
||||
parser.addPositionalArgument("gateway", "The URL of the specific VPN gateway. Optional.");
|
||||
parser.addOptions({
|
||||
{"json", "Write the result of the handshake with the GlobalConnect server to stdout as JSON and terminate. Useful for scripting."},
|
||||
{"now", "Do not show the dialog with the connect button; connect immediately instead."},
|
||||
});
|
||||
parser.process(app);
|
||||
|
||||
const QStringList positional = parser.positionalArguments();
|
||||
|
||||
IVpn *vpn = parser.isSet("json") // yes it leaks, but this is cleared on exit anyway
|
||||
? static_cast<IVpn*>(new VpnJson(nullptr)) // Print to stdout and exit
|
||||
: static_cast<IVpn*>(new VpnDbus(nullptr)); // Contact GPService daemon via dbus
|
||||
GPClient w(nullptr, vpn);
|
||||
w.show();
|
||||
|
||||
if (positional.size() > 0) {
|
||||
w.portal(positional.at(0));
|
||||
}
|
||||
if (positional.size() > 1) {
|
||||
GPGateway gw;
|
||||
gw.setName(positional.at(1));
|
||||
gw.setAddress(positional.at(1));
|
||||
w.setCurrentGateway(gw);
|
||||
}
|
||||
|
||||
QObject::connect(&app, &SingleApplication::instanceStarted, &w, &GPClient::activate);
|
||||
|
||||
UnixSignalWatcher sigwatch;
|
||||
@@ -45,5 +69,12 @@ int main(int argc, char *argv[])
|
||||
sigwatch.watchForSignal(SIGHUP);
|
||||
QObject::connect(&sigwatch, &UnixSignalWatcher::unixSignal, &w, &GPClient::quit);
|
||||
|
||||
if (parser.isSet("now")) {
|
||||
w.doConnect();
|
||||
}
|
||||
if (parser.isSet("json")) {
|
||||
QObject::connect(static_cast<VpnJson*>(vpn), &VpnJson::connected, &w, &GPClient::quit);
|
||||
}
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
Reference in New Issue
Block a user