File indexing completed on 2024-04-14 03:57:38

0001 /*
0002     SPDX-FileCopyrightText: 2012-2013 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "vpnsetting.h"
0008 #include "nmdebug.h"
0009 #include "vpnsetting_p.h"
0010 
0011 NetworkManager::VpnSettingPrivate::VpnSettingPrivate()
0012     : name(NM_SETTING_VPN_SETTING_NAME)
0013     , persistent(false)
0014     , timeout(0)
0015 {
0016 }
0017 
0018 NetworkManager::VpnSetting::VpnSetting()
0019     : Setting(Setting::Vpn)
0020     , d_ptr(new VpnSettingPrivate())
0021 {
0022 }
0023 
0024 NetworkManager::VpnSetting::VpnSetting(const Ptr &other)
0025     : Setting(other)
0026     , d_ptr(new VpnSettingPrivate())
0027 {
0028     setServiceType(other->serviceType());
0029     setUsername(other->username());
0030     setData(other->data());
0031     setSecrets(other->secrets());
0032     setPersistent(other->persistent());
0033     setTimeout(other->timeout());
0034 }
0035 
0036 NetworkManager::VpnSetting::~VpnSetting()
0037 {
0038     delete d_ptr;
0039 }
0040 
0041 QString NetworkManager::VpnSetting::name() const
0042 {
0043     Q_D(const VpnSetting);
0044 
0045     return d->name;
0046 }
0047 
0048 bool NetworkManager::VpnSetting::persistent() const
0049 {
0050     Q_D(const VpnSetting);
0051 
0052     return d->persistent;
0053 }
0054 
0055 void NetworkManager::VpnSetting::setPersistent(bool persistent)
0056 {
0057     Q_D(VpnSetting);
0058 
0059     d->persistent = persistent;
0060 }
0061 
0062 uint NetworkManager::VpnSetting::timeout() const
0063 {
0064     Q_D(const VpnSetting);
0065 
0066     return d->timeout;
0067 }
0068 
0069 void NetworkManager::VpnSetting::setTimeout(uint timeout)
0070 {
0071     Q_D(VpnSetting);
0072 
0073     d->timeout = timeout;
0074 }
0075 
0076 void NetworkManager::VpnSetting::setServiceType(const QString &type)
0077 {
0078     Q_D(VpnSetting);
0079 
0080     d->serviceType = type;
0081 }
0082 
0083 QString NetworkManager::VpnSetting::serviceType() const
0084 {
0085     Q_D(const VpnSetting);
0086 
0087     return d->serviceType;
0088 }
0089 
0090 void NetworkManager::VpnSetting::setUsername(const QString &username)
0091 {
0092     Q_D(VpnSetting);
0093 
0094     d->username = username;
0095 }
0096 
0097 QString NetworkManager::VpnSetting::username() const
0098 {
0099     Q_D(const VpnSetting);
0100 
0101     return d->username;
0102 }
0103 
0104 void NetworkManager::VpnSetting::setData(const NMStringMap &data)
0105 {
0106     Q_D(VpnSetting);
0107 
0108     d->data = data;
0109 }
0110 
0111 NMStringMap NetworkManager::VpnSetting::data() const
0112 {
0113     Q_D(const VpnSetting);
0114 
0115     return d->data;
0116 }
0117 
0118 void NetworkManager::VpnSetting::setSecrets(const NMStringMap &secrets)
0119 {
0120     Q_D(VpnSetting);
0121 
0122     d->secrets = secrets;
0123 }
0124 
0125 NMStringMap NetworkManager::VpnSetting::secrets() const
0126 {
0127     Q_D(const VpnSetting);
0128 
0129     return d->secrets;
0130 }
0131 
0132 void NetworkManager::VpnSetting::secretsFromMap(const QVariantMap &secrets)
0133 {
0134     if (secrets.contains(QLatin1String(NM_SETTING_VPN_SECRETS))) {
0135         setSecrets(qdbus_cast<NMStringMap>(secrets.value(QLatin1String(NM_SETTING_VPN_SECRETS))));
0136     }
0137 }
0138 
0139 QVariantMap NetworkManager::VpnSetting::secretsToMap() const
0140 {
0141     QVariantMap secretsMap;
0142     if (!secrets().isEmpty()) {
0143         secretsMap.insert(QLatin1String(NM_SETTING_VPN_SECRETS), QVariant::fromValue<NMStringMap>(secrets()));
0144     }
0145 
0146     // qCDebug(NMQT) << secretsMap;
0147     return secretsMap;
0148 }
0149 
0150 void NetworkManager::VpnSetting::fromMap(const QVariantMap &setting)
0151 {
0152     if (setting.contains(QLatin1String(NM_SETTING_VPN_SERVICE_TYPE))) {
0153         setServiceType(setting.value(QLatin1String(NM_SETTING_VPN_SERVICE_TYPE)).toString());
0154     }
0155 
0156     if (setting.contains(QLatin1String(NM_SETTING_VPN_USER_NAME))) {
0157         setUsername(setting.value(QLatin1String(NM_SETTING_VPN_USER_NAME)).toString());
0158     }
0159 
0160     if (setting.contains(QLatin1String(NM_SETTING_VPN_DATA))) {
0161         setData(qdbus_cast<NMStringMap>(setting.value(QLatin1String(NM_SETTING_VPN_DATA))));
0162     }
0163 
0164     if (setting.contains(QLatin1String(NM_SETTING_VPN_SECRETS))) {
0165         setSecrets(qdbus_cast<NMStringMap>(setting.value(QLatin1String(NM_SETTING_VPN_SECRETS))));
0166     }
0167 
0168     if (setting.contains(QLatin1String(NM_SETTING_VPN_PERSISTENT))) {
0169         setPersistent(setting.value(QLatin1String(NM_SETTING_VPN_PERSISTENT)).toBool());
0170     }
0171 
0172     if (setting.contains(QLatin1String(NM_SETTING_VPN_TIMEOUT))) {
0173         setTimeout(setting.value(QLatin1String(NM_SETTING_VPN_TIMEOUT)).toUInt());
0174     }
0175 }
0176 
0177 QVariantMap NetworkManager::VpnSetting::toMap() const
0178 {
0179     QVariantMap setting;
0180 
0181     if (!serviceType().isEmpty()) {
0182         setting.insert(QLatin1String(NM_SETTING_VPN_SERVICE_TYPE), serviceType());
0183     }
0184 
0185     if (!username().isEmpty()) {
0186         setting.insert(QLatin1String(NM_SETTING_VPN_USER_NAME), username());
0187     }
0188 
0189     if (!data().isEmpty()) {
0190         setting.insert(QLatin1String(NM_SETTING_VPN_DATA), QVariant::fromValue<NMStringMap>(data()));
0191     }
0192 
0193     if (!secrets().isEmpty()) {
0194         setting.insert(QLatin1String(NM_SETTING_VPN_SECRETS), QVariant::fromValue<NMStringMap>(secrets()));
0195     }
0196 
0197     setting.insert(QLatin1String(NM_SETTING_VPN_PERSISTENT), persistent());
0198     setting.insert(QLatin1String(NM_SETTING_VPN_TIMEOUT), timeout());
0199 
0200     return setting;
0201 }
0202 
0203 void NetworkManager::VpnSetting::secretsFromStringMap(const NMStringMap &map)
0204 {
0205     Q_D(VpnSetting);
0206 
0207     if (map.contains(QLatin1String("VpnSecrets"))) {
0208         const QStringList list = map.value(QLatin1String("VpnSecrets")).split("%SEP%");
0209         if (list.count() % 2 == 0) {
0210             for (int i = 0; i < list.count(); i += 2) {
0211                 if (d->secrets.contains(list[i])) {
0212                     d->secrets.remove(list[i]);
0213                 }
0214                 d->secrets.insert(list[i], list[i + 1]);
0215             }
0216         }
0217     }
0218 }
0219 
0220 NMStringMap NetworkManager::VpnSetting::secretsToStringMap() const
0221 {
0222     NMStringMap ret;
0223     QStringList list;
0224     QMap<QString, QString>::ConstIterator i = secrets().constBegin();
0225     while (i != secrets().constEnd()) {
0226         list << i.key() << i.value();
0227         ++i;
0228     }
0229 
0230     ret.insert(QLatin1String("VpnSecrets"), list.join("%SEP%"));
0231     return ret;
0232 }
0233 
0234 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::VpnSetting &setting)
0235 {
0236     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0237     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0238 
0239     dbg.nospace() << NM_SETTING_VPN_SERVICE_TYPE << ": " << setting.serviceType() << '\n';
0240     dbg.nospace() << NM_SETTING_VPN_USER_NAME << ": " << setting.username() << '\n';
0241     dbg.nospace() << NM_SETTING_VPN_DATA << ": " << setting.data() << '\n';
0242     dbg.nospace() << NM_SETTING_VPN_PERSISTENT << ": " << setting.persistent() << '\n';
0243     dbg.nospace() << NM_SETTING_VPN_TIMEOUT << ": " << setting.timeout() << '\n';
0244 
0245     return dbg.maybeSpace();
0246 }