blob: 088e64a6f346db6d4301c3bbd0d198047f379a6d [file] [log] [blame]
/*
* Copyright (C) 2013 University of Szeged
* Copyright (C) 2017 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 UNIVERSITY OF SZEGED ``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
* 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.
*/
#pragma once
#include <wtf/HashMap.h>
#include <wtf/ListHashSet.h>
#include <wtf/Noncopyable.h>
#include <wtf/text/StringHash.h>
namespace WebCore {
class CurlSSLHandle {
WTF_MAKE_NONCOPYABLE(CurlSSLHandle);
friend NeverDestroyed<CurlSSLHandle>;
public:
CurlSSLHandle();
using ClientCertificate = std::pair<String, String>;
bool shouldIgnoreSSLErrors() const { return m_ignoreSSLErrors; }
const char* getCACertPath() const { return m_caCertPath.data(); }
WEBCORE_EXPORT void setHostAllowsAnyHTTPSCertificate(const String&);
bool isAllowedHTTPSCertificateHost(const String&);
bool canIgnoredHTTPSCertificate(const String&, const ListHashSet<String>&);
void setClientCertificateInfo(const String&, const String&, const String&);
std::optional<ClientCertificate> getSSLClientCertificate(const String&);
private:
CString getCACertPathEnv();
bool m_ignoreSSLErrors { false };
CString m_caCertPath;
Lock m_mutex;
HashMap<String, ListHashSet<String>, ASCIICaseInsensitiveHash> m_allowedHosts;
HashMap<String, ClientCertificate, ASCIICaseInsensitiveHash> m_allowedClientHosts;
};
} // namespace WebCore