00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <ksslcertificatehome.h>
00022 #include <ksslcertificate.h>
00023 #include <ksslpkcs12.h>
00024
00025 #include <kresolver.h>
00026 #include <ksimpleconfig.h>
00027
00028 using namespace KNetwork;
00029
00030 QStringList KSSLCertificateHome::getCertificateList() {
00031 KSimpleConfig cfg("ksslcertificates", false);
00032 QStringList list = cfg.groupList();
00033 QString defaultstr("<default>");
00034 QString blankstr("");
00035
00036 list.remove(defaultstr);
00037 list.remove(blankstr);
00038
00039 return list;
00040 }
00041
00042
00043
00044 void KSSLCertificateHome::setDefaultCertificate(QString name, QString host, bool send, bool prompt) {
00045 KSimpleConfig cfg("ksslauthmap", false);
00046
00047 #ifdef Q_WS_WIN //temporary
00048 cfg.setGroup(host);
00049 #else
00050 cfg.setGroup(KResolver::domainToAscii(host));
00051 #endif
00052 cfg.writeEntry("certificate", name);
00053 cfg.writeEntry("send", send);
00054 cfg.writeEntry("prompt", prompt);
00055 cfg.sync();
00056 }
00057
00058
00059
00060 void KSSLCertificateHome::setDefaultCertificate(KSSLPKCS12 *cert, QString host, bool send, bool prompt) {
00061 if (cert)
00062 KSSLCertificateHome::setDefaultCertificate(cert->name(), host, send, prompt);
00063 }
00064
00065
00066
00067 bool KSSLCertificateHome::addCertificate(QString filename, QString password, bool storePass) {
00068 KSSLPKCS12 *pkcs = KSSLPKCS12::loadCertFile(filename, password);
00069
00070 if (!pkcs) return false;
00071
00072 KSSLCertificateHome::addCertificate(pkcs, storePass?password:QString(""));
00073 delete pkcs;
00074
00075 return true;
00076 }
00077
00078
00079
00080 bool KSSLCertificateHome::addCertificate(KSSLPKCS12 *cert, QString passToStore) {
00081 if (!cert) return false;
00082
00083 KSimpleConfig cfg("ksslcertificates", false);
00084
00085 cfg.setGroup(cert->name());
00086 cfg.writeEntry("PKCS12Base64", cert->toString());
00087 cfg.writeEntry("Password", passToStore);
00088 cfg.sync();
00089 return true;
00090 }
00091
00092 bool KSSLCertificateHome::deleteCertificate(const QString &filename, const QString &password) {
00093 KSSLPKCS12 *pkcs = KSSLPKCS12::loadCertFile(filename, password);
00094
00095 if (!pkcs) return false;
00096
00097 bool ok = deleteCertificate(pkcs);
00098 delete pkcs;
00099
00100 return ok;
00101 }
00102
00103 bool KSSLCertificateHome::deleteCertificate(KSSLPKCS12 *cert) {
00104 if (!cert) return false;
00105
00106 return deleteCertificateByName(cert->name());
00107 }
00108
00109 bool KSSLCertificateHome::deleteCertificateByName(const QString &name) {
00110 if (name.isEmpty()) return false;
00111
00112 KSimpleConfig cfg("ksslcertificates", false);
00113
00114 bool ok = cfg.deleteGroup(name);
00115 cfg.sync();
00116
00117 return ok;
00118 }
00119
00120
00121 KSSLPKCS12* KSSLCertificateHome::getCertificateByName(QString name, QString password) {
00122 KSimpleConfig cfg("ksslcertificates", false);
00123 if (!cfg.hasGroup(name)) return NULL;
00124
00125 cfg.setGroup(name);
00126
00127 return KSSLPKCS12::fromString(cfg.readEntry("PKCS12Base64", ""), password);
00128 }
00129
00130
00131
00132 KSSLPKCS12* KSSLCertificateHome::getCertificateByName(QString name) {
00133 KSimpleConfig cfg("ksslcertificates", false);
00134 if (!cfg.hasGroup(name)) return NULL;
00135
00136 cfg.setGroup(name);
00137
00138 return KSSLPKCS12::fromString(cfg.readEntry("PKCS12Base64", ""), cfg.readEntry("Password", ""));
00139 }
00140
00141
00142
00143 bool KSSLCertificateHome::hasCertificateByName(QString name) {
00144 KSimpleConfig cfg("ksslcertificates", false);
00145 if (!cfg.hasGroup(name)) return false;
00146 return true;
00147 }
00148
00149
00150 KSSLPKCS12* KSSLCertificateHome::getCertificateByHost(QString host, QString password, KSSLAuthAction *aa) {
00151 return KSSLCertificateHome::getCertificateByName(KSSLCertificateHome::getDefaultCertificateName(host, aa), password);
00152 }
00153
00154
00155
00156 QString KSSLCertificateHome::getDefaultCertificateName(QString host, KSSLAuthAction *aa) {
00157 KSimpleConfig cfg("ksslauthmap", false);
00158
00159 #ifdef Q_WS_WIN //temporary
00160 if (!cfg.hasGroup(host)) {
00161 #else
00162 if (!cfg.hasGroup(KResolver::domainToAscii(host))) {
00163 #endif
00164 if (aa) *aa = AuthNone;
00165 return QString::null;
00166 } else {
00167 #ifdef Q_WS_WIN //temporary
00168 cfg.setGroup(host);
00169 #else
00170 cfg.setGroup(KResolver::domainToAscii(host));
00171 #endif
00172 if (aa) {
00173 bool tmp = cfg.readBoolEntry("send", false);
00174 *aa = AuthSend;
00175 if (!tmp) {
00176 tmp = cfg.readBoolEntry("prompt", false);
00177 *aa = AuthPrompt;
00178 if (!tmp) {
00179 *aa = AuthDont;
00180 }
00181 }
00182 }
00183 return cfg.readEntry("certificate", "");
00184 }
00185 }
00186
00187
00188 QString KSSLCertificateHome::getDefaultCertificateName(KSSLAuthAction *aa) {
00189 KConfig cfg("cryptodefaults", false);
00190
00191 cfg.setGroup("Auth");
00192 if (aa) {
00193 QString am = cfg.readEntry("AuthMethod", "");
00194 if (am == "send")
00195 *aa = AuthSend;
00196 else if (am == "prompt")
00197 *aa = AuthPrompt;
00198 else
00199 *aa = AuthDont;
00200 }
00201
00202 return cfg.readEntry("DefaultCert", "");
00203 }
00204
00205
00206
00207 KSSLPKCS12* KSSLCertificateHome::getDefaultCertificate(QString password, KSSLAuthAction *aa) {
00208 QString name = KSSLCertificateHome::getDefaultCertificateName(aa);
00209 KSimpleConfig cfg("ksslcertificates", false);
00210
00211 if (name.isEmpty()) return NULL;
00212
00213 cfg.setGroup(name);
00214 return KSSLPKCS12::fromString(cfg.readEntry("PKCS12Base64", ""), password);
00215 }
00216
00217
00218
00219 KSSLPKCS12* KSSLCertificateHome::getDefaultCertificate(KSSLAuthAction *aa) {
00220 QString name = KSSLCertificateHome::getDefaultCertificateName(aa);
00221 KSimpleConfig cfg("ksslcertificates", false);
00222
00223 if (name.isEmpty()) return NULL;
00224
00225 cfg.setGroup(name);
00226 return KSSLPKCS12::fromString(cfg.readEntry("PKCS12Base64", ""),
00227 cfg.readEntry("Password", ""));
00228 }
00229
00230
00231
00232 void KSSLCertificateHome::setDefaultCertificate(QString name, bool send, bool prompt) {
00233 KSimpleConfig cfg("ksslauthmap", false);
00234
00235 cfg.setGroup("<default>");
00236 cfg.writeEntry("defaultCertificate", name);
00237 cfg.writeEntry("send", send);
00238 cfg.writeEntry("prompt", prompt);
00239 }
00240
00241
00242 void KSSLCertificateHome::setDefaultCertificate(KSSLPKCS12 *cert, bool send, bool prompt) {
00243 if (cert)
00244 KSSLCertificateHome::setDefaultCertificate(cert->name(), send, prompt);
00245 }
00246