| /* |
| * Copyright (C) 2018 Sony Interactive Entertainment Inc. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
| * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "config.h" |
| #include "CookieJarCurlDatabase.h" |
| |
| #if USE(CURL) |
| #include "Cookie.h" |
| #include "CookieJarDB.h" |
| #include "CookieRequestHeaderFieldProxy.h" |
| #include "NetworkStorageSession.h" |
| #include "NotImplemented.h" |
| #include "URL.h" |
| |
| #include <wtf/Optional.h> |
| #include <wtf/text/StringBuilder.h> |
| #include <wtf/text/WTFString.h> |
| |
| namespace WebCore { |
| |
| static String cookiesForSession(const NetworkStorageSession& session, const URL&, const URL& url, bool forHTTPHeader) |
| { |
| StringBuilder cookies; |
| |
| CookieJarDB& cookieJarDB = session.cookieDatabase(); |
| auto searchHTTPOnly = (forHTTPHeader ? std::nullopt : std::optional<bool> {false}); |
| auto secure = url.protocolIs("https") ? std::nullopt : std::optional<bool> {false}; |
| |
| Vector<Cookie> results; |
| if (cookieJarDB.searchCookies(url.string(), searchHTTPOnly, secure, std::nullopt, results)) { |
| for (auto result : results) { |
| if (!cookies.isEmpty()) |
| cookies.append("; "); |
| cookies.append(result.name); |
| cookies.append("="); |
| cookies.append(result.value); |
| } |
| } |
| return cookies.toString(); |
| } |
| |
| void CookieJarCurlDatabase::setCookiesFromDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, const String& value) const |
| { |
| UNUSED_PARAM(frameID); |
| UNUSED_PARAM(pageID); |
| UNUSED_PARAM(firstParty); |
| |
| CookieJarDB& cookieJarDB = session.cookieDatabase(); |
| cookieJarDB.setCookie(url.string(), value, true); |
| } |
| |
| void CookieJarCurlDatabase::setCookiesFromHTTPResponse(const NetworkStorageSession& session, const URL& url, const String& value) const |
| { |
| CookieJarDB& cookieJarDB = session.cookieDatabase(); |
| cookieJarDB.setCookie(url.string(), value, false); |
| } |
| |
| std::pair<String, bool> CookieJarCurlDatabase::cookiesForDOM(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) const |
| { |
| UNUSED_PARAM(frameID); |
| UNUSED_PARAM(pageID); |
| |
| // FIXME: This should filter secure cookies out if the caller requests it. |
| return { cookiesForSession(session, firstParty, url, false), false }; |
| } |
| |
| std::pair<String, bool> CookieJarCurlDatabase::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const URL& firstParty, const URL& url, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, IncludeSecureCookies) const |
| { |
| UNUSED_PARAM(frameID); |
| UNUSED_PARAM(pageID); |
| |
| // FIXME: This should filter secure cookies out if the caller requests it. |
| return { cookiesForSession(session, firstParty, url, true), false }; |
| } |
| |
| std::pair<String, bool> CookieJarCurlDatabase::cookieRequestHeaderFieldValue(const NetworkStorageSession& session, const CookieRequestHeaderFieldProxy& headerFieldProxy) const |
| { |
| return cookieRequestHeaderFieldValue(session, headerFieldProxy.firstParty, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies); |
| } |
| |
| bool CookieJarCurlDatabase::cookiesEnabled(const NetworkStorageSession& session) const |
| { |
| return session.cookieDatabase().isEnabled(); |
| } |
| |
| bool CookieJarCurlDatabase::getRawCookies(const NetworkStorageSession& session, const URL& firstParty, const URL&, std::optional<uint64_t> frameID, std::optional<uint64_t> pageID, Vector<Cookie>& rawCookies) const |
| { |
| UNUSED_PARAM(frameID); |
| UNUSED_PARAM(pageID); |
| |
| CookieJarDB& cookieJarDB = session.cookieDatabase(); |
| return cookieJarDB.searchCookies(firstParty.string(), std::nullopt, std::nullopt, std::nullopt, rawCookies); |
| } |
| |
| void CookieJarCurlDatabase::deleteCookie(const NetworkStorageSession&, const URL&, const String&) const |
| { |
| // FIXME: Not yet implemented |
| } |
| |
| void CookieJarCurlDatabase::getHostnamesWithCookies(const NetworkStorageSession&, HashSet<String>&) const |
| { |
| // FIXME: Not yet implemented |
| } |
| |
| void CookieJarCurlDatabase::deleteCookiesForHostnames(const NetworkStorageSession&, const Vector<String>&) const |
| { |
| // FIXME: Not yet implemented |
| } |
| |
| void CookieJarCurlDatabase::deleteAllCookies(const NetworkStorageSession&) const |
| { |
| // FIXME: Not yet implemented |
| } |
| |
| void CookieJarCurlDatabase::deleteAllCookiesModifiedSince(const NetworkStorageSession&, WallTime) const |
| { |
| // FIXME: Not yet implemented |
| } |
| |
| } // namespace WebCore |
| |
| #endif // USE(CURL) |