Warning, file /frameworks/kio/src/core/kssl/ksslsettings.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     This file is part of the KDE project
0003     SPDX-FileCopyrightText: 2000 George Staikos <staikos@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "ksslsettings.h"
0009 
0010 #include <KConfigGroup>
0011 
0012 #include <QStandardPaths>
0013 
0014 class CipherNode
0015 {
0016 public:
0017     CipherNode(const char *_name, int _keylen)
0018         : name(QString::fromUtf8(_name))
0019         , keylen(_keylen)
0020     {
0021     }
0022     QString name;
0023     int keylen;
0024     inline int operator==(const CipherNode &x)
0025     {
0026         return x.keylen == keylen && x.name == name;
0027     }
0028     inline int operator<(const CipherNode &x)
0029     {
0030         return keylen < x.keylen;
0031     }
0032     inline int operator<=(const CipherNode &x)
0033     {
0034         return keylen <= x.keylen;
0035     }
0036     inline int operator>(const CipherNode &x)
0037     {
0038         return keylen > x.keylen;
0039     }
0040     inline int operator>=(const CipherNode &x)
0041     {
0042         return keylen >= x.keylen;
0043     }
0044 };
0045 
0046 class KSSLSettingsPrivate
0047 {
0048 public:
0049     KSSLSettingsPrivate()
0050     {
0051     }
0052     ~KSSLSettingsPrivate()
0053     {
0054     }
0055 
0056     bool m_bUseEGD;
0057     bool m_bUseEFile;
0058     QString m_EGDPath;
0059     bool m_bSendX509;
0060     bool m_bPromptX509;
0061 
0062     KConfig *m_cfg;
0063     bool m_bWarnOnEnter, m_bWarnOnUnencrypted, m_bWarnOnLeave, m_bWarnOnMixed;
0064     bool m_bWarnSelfSigned, m_bWarnRevoked, m_bWarnExpired;
0065 
0066     QStringList m_v3ciphers;
0067     QStringList m_v3selectedciphers;
0068     QList<int> m_v3bits;
0069 };
0070 
0071 //
0072 // FIXME
0073 // Implementation note: for now, we only read cipher settings from disk,
0074 //                      and do not store them in memory.  This should change.
0075 //
0076 
0077 KSSLSettings::KSSLSettings(bool readConfig)
0078     : d(new KSSLSettingsPrivate)
0079 {
0080     d->m_cfg = new KConfig(QStringLiteral("cryptodefaults"), KConfig::NoGlobals);
0081 
0082     if (readConfig) {
0083         load();
0084     }
0085 }
0086 
0087 // we don't save settings in case it was a temporary object
0088 KSSLSettings::~KSSLSettings()
0089 {
0090     delete d->m_cfg;
0091 }
0092 
0093 QString KSSLSettings::getCipherList()
0094 {
0095     QString clist;
0096     // TODO fill in list here (or just remove this method!)
0097     return clist;
0098 }
0099 
0100 // FIXME - sync these up so that we can use them with the control module!!
0101 void KSSLSettings::load()
0102 {
0103     d->m_cfg->reparseConfiguration();
0104 
0105     KConfigGroup cfg(d->m_cfg, "Warnings");
0106     d->m_bWarnOnEnter = cfg.readEntry("OnEnter", false);
0107     d->m_bWarnOnLeave = cfg.readEntry("OnLeave", true);
0108     d->m_bWarnOnUnencrypted = cfg.readEntry("OnUnencrypted", false);
0109     d->m_bWarnOnMixed = cfg.readEntry("OnMixed", true);
0110 
0111     cfg = KConfigGroup(d->m_cfg, "Validation");
0112     d->m_bWarnSelfSigned = cfg.readEntry("WarnSelfSigned", true);
0113     d->m_bWarnExpired = cfg.readEntry("WarnExpired", true);
0114     d->m_bWarnRevoked = cfg.readEntry("WarnRevoked", true);
0115 
0116     cfg = KConfigGroup(d->m_cfg, "EGD");
0117     d->m_bUseEGD = cfg.readEntry("UseEGD", false);
0118     d->m_bUseEFile = cfg.readEntry("UseEFile", false);
0119     d->m_EGDPath = cfg.readPathEntry("EGDPath", QString());
0120 
0121     cfg = KConfigGroup(d->m_cfg, "Auth");
0122     d->m_bSendX509 = (QLatin1String("send") == cfg.readEntry("AuthMethod", ""));
0123     d->m_bPromptX509 = (QLatin1String("prompt") == cfg.readEntry("AuthMethod", ""));
0124 }
0125 
0126 void KSSLSettings::defaults()
0127 {
0128     d->m_bWarnOnEnter = false;
0129     d->m_bWarnOnLeave = true;
0130     d->m_bWarnOnUnencrypted = true;
0131     d->m_bWarnOnMixed = true;
0132     d->m_bWarnSelfSigned = true;
0133     d->m_bWarnExpired = true;
0134     d->m_bWarnRevoked = true;
0135     d->m_bUseEGD = false;
0136     d->m_bUseEFile = false;
0137     d->m_EGDPath = QLatin1String("");
0138 }
0139 
0140 void KSSLSettings::save()
0141 {
0142     KConfigGroup cfg(d->m_cfg, "Warnings");
0143     cfg.writeEntry("OnEnter", d->m_bWarnOnEnter);
0144     cfg.writeEntry("OnLeave", d->m_bWarnOnLeave);
0145     cfg.writeEntry("OnUnencrypted", d->m_bWarnOnUnencrypted);
0146     cfg.writeEntry("OnMixed", d->m_bWarnOnMixed);
0147 
0148     cfg = KConfigGroup(d->m_cfg, "Validation");
0149     cfg.writeEntry("WarnSelfSigned", d->m_bWarnSelfSigned);
0150     cfg.writeEntry("WarnExpired", d->m_bWarnExpired);
0151     cfg.writeEntry("WarnRevoked", d->m_bWarnRevoked);
0152 
0153     cfg = KConfigGroup(d->m_cfg, "EGD");
0154     cfg.writeEntry("UseEGD", d->m_bUseEGD);
0155     cfg.writeEntry("UseEFile", d->m_bUseEFile);
0156     cfg.writePathEntry("EGDPath", d->m_EGDPath);
0157 
0158     d->m_cfg->sync();
0159     // FIXME - ciphers
0160 }
0161 
0162 bool KSSLSettings::warnOnEnter() const
0163 {
0164     return d->m_bWarnOnEnter;
0165 }
0166 void KSSLSettings::setWarnOnEnter(bool x)
0167 {
0168     d->m_bWarnOnEnter = x;
0169 }
0170 bool KSSLSettings::warnOnUnencrypted() const
0171 {
0172     return d->m_bWarnOnUnencrypted;
0173 }
0174 void KSSLSettings::setWarnOnUnencrypted(bool x)
0175 {
0176     d->m_bWarnOnUnencrypted = x;
0177 }
0178 bool KSSLSettings::warnOnLeave() const
0179 {
0180     return d->m_bWarnOnLeave;
0181 }
0182 void KSSLSettings::setWarnOnLeave(bool x)
0183 {
0184     d->m_bWarnOnLeave = x;
0185 }
0186 bool KSSLSettings::warnOnMixed() const
0187 {
0188     return d->m_bWarnOnMixed;
0189 }
0190 bool KSSLSettings::useEGD() const
0191 {
0192     return d->m_bUseEGD;
0193 }
0194 bool KSSLSettings::useEFile() const
0195 {
0196     return d->m_bUseEFile;
0197 }
0198 bool KSSLSettings::autoSendX509() const
0199 {
0200     return d->m_bSendX509;
0201 }
0202 bool KSSLSettings::promptSendX509() const
0203 {
0204     return d->m_bPromptX509;
0205 }
0206 QString &KSSLSettings::getEGDPath()
0207 {
0208     return d->m_EGDPath;
0209 }