KIOSlave
kcookiejar.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef KCOOKIEJAR_H
00026 #define KCOOKIEJAR_H
00027
00028 #include <QtCore/QString>
00029 #include <QtCore/QStringList>
00030 #include <QtCore/QHash>
00031
00032 #include <time.h>
00033
00034 class KConfig;
00035 class KCookieJar;
00036 class KHttpCookie;
00037 class KHttpCookieList;
00038
00039 typedef KHttpCookie *KHttpCookiePtr;
00040
00041 enum KCookieAdvice
00042 {
00043 KCookieDunno=0,
00044 KCookieAccept,
00045 KCookieReject,
00046 KCookieAsk
00047 };
00048
00049 class KHttpCookie
00050 {
00051 friend class KCookieJar;
00052 friend class KHttpCookieList;
00053 friend QDebug operator<<(QDebug, const KHttpCookie&);
00054
00055 protected:
00056 QString mHost;
00057 QString mDomain;
00058 QString mPath;
00059 QString mName;
00060 QString mValue;
00061 qint64 mExpireDate;
00062 int mProtocolVersion;
00063 bool mSecure;
00064 bool mCrossDomain;
00065 bool mHttpOnly;
00066 bool mExplicitPath;
00067 QList<long> mWindowIds;
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 void fixDomain(const QString &domain) { mDomain = domain; }
00091 qint64 expireDate() const { return mExpireDate; }
00092 int protocolVersion() const { return mProtocolVersion; }
00093 bool isSecure() const { return mSecure; }
00098 bool isExpired(qint64 currentDate = -1) const;
00099 bool isCrossDomain() const { return mCrossDomain; }
00100 bool isHttpOnly() const { return mHttpOnly; }
00101 bool hasExplicitPath() const { return mExplicitPath; }
00102 bool match(const QString &fqdn, const QStringList &domainList, const QString &path) const;
00103 };
00104
00105 QDebug operator<<(QDebug, const KHttpCookie&);
00106
00107 class KHttpCookieList : public QList<KHttpCookie>
00108 {
00109 public:
00110 KHttpCookieList() : QList<KHttpCookie>(), advice( KCookieDunno )
00111 { }
00112 virtual ~KHttpCookieList() { }
00113
00114 KCookieAdvice getAdvice() const { return advice; }
00115 void setAdvice(KCookieAdvice _advice) { advice = _advice; }
00116
00117 private:
00118 KCookieAdvice advice;
00119 };
00120
00121 QDebug operator<<(QDebug, const KHttpCookieList&);
00122
00123 class KCookieJar
00124 {
00125 public:
00131 KCookieJar();
00132
00138 ~KCookieJar();
00139
00143 bool changed() const { return m_cookiesChanged || m_configChanged; }
00144
00148 bool saveCookies(const QString &_filename);
00149
00153 bool loadCookies(const QString &_filename);
00154
00158 void saveConfig(KConfig *_config);
00159
00163 void loadConfig(KConfig *_config, bool reparse = false);
00164
00176 QString findCookies(const QString &_url, bool useDOMFormat, long windowId, KHttpCookieList *pendingCookies=0);
00177
00186 KHttpCookieList makeCookies(const QString &_url, const QByteArray &cookie_headers, long windowId);
00187
00196 KHttpCookieList makeDOMCookies(const QString &_url, const QByteArray &cookie_domstr, long windowId);
00197
00201 void addCookie(KHttpCookie &cookie);
00202
00214 KCookieAdvice cookieAdvice(KHttpCookie& cookie);
00215
00225 KCookieAdvice getDomainAdvice(const QString &_domain);
00226
00237 void setDomainAdvice(const QString &_domain, KCookieAdvice _advice);
00238
00249 void setDomainAdvice(const KHttpCookie& _cookie, KCookieAdvice _advice);
00250
00261 KCookieAdvice getGlobalAdvice() { return m_globalAdvice; }
00262
00273 void setGlobalAdvice(KCookieAdvice _advice);
00274
00281 const QStringList& getDomainList();
00282
00286 KHttpCookieList *getCookieList(const QString & _domain,
00287 const QString& _fqdn );
00288
00296 void eatCookie(KHttpCookieList::iterator cookieIterator);
00297
00301 void eatCookiesForDomain(const QString &domain);
00302
00306 void eatAllCookies();
00307
00312 void eatSessionCookies( long windowId );
00313
00318 void eatSessionCookies( const QString& fqdn, long windowId, bool isFQDN = true );
00319
00323 static bool parseUrl(const QString &_url,
00324 QString &_fqdn,
00325 QString &_path);
00326
00332 void extractDomains(const QString &_fqdn,
00333 QStringList &_domainList) const;
00334
00335 static QString adviceToStr(KCookieAdvice _advice);
00336 static KCookieAdvice strToAdvice(const QString &_str);
00337
00338 enum KCookieDefaultPolicy {
00339 ApplyToShownCookiesOnly = 0,
00340 ApplyToCookiesFromDomain = 1,
00341 ApplyToAllCookies = 2
00342 };
00344 KCookieDefaultPolicy preferredDefaultPolicy() const { return m_preferredPolicy; }
00345
00347 bool showCookieDetails () const { return m_showCookieDetails; }
00348
00352 void setPreferredDefaultPolicy (KCookieDefaultPolicy value) { m_preferredPolicy = value; }
00353
00358 void setShowCookieDetails (bool value) { m_showCookieDetails = value; }
00359
00360 protected:
00361 void stripDomain(const QString &_fqdn, QString &_domain);
00362 QString stripDomain(const KHttpCookie& cookie);
00363
00364 protected:
00365 QStringList m_domainList;
00366 KCookieAdvice m_globalAdvice;
00367 QHash<QString, KHttpCookieList*> m_cookieDomains;
00368 QHash<QString, int> m_twoLevelTLD;
00369
00370 bool m_configChanged;
00371 bool m_cookiesChanged;
00372 bool m_showCookieDetails;
00373 bool m_rejectCrossDomainCookies;
00374 bool m_autoAcceptSessionCookies;
00375 bool m_ignoreCookieExpirationDate;
00376
00377 KCookieDefaultPolicy m_preferredPolicy;
00378 };
00379 #endif