atom_cert_verifier.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright (c) 2015 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ATOM_BROWSER_NET_ATOM_CERT_VERIFIER_H_
  5. #define ATOM_BROWSER_NET_ATOM_CERT_VERIFIER_H_
  6. #include <map>
  7. #include <memory>
  8. #include <string>
  9. #include "net/cert/cert_verifier.h"
  10. namespace brightray {
  11. class RequireCTDelegate;
  12. } // namespace brightray
  13. namespace atom {
  14. class CertVerifierRequest;
  15. struct VerifyRequestParams {
  16. std::string hostname;
  17. std::string default_result;
  18. int error_code;
  19. scoped_refptr<net::X509Certificate> certificate;
  20. VerifyRequestParams();
  21. VerifyRequestParams(const VerifyRequestParams&);
  22. ~VerifyRequestParams();
  23. };
  24. class AtomCertVerifier : public net::CertVerifier {
  25. public:
  26. explicit AtomCertVerifier(brightray::RequireCTDelegate* ct_delegate);
  27. ~AtomCertVerifier() override;
  28. using VerifyProc = base::Callback<void(const VerifyRequestParams& request,
  29. const net::CompletionCallback&)>;
  30. void SetVerifyProc(const VerifyProc& proc);
  31. const VerifyProc verify_proc() const { return verify_proc_; }
  32. brightray::RequireCTDelegate* ct_delegate() const { return ct_delegate_; }
  33. net::CertVerifier* default_verifier() const {
  34. return default_cert_verifier_.get();
  35. }
  36. protected:
  37. // net::CertVerifier:
  38. int Verify(const RequestParams& params,
  39. net::CRLSet* crl_set,
  40. net::CertVerifyResult* verify_result,
  41. const net::CompletionCallback& callback,
  42. std::unique_ptr<Request>* out_req,
  43. const net::NetLogWithSource& net_log) override;
  44. bool SupportsOCSPStapling() override;
  45. private:
  46. friend class CertVerifierRequest;
  47. void RemoveRequest(const RequestParams& params);
  48. CertVerifierRequest* FindRequest(const RequestParams& params);
  49. std::map<RequestParams, CertVerifierRequest*> inflight_requests_;
  50. VerifyProc verify_proc_;
  51. std::unique_ptr<net::CertVerifier> default_cert_verifier_;
  52. brightray::RequireCTDelegate* ct_delegate_;
  53. DISALLOW_COPY_AND_ASSIGN(AtomCertVerifier);
  54. };
  55. } // namespace atom
  56. #endif // ATOM_BROWSER_NET_ATOM_CERT_VERIFIER_H_