|
|
|
#include "connectionsettingsengine.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The configuration map:
|
|
|
|
*
|
|
|
|
* autoconnectEnabled: bool
|
|
|
|
* autoconnectPriority: int
|
|
|
|
* allUsersMayConnect: bool
|
|
|
|
* vpnAutoconnectEnabled: bool
|
|
|
|
* autoconnectVpn: QString
|
|
|
|
* meteredConnection: QString
|
|
|
|
*/
|
|
|
|
|
|
|
|
ConnectionSettingsEngine::ConnectionSettingsEngine()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
QVariantMap ConnectionSettingsEngine::readConnectionSettings(QString connUuidStr)
|
|
|
|
{
|
|
|
|
// Contains adapted code from plasma-nm
|
|
|
|
NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(connUuidStr);
|
|
|
|
NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings();
|
|
|
|
QVariantMap result;
|
|
|
|
result.insert("autoconnectEnabled", connSettings->autoconnect());
|
|
|
|
result.insert("autoconnectPriority", connSettings->autoconnectPriority());
|
|
|
|
result.insert("allUsersMayConnect", connSettings->permissions().isEmpty() ? true : false);
|
|
|
|
|
|
|
|
QStringList secondaryConns = connSettings->secondaries();
|
|
|
|
|
|
|
|
NetworkManager::Connection::List list = NetworkManager::listConnections();
|
|
|
|
QStringList vpnList;
|
|
|
|
|
|
|
|
for (const NetworkManager::Connection::Ptr &conn : list) {
|
|
|
|
NetworkManager::ConnectionSettings::Ptr conSet = conn->settings();
|
|
|
|
if (conSet->connectionType() == NetworkManager::ConnectionSettings::Vpn
|
|
|
|
|| conSet->connectionType() == NetworkManager::ConnectionSettings::WireGuard) {
|
|
|
|
vpnList.append(conSet->uuid());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (secondaryConns.isEmpty() || vpnList.isEmpty()) {
|
|
|
|
result.insert("vpnAutoconnectEnabled", false);
|
|
|
|
result.insert("autoconnectVpn", "");
|
|
|
|
} else {
|
|
|
|
for (const QString &vpnKey : vpnList) {
|
|
|
|
if (secondaryConns.contains(vpnKey)) {
|
|
|
|
result.insert("vpnAutoconnectEnabled", true);
|
|
|
|
result.insert("autoconnectVpn", vpnKey);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (connSettings->metered()) {
|
|
|
|
case NetworkManager::ConnectionSettings::MeteredUnknown:
|
|
|
|
case NetworkManager::ConnectionSettings::MeteredGuessYes:
|
|
|
|
case NetworkManager::ConnectionSettings::MeteredGuessNo:
|
|
|
|
result.insert("meteredConnection", "Automatic");
|
|
|
|
break;
|
|
|
|
case NetworkManager::ConnectionSettings::MeteredYes:
|
|
|
|
result.insert("meteredConnection", "Yes");
|
|
|
|
break;
|
|
|
|
case NetworkManager::ConnectionSettings::MeteredNo:
|
|
|
|
result.insert("meteredConnection", "No");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: pick up here
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ConnectionSettingsEngine::modifyConnectionSettings(QString connUuidStr, QVariantMap settings)
|
|
|
|
{
|
|
|
|
// Contains adapted code from plasma-nm
|
|
|
|
NetworkManager::Connection::Ptr conn = NetworkManager::findConnectionByUuid(connUuidStr);
|
|
|
|
NetworkManager::ConnectionSettings::Ptr connSettings = conn->settings();
|
|
|
|
|
|
|
|
if (settings["autoconnectEnabled"].isValid()) {
|
|
|
|
connSettings->setAutoconnect(settings["autoconnectEnabled"].toBool());
|
|
|
|
}
|
|
|
|
if (settings["autoconnectPriority"].isValid()) {
|
|
|
|
connSettings->setAutoconnectPriority(settings["autoconnectPriority"].toInt());
|
|
|
|
}
|
|
|
|
if (settings["allUsersMayConnect"].isValid()) {
|
|
|
|
if (settings["allUsersMayConnect"].toBool()) {
|
|
|
|
connSettings->setPermissions(QHash<QString, QString>());
|
|
|
|
} else {
|
|
|
|
if (connSettings->permissions().isEmpty()) {
|
|
|
|
; // TODO: Add current user to permissiosn list
|
|
|
|
} // Otherwise we just leave the permissions as-is
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (settings["vpnAutoconnectEnabled"].isValid()) {
|
|
|
|
if (settings["vpnAutoconnectEnabled"].toBool()) {
|
|
|
|
connSettings->setSecondaries(QStringList() << settings["autoconnectVpn"].toString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (settings["meteredConnection"].isValid()) {
|
|
|
|
QString meteredConnectionStr = settings["meteredConnection"].toString();
|
|
|
|
if (meteredConnectionStr == "Yes") {
|
|
|
|
connSettings->setMetered(NetworkManager::ConnectionSettings::MeteredYes);
|
|
|
|
} else if (meteredConnectionStr == "No") {
|
|
|
|
connSettings->setMetered(NetworkManager::ConnectionSettings::MeteredNo);
|
|
|
|
} // if it's "Automatic" we just leave it be
|
|
|
|
}
|
|
|
|
}
|