KIOSlave
kcookiejar.h
Go to the documentation of this file.
00001 /* 00002 This file is part of the KDE File Manager 00003 00004 Copyright (C) 1998 Waldo Bastian (bastian@kde.org) 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public License 00008 as published by the Free Software Foundation; either 00009 version 2, or (at your option) version 3. 00010 00011 This software is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this library; see the file COPYING. If not, write to 00018 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00019 Boston, MA 02110-1301, USA. 00020 */ 00021 //---------------------------------------------------------------------------- 00022 // 00023 // KDE File Manager -- HTTP Cookies 00024 00025 #ifndef KCOOKIEJAR_H 00026 #define KCOOKIEJAR_H 00027 00028 #include <QtCore/QString> 00029 #include <QtCore/QStringList> 00030 #include <QtCore/QHash> 00031 #include <QtCore/QSet> 00032 00033 class KConfig; 00034 class KCookieJar; 00035 class KHttpCookie; 00036 class KHttpCookieList; 00037 00038 typedef KHttpCookie *KHttpCookiePtr; 00039 00040 enum KCookieAdvice 00041 { 00042 KCookieDunno=0, 00043 KCookieAccept, 00044 KCookieReject, 00045 KCookieAsk 00046 }; 00047 00048 class KHttpCookie 00049 { 00050 friend class KCookieJar; 00051 friend class KHttpCookieList; 00052 friend QDebug operator<<(QDebug, const KHttpCookie&); // for cookieStr() 00053 00054 protected: 00055 QString mHost; 00056 QString mDomain; 00057 QString mPath; 00058 QString mName; 00059 QString mValue; 00060 qint64 mExpireDate; 00061 int mProtocolVersion; 00062 bool mSecure; 00063 bool mCrossDomain; 00064 bool mHttpOnly; 00065 bool mExplicitPath; 00066 QList<long> mWindowIds; 00067 QList<int> mPorts; 00068 00069 QString cookieStr(bool useDOMFormat) const; 00070 00071 public: 00072 explicit KHttpCookie(const QString &_host=QString(), 00073 const QString &_domain=QString(), 00074 const QString &_path=QString(), 00075 const QString &_name=QString(), 00076 const QString &_value=QString(), 00077 qint64 _expireDate=0, 00078 int _protocolVersion=0, 00079 bool _secure = false, 00080 bool _httpOnly = false, 00081 bool _explicitPath = false); 00082 00083 QString domain() const { return mDomain; } 00084 QString host() const { return mHost; } 00085 QString path() const { return mPath; } 00086 QString name() const { return mName; } 00087 QString value() const { return mValue; } 00088 QList<long> &windowIds() { return mWindowIds; } 00089 const QList<long> &windowIds() const { return mWindowIds; } 00090 const QList<int> &ports() const { return mPorts; } 00091 void fixDomain(const QString &domain) { mDomain = domain; } 00092 qint64 expireDate() const { return mExpireDate; } 00093 int protocolVersion() const { return mProtocolVersion; } 00094 bool isSecure() const { return mSecure; } 00099 bool isExpired(qint64 currentDate = -1) const; 00100 bool isCrossDomain() const { return mCrossDomain; } 00101 bool isHttpOnly() const { return mHttpOnly; } 00102 bool hasExplicitPath() const { return mExplicitPath; } 00103 bool match(const QString &fqdn, const QStringList &domainList, const QString &path, int port=-1) const; 00104 }; 00105 00106 QDebug operator<<(QDebug, const KHttpCookie&); 00107 00108 class KHttpCookieList : public QList<KHttpCookie> 00109 { 00110 public: 00111 KHttpCookieList() : QList<KHttpCookie>(), advice( KCookieDunno ) 00112 { } 00113 virtual ~KHttpCookieList() { } 00114 00115 KCookieAdvice getAdvice() const { return advice; } 00116 void setAdvice(KCookieAdvice _advice) { advice = _advice; } 00117 00118 private: 00119 KCookieAdvice advice; 00120 }; 00121 00122 QDebug operator<<(QDebug, const KHttpCookieList&); 00123 00124 class KCookieJar 00125 { 00126 public: 00132 KCookieJar(); 00133 00139 ~KCookieJar(); 00140 00144 bool changed() const { return m_cookiesChanged || m_configChanged; } 00145 00149 bool saveCookies(const QString &_filename); 00150 00154 bool loadCookies(const QString &_filename); 00155 00159 void saveConfig(KConfig *_config); 00160 00164 void loadConfig(KConfig *_config, bool reparse = false); 00165 00177 QString findCookies(const QString &_url, bool useDOMFormat, long windowId, KHttpCookieList *pendingCookies=0); 00178 00187 KHttpCookieList makeCookies(const QString &_url, const QByteArray &cookie_headers, long windowId); 00188 00197 KHttpCookieList makeDOMCookies(const QString &_url, const QByteArray &cookie_domstr, long windowId); 00198 00202 void addCookie(KHttpCookie &cookie); 00203 00215 KCookieAdvice cookieAdvice(KHttpCookie& cookie); 00216 00226 KCookieAdvice getDomainAdvice(const QString &_domain); 00227 00238 void setDomainAdvice(const QString &_domain, KCookieAdvice _advice); 00239 00250 void setDomainAdvice(const KHttpCookie& _cookie, KCookieAdvice _advice); 00251 00262 KCookieAdvice getGlobalAdvice() { return m_globalAdvice; } 00263 00274 void setGlobalAdvice(KCookieAdvice _advice); 00275 00282 const QStringList& getDomainList(); 00283 00287 KHttpCookieList *getCookieList(const QString & _domain, 00288 const QString& _fqdn ); 00289 00297 void eatCookie(KHttpCookieList::iterator cookieIterator); 00298 00302 void eatCookiesForDomain(const QString &domain); 00303 00307 void eatAllCookies(); 00308 00313 void eatSessionCookies( long windowId ); 00314 00319 void eatSessionCookies( const QString& fqdn, long windowId, bool isFQDN = true ); 00320 00324 static bool parseUrl(const QString &_url, 00325 QString &_fqdn, 00326 QString &_path, 00327 int *port = 0); 00328 00334 void extractDomains(const QString &_fqdn, 00335 QStringList &_domainList) const; 00336 00337 static QString adviceToStr(KCookieAdvice _advice); 00338 static KCookieAdvice strToAdvice(const QString &_str); 00339 00340 enum KCookieDefaultPolicy { 00341 ApplyToShownCookiesOnly = 0, 00342 ApplyToCookiesFromDomain = 1, 00343 ApplyToAllCookies = 2 00344 }; 00346 KCookieDefaultPolicy preferredDefaultPolicy() const { return m_preferredPolicy; } 00347 00349 bool showCookieDetails () const { return m_showCookieDetails; } 00350 00354 void setPreferredDefaultPolicy (KCookieDefaultPolicy value) { m_preferredPolicy = value; } 00355 00360 void setShowCookieDetails (bool value) { m_showCookieDetails = value; } 00361 00362 protected: 00363 void stripDomain(const QString &_fqdn, QString &_domain); 00364 QString stripDomain(const KHttpCookie& cookie); 00365 00366 protected: 00367 QStringList m_domainList; 00368 KCookieAdvice m_globalAdvice; 00369 QHash<QString, KHttpCookieList*> m_cookieDomains; 00370 QSet<QString> m_twoLevelTLD; 00371 QSet<QString> m_gTLDs; 00372 00373 bool m_configChanged; 00374 bool m_cookiesChanged; 00375 bool m_showCookieDetails; 00376 bool m_rejectCrossDomainCookies; 00377 bool m_autoAcceptSessionCookies; 00378 bool m_ignoreCookieExpirationDate; 00379 00380 KCookieDefaultPolicy m_preferredPolicy; 00381 }; 00382 #endif
KDE 4.6 API Reference