Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/extensions/api/enterprise_certificates/enterprise_certi ficates_internal_api.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "chrome/browser/net/nss_context.h" | |
| 9 #include "chrome/common/extensions/api/enterprise_certificates_internal.h" | |
| 10 #include "net/base/crypto_module.h" | |
| 11 #include "net/base/net_errors.h" | |
| 12 #include "net/cert/nss_cert_database.h" | |
| 13 #include "net/cert/x509_certificate.h" | |
| 14 | |
| 15 namespace extensions { | |
| 16 namespace api_eci = api::enterprise_certificates_internal; | |
| 17 | |
| 18 const char kTokenNameUser[] = "User"; | |
| 19 | |
| 20 bool ECIImport::RunImpl() { | |
| 21 scoped_ptr<api_eci::ImportClientCertificateAndRawKey::Params> params( | |
| 22 api_eci::ImportClientCertificateAndRawKey::Params::Create(*args_)); | |
| 23 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
| 24 | |
| 25 GetNSSCertDatabaseForProfile( | |
| 26 GetProfile(), base::Bind(&ECIImport::DidGetCertDB, this)); | |
|
Ryan Sleevi
2014/04/15 00:15:04
This file should either be suffixed with _nss or i
pneubeck (no reviews)
2014/05/02 17:44:02
Done.
| |
| 27 return true; | |
| 28 } | |
| 29 | |
| 30 void ECIImport::DidGetCertDB(net::NSSCertDatabase* cert_db) { | |
| 31 if (!cert_db) { | |
| 32 LOG(ERROR) << "Couldn't get NSSCertDatabase."; | |
| 33 SendResponse(false); | |
| 34 return; | |
| 35 } | |
| 36 | |
| 37 scoped_ptr<api_eci::ImportClientCertificateAndRawKey::Params> params( | |
| 38 api_eci::ImportClientCertificateAndRawKey::Params::Create(*args_)); | |
| 39 | |
| 40 const std::string& cert_der = params->certificate; | |
| 41 scoped_refptr<net::X509Certificate> cert = | |
| 42 net::X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); | |
| 43 if (!cert) { | |
| 44 LOG(ERROR) << "Could not parse X509 cert."; | |
| 45 SendResponse(false); | |
| 46 return; | |
| 47 } | |
| 48 | |
| 49 crypto::ScopedPK11Slot private_slot(cert_db->GetPrivateSlot()); | |
| 50 if (!private_slot) { | |
| 51 LOG(ERROR) << "No private slot"; | |
| 52 SendResponse(false); | |
| 53 return; | |
| 54 } | |
| 55 | |
| 56 scoped_refptr<net::CryptoModule> module( | |
| 57 net::CryptoModule::CreateFromHandle(private_slot.get())); | |
| 58 const std::string& pkcs8 = params->key; | |
| 59 if (!cert_db->ImportPKCS8KeyAndCertificate(pkcs8, cert.get(), module.get())) { | |
| 60 LOG(ERROR) << "Could not import key or cert."; | |
| 61 SendResponse(false); | |
| 62 return; | |
| 63 } | |
| 64 | |
| 65 SendResponse(true); | |
| 66 return; | |
| 67 } | |
| 68 | |
| 69 bool ECIGetCerts::RunImpl() { | |
| 70 scoped_ptr<api_eci::GetClientCertificates::Params> params( | |
| 71 api_eci::GetClientCertificates::Params::Create(*args_)); | |
| 72 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
| 73 | |
| 74 GetNSSCertDatabaseForProfile(GetProfile(), | |
| 75 base::Bind(&ECIGetCerts::DidGetCertDB, this)); | |
| 76 return true; | |
| 77 } | |
| 78 | |
| 79 void ECIGetCerts::DidGetCertDB(net::NSSCertDatabase* cert_db) { | |
| 80 if (!cert_db) { | |
| 81 LOG(ERROR) << "Couldn't get NSSCertDatabase."; | |
| 82 SendResponse(false); | |
| 83 return; | |
| 84 } | |
| 85 | |
| 86 cert_db->ListCerts(base::Bind(&ECIGetCerts::DidGetCerts, this)); | |
| 87 } | |
| 88 | |
| 89 void ECIGetCerts::DidGetCerts(scoped_ptr<net::CertificateList> certs) { | |
| 90 scoped_ptr<api_eci::GetClientCertificates::Params> params( | |
| 91 api_eci::GetClientCertificates::Params::Create(*args_)); | |
| 92 | |
| 93 /* | |
| 94 crypto::ScopedPK11Slot private_slot(cert_db->GetPrivateSlot()); | |
| 95 if (!private_slot) { | |
| 96 LOG(ERROR) << "No private slot"; | |
| 97 SendResponse(false); | |
| 98 return; | |
| 99 } | |
| 100 */ | |
| 101 | |
| 102 /* | |
| 103 const std::string& cert_der = params->certificate; | |
| 104 scoped_refptr<net::X509Certificate> cert = | |
| 105 net::X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); | |
| 106 if (!cert) { | |
| 107 LOG(ERROR) << "Could not parse X509 cert."; | |
| 108 SendResponse(false); | |
| 109 return; | |
| 110 } | |
| 111 | |
| 112 scoped_refptr<net::CryptoModule> module( | |
| 113 net::CryptoModule::CreateFromHandle(private_slot.get())); | |
| 114 const std::string& pkcs8 = params->key; | |
| 115 if (!cert_db->ImportPKCS8KeyAndCertificate(pkcs8, cert.get(), module.get())) { | |
| 116 LOG(ERROR) << "Could not import key or cert."; | |
| 117 SendResponse(false); | |
| 118 return; | |
| 119 } | |
| 120 */ | |
| 121 | |
| 122 SendResponse(true); | |
| 123 return; | |
| 124 } | |
| 125 | |
| 126 bool ECIGetTokens::RunImpl() { | |
| 127 EXTENSION_FUNCTION_VALIDATE(args_->empty()); | |
| 128 | |
| 129 std::vector<std::string> token_names; | |
| 130 token_names.push_back(kTokenNameUser); | |
| 131 results_ = api_eci::GetTokens::Results::Create(token_names); | |
| 132 SendResponse(true); | |
| 133 return true; | |
| 134 } | |
| 135 } // namespace extensions | |
| OLD | NEW |