From 2c844e57ed5c54e65a2b4484f02907122a03361e Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 14 May 2020 20:35:32 +0200 Subject: [PATCH] Christie FTP contains certificate chains, not just leaf certificates. --- src/wx/barco_alchemy_certificate_panel.cc | 2 +- src/wx/christie_certificate_panel.cc | 4 ++-- src/wx/dolby_doremi_certificate_panel.cc | 2 +- src/wx/download_certificate_panel.cc | 17 ++++++++++++++++- src/wx/download_certificate_panel.h | 3 ++- src/wx/gdc_certificate_panel.cc | 2 +- src/wx/qube_certificate_panel.cc | 2 +- 7 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/wx/barco_alchemy_certificate_panel.cc b/src/wx/barco_alchemy_certificate_panel.cc index 47dd85e07..d105b4a9c 100644 --- a/src/wx/barco_alchemy_certificate_panel.cc +++ b/src/wx/barco_alchemy_certificate_panel.cc @@ -61,7 +61,7 @@ BarcoAlchemyCertificatePanel::do_download () serial ); - optional error = get_from_url (url, true, false, boost::bind (&DownloadCertificatePanel::load, this, _1)); + optional error = get_from_url (url, true, false, boost::bind (&DownloadCertificatePanel::load_certificate, this, _1)); if (error) { _dialog->message()->SetLabel(wxT("")); error_dialog (this, std_to_wx(*error)); diff --git a/src/wx/christie_certificate_panel.cc b/src/wx/christie_certificate_panel.cc index 0795b09e9..15074cdb6 100644 --- a/src/wx/christie_certificate_panel.cc +++ b/src/wx/christie_certificate_panel.cc @@ -60,13 +60,13 @@ ChristieCertificatePanel::do_download () optional all_errors; - optional error = get_from_url (url, true, false, boost::bind (&DownloadCertificatePanel::load, this, _1)); + optional error = get_from_url (url, true, false, boost::bind(&DownloadCertificatePanel::load_certificate_from_chain, this, _1)); if (error) { all_errors = *error; string const url = String::compose ("%1IMB-S2/IMB-S2_%2_sha256.pem", prefix, serial); - error = get_from_url (url, true, false, boost::bind (&DownloadCertificatePanel::load, this, _1)); + error = get_from_url (url, true, false, boost::bind(&DownloadCertificatePanel::load_certificate_from_chain, this, _1)); if (error) { *all_errors += "\n" + *error; } diff --git a/src/wx/dolby_doremi_certificate_panel.cc b/src/wx/dolby_doremi_certificate_panel.cc index c37b42e43..b047f6468 100644 --- a/src/wx/dolby_doremi_certificate_panel.cc +++ b/src/wx/dolby_doremi_certificate_panel.cc @@ -177,7 +177,7 @@ DolbyDoremiCertificatePanel::do_download () list::const_iterator i = urls.begin (); list::const_iterator j = files.begin (); while (!ok && i != urls.end ()) { - optional error = get_from_zip_url (*i++, *j++, true, true, boost::bind (&DownloadCertificatePanel::load, this, _1)); + optional error = get_from_zip_url (*i++, *j++, true, true, boost::bind (&DownloadCertificatePanel::load_certificate, this, _1)); if (error) { errors.push_back (error.get ()); } else { diff --git a/src/wx/download_certificate_panel.cc b/src/wx/download_certificate_panel.cc index 461c68966..34e6136ae 100644 --- a/src/wx/download_certificate_panel.cc +++ b/src/wx/download_certificate_panel.cc @@ -24,6 +24,7 @@ #include "lib/signal_manager.h" #include "lib/compose.hpp" #include +#include #include #include @@ -53,8 +54,9 @@ DownloadCertificatePanel::DownloadCertificatePanel (DownloadCertificateDialog* d _overall_sizer->SetSizeHints (this); } + optional -DownloadCertificatePanel::load (boost::filesystem::path file) +DownloadCertificatePanel::load_certificate (boost::filesystem::path file) { try { _certificate = dcp::Certificate (dcp::file_to_string (file)); @@ -64,6 +66,19 @@ DownloadCertificatePanel::load (boost::filesystem::path file) return optional(); } + +optional +DownloadCertificatePanel::load_certificate_from_chain (boost::filesystem::path file) +{ + try { + _certificate = dcp::CertificateChain (dcp::file_to_string(file)).leaf(); + } catch (dcp::MiscError& e) { + return String::compose(wx_to_std(_("Could not read certificate file (%1)")), e.what()); + } + return optional(); +} + + optional DownloadCertificatePanel::certificate () const { diff --git a/src/wx/download_certificate_panel.h b/src/wx/download_certificate_panel.h index f51bcde13..2ad03f7c0 100644 --- a/src/wx/download_certificate_panel.h +++ b/src/wx/download_certificate_panel.h @@ -37,7 +37,8 @@ public: virtual bool ready_to_download () const; void download (); - boost::optional load (boost::filesystem::path); + boost::optional load_certificate (boost::filesystem::path); + boost::optional load_certificate_from_chain (boost::filesystem::path); boost::optional certificate () const; protected: diff --git a/src/wx/gdc_certificate_panel.cc b/src/wx/gdc_certificate_panel.cc index a4301087d..ffd7de52f 100644 --- a/src/wx/gdc_certificate_panel.cc +++ b/src/wx/gdc_certificate_panel.cc @@ -53,7 +53,7 @@ GDCCertificatePanel::do_download () wx_to_std(_serial->GetValue()) ); - optional error = get_from_url (url, true, false, boost::bind (&DownloadCertificatePanel::load, this, _1)); + optional error = get_from_url (url, true, false, boost::bind(&DownloadCertificatePanel::load_certificate, this, _1)); if (error) { _dialog->message()->SetLabel(wxT("")); diff --git a/src/wx/qube_certificate_panel.cc b/src/wx/qube_certificate_panel.cc index de2ece889..3def3b9d4 100644 --- a/src/wx/qube_certificate_panel.cc +++ b/src/wx/qube_certificate_panel.cc @@ -63,7 +63,7 @@ QubeCertificatePanel::do_download () return; } - optional error = get_from_url (String::compose("%1SMPTE-%2/%3", base, _type, *name), true, false, boost::bind(&DownloadCertificatePanel::load, this, _1)); + optional error = get_from_url (String::compose("%1SMPTE-%2/%3", base, _type, *name), true, false, boost::bind(&DownloadCertificatePanel::load_certificate, this, _1)); if (error) { _dialog->message()->SetLabel(wxT("")); -- 2.30.2