1 // Copyright 2015 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 "components/security_interstitials/core/common_string_util.h"
6 
7 #include "base/i18n/rtl.h"
8 #include "base/i18n/time_formatting.h"
9 #include "base/strings/strcat.h"
10 #include "components/security_interstitials/core/features.h"
11 #include "components/strings/grit/components_strings.h"
12 #include "components/url_formatter/url_formatter.h"
13 #include "net/base/net_errors.h"
14 #include "net/cert/ct_sct_to_string.h"
15 #include "ui/base/l10n/l10n_util.h"
16 
17 namespace security_interstitials {
18 
19 namespace common_string_util {
20 
GetFormattedHostName(const GURL & gurl)21 base::string16 GetFormattedHostName(const GURL& gurl) {
22   base::string16 host = url_formatter::IDNToUnicode(gurl.host());
23   if (base::i18n::IsRTL())
24     base::i18n::WrapStringWithLTRFormatting(&host);
25   return host;
26 }
27 
PopulateSSLLayoutStrings(int cert_error,base::DictionaryValue * load_time_data)28 void PopulateSSLLayoutStrings(int cert_error,
29                               base::DictionaryValue* load_time_data) {
30   load_time_data->SetString("type", "SSL");
31   load_time_data->SetString("errorCode", net::ErrorToString(cert_error));
32   load_time_data->SetString(
33       "openDetails", l10n_util::GetStringUTF16(IDS_SSL_OPEN_DETAILS_BUTTON));
34   load_time_data->SetString(
35       "closeDetails", l10n_util::GetStringUTF16(IDS_SSL_CLOSE_DETAILS_BUTTON));
36   // Not used by most interstitials; can be overridden by individual
37   // interstitials as needed.
38   load_time_data->SetString("recurrentErrorParagraph", "");
39   load_time_data->SetBoolean("show_recurrent_error_paragraph", false);
40 }
41 
PopulateSSLDebuggingStrings(const net::SSLInfo ssl_info,const base::Time time_triggered,base::DictionaryValue * load_time_data)42 void PopulateSSLDebuggingStrings(const net::SSLInfo ssl_info,
43                                  const base::Time time_triggered,
44                                  base::DictionaryValue* load_time_data) {
45   load_time_data->SetString("subject",
46                             ssl_info.cert->subject().GetDisplayName());
47   load_time_data->SetString("issuer", ssl_info.cert->issuer().GetDisplayName());
48   load_time_data->SetString(
49       "expirationDate",
50       base::TimeFormatShortDate(ssl_info.cert->valid_expiry()));
51   load_time_data->SetString("currentDate",
52                             base::TimeFormatShortDate(time_triggered));
53   std::vector<std::string> sct_list;
54   for (const auto& sct_status : ssl_info.signed_certificate_timestamps) {
55     std::string sct_info = "\n\nSCT " + sct_status.sct->log_description + " (" +
56                            net::ct::OriginToString(sct_status.sct->origin) +
57                            ", " + net::ct::StatusToString(sct_status.status) +
58                            ")";
59     sct_list.push_back(sct_info);
60   }
61   load_time_data->SetString("ct", base::StrCat(sct_list));
62   std::vector<std::string> encoded_chain;
63   ssl_info.cert->GetPEMEncodedChain(&encoded_chain);
64   load_time_data->SetString("pem", base::StrCat(encoded_chain));
65 }
66 
67 }  // namespace common_string_util
68 
69 }  // namespace security_interstitials
70