kcookiejar.h
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 General Public License 00008 version 2 as published by the Free Software Foundation. 00009 00010 This software is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this library; see the file COPYING. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 00019 */ 00020 //---------------------------------------------------------------------------- 00021 // 00022 // KDE File Manager -- HTTP Cookies 00023 // $Id$ 00024 00025 #ifndef KCOOKIEJAR_H 00026 #define KCOOKIEJAR_H 00027 00028 #include <tqstring.h> 00029 #include <tqstringlist.h> 00030 #include <tqdict.h> 00031 #include <tqptrlist.h> 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 00054 protected: 00055 TQString mHost; 00056 TQString mDomain; 00057 TQString mPath; 00058 TQString mName; 00059 TQString mValue; 00060 time_t mExpireDate; 00061 int mProtocolVersion; 00062 bool mSecure; 00063 bool mCrossDomain; 00064 bool mHttpOnly; 00065 bool mExplicitPath; 00066 TQValueList<long> mWindowIds; 00067 00068 TQString cookieStr(bool useDOMFormat); 00069 00070 public: 00071 KHttpCookie(const TQString &_host=TQString::null, 00072 const TQString &_domain=TQString::null, 00073 const TQString &_path=TQString::null, 00074 const TQString &_name=TQString::null, 00075 const TQString &_value=TQString::null, 00076 time_t _expireDate=0, 00077 int _protocolVersion=0, 00078 bool _secure = false, 00079 bool _httpOnly = false, 00080 bool _explicitPath = false); 00081 00082 TQString domain(void) { return mDomain; } 00083 TQString host(void) { return mHost; } 00084 TQString path(void) { return mPath; } 00085 TQString name(void) { return mName; } 00086 TQString value(void) { return mValue; } 00087 TQValueList<long> &windowIds(void) { return mWindowIds; } 00088 void fixDomain(const TQString &domain) { mDomain = domain; } 00089 time_t expireDate(void) { return mExpireDate; } 00090 int protocolVersion(void) { return mProtocolVersion; } 00091 bool isSecure(void) { return mSecure; } 00092 bool isExpired(time_t currentDate); 00093 bool isCrossDomain(void) { return mCrossDomain; } 00094 bool isHttpOnly(void) { return mHttpOnly; } 00095 bool hasExplicitPath(void) { return mExplicitPath; } 00096 bool match(const TQString &fqdn, const TQStringList &domainList, const TQString &path); 00097 }; 00098 00099 class KHttpCookieList : public TQPtrList<KHttpCookie> 00100 { 00101 public: 00102 KHttpCookieList() : TQPtrList<KHttpCookie>(), advice( KCookieDunno ) 00103 { } 00104 virtual ~KHttpCookieList() { } 00105 00106 virtual int compareItems( void * item1, void * item2); 00107 KCookieAdvice getAdvice(void) { return advice; } 00108 void setAdvice(KCookieAdvice _advice) { advice = _advice; } 00109 00110 private: 00111 KCookieAdvice advice; 00112 }; 00113 00114 class KCookieJar 00115 { 00116 public: 00122 KCookieJar(); 00123 00129 ~KCookieJar(); 00130 00134 bool changed() const { return m_cookiesChanged || m_configChanged; } 00135 00139 bool saveCookies(const TQString &_filename); 00140 00144 bool loadCookies(const TQString &_filename); 00145 00149 void saveConfig(KConfig *_config); 00150 00154 void loadConfig(KConfig *_config, bool reparse = false); 00155 00167 TQString findCookies(const TQString &_url, bool useDOMFormat, long windowId, KHttpCookieList *pendingCookies=0); 00168 00177 KHttpCookieList makeCookies(const TQString &_url, const TQCString &cookie_headers, long windowId); 00178 00187 KHttpCookieList makeDOMCookies(const TQString &_url, const TQCString &cookie_domstr, long windowId); 00188 00194 void addCookie(KHttpCookiePtr &cookiePtr); 00195 00205 KCookieAdvice cookieAdvice(KHttpCookiePtr cookiePtr); 00206 00216 KCookieAdvice getDomainAdvice(const TQString &_domain); 00217 00228 void setDomainAdvice(const TQString &_domain, KCookieAdvice _advice); 00229 00240 void setDomainAdvice(KHttpCookiePtr _cookie, KCookieAdvice _advice); 00241 00252 KCookieAdvice getGlobalAdvice() { return m_globalAdvice; } 00253 00264 void setGlobalAdvice(KCookieAdvice _advice); 00265 00272 const TQStringList& getDomainList(); 00273 00277 const KHttpCookieList *getCookieList(const TQString & _domain, 00278 const TQString& _fqdn ); 00279 00287 void eatCookie(KHttpCookiePtr cookiePtr); 00288 00292 void eatCookiesForDomain(const TQString &domain); 00293 00297 void eatAllCookies(); 00298 00303 void eatSessionCookies( long windowId ); 00304 00309 void eatSessionCookies( const TQString& fqdn, long windowId, bool isFQDN = true ); 00310 00314 static bool parseURL(const TQString &_url, 00315 TQString &_fqdn, 00316 TQString &_path); 00317 00323 void extractDomains(const TQString &_fqdn, 00324 TQStringList &_domainList); 00325 00326 static TQString adviceToStr(KCookieAdvice _advice); 00327 static KCookieAdvice strToAdvice(const TQString &_str); 00328 00330 int preferredDefaultPolicy() const { return m_preferredPolicy; } 00331 00333 bool showCookieDetails () const { return m_showCookieDetails; } 00334 00338 void setPreferredDefaultPolicy (int value) { m_preferredPolicy = value; } 00339 00344 void setShowCookieDetails (bool value) { m_showCookieDetails = value; } 00345 00346 protected: 00347 void stripDomain(const TQString &_fqdn, TQString &_domain); 00348 TQString stripDomain( KHttpCookiePtr cookiePtr); 00349 00350 protected: 00351 TQStringList m_domainList; 00352 KCookieAdvice m_globalAdvice; 00353 TQDict<KHttpCookieList> m_cookieDomains; 00354 TQDict<int> m_twoLevelTLD; 00355 00356 bool m_configChanged; 00357 bool m_cookiesChanged; 00358 bool m_showCookieDetails; 00359 bool m_rejectCrossDomainCookies; 00360 bool m_autoAcceptSessionCookies; 00361 bool m_ignoreCookieExpirationDate; 00362 00363 int m_preferredPolicy; 00364 }; 00365 #endif