diff options
| author | Carl Hetherington <cth@carlh.net> | 2026-01-04 19:56:58 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2026-01-04 20:35:11 +0100 |
| commit | 7fbe131beac98615530926edccf145c968ce89d7 (patch) | |
| tree | 1cf2b6cc25014581687f125906e859b688b9c276 | |
| parent | 3c5e6c2b8e865d55f5d8d8fae824f26ec196c6b1 (diff) | |
Extract Christie certificate download code to lib/
| -rw-r--r-- | src/lib/download_certificate.cc | 35 | ||||
| -rw-r--r-- | src/lib/download_certificate.h | 1 | ||||
| -rw-r--r-- | src/wx/christie_certificate_panel.cc | 38 |
3 files changed, 47 insertions, 27 deletions
diff --git a/src/lib/download_certificate.cc b/src/lib/download_certificate.cc index 84ba210fd..c72f83476 100644 --- a/src/lib/download_certificate.cc +++ b/src/lib/download_certificate.cc @@ -251,6 +251,39 @@ download_dolby_certificate(string const& serial, std::function<void ()> yield) } +static +pair<dcp::Certificate, string> +download_christie_certificate(string serial) +{ + string const prefix = fmt::format( + "ftp://{}:{}@certificates.christiedigital.com/Certificates/", + Config::instance()->christie_username().get(), + Config::instance()->christie_password().get() + ); + + serial.insert(0, 12 - serial.length(), '0'); + + optional<string> all_errors; + + try { + string const url = fmt::format("{}F-IMB/F-IMB_{}_sha256.pem", prefix, serial); + return { dcp::CertificateChain(get_from_url(url, true, false).as_string()).leaf(), url }; + } catch (std::exception& e) { + all_errors = e.what(); + + try { + auto const url = fmt::format("{}IMB-S2/IMB-S2_{}_sha256.pem", prefix, serial); + return { dcp::CertificateChain(get_from_url(url, true, false).as_string()).leaf(), url }; + } catch (std::exception& e) { + *all_errors += "\n" + string(e.what()); + } + } + + /* Could be a mix of download and certificate parsing problems, but hopefully this is good enough */ + throw CertificateReadError(*all_errors); +} + + pair<dcp::Certificate, string> download_certificate(Manufacturer manufacturer, string const& serial, std::function<void ()> yield) { @@ -261,6 +294,8 @@ download_certificate(Manufacturer manufacturer, string const& serial, std::funct return download_barco_certificate(serial); case Manufacturer::DOLBY: return download_dolby_certificate(serial, yield); + case Manufacturer::CHRISTIE: + return download_christie_certificate(serial); } return {}; diff --git a/src/lib/download_certificate.h b/src/lib/download_certificate.h index 4dbf0b306..60ee4f69f 100644 --- a/src/lib/download_certificate.h +++ b/src/lib/download_certificate.h @@ -27,6 +27,7 @@ enum class Manufacturer GDC, BARCO, DOLBY, + CHRISTIE, }; diff --git a/src/wx/christie_certificate_panel.cc b/src/wx/christie_certificate_panel.cc index 35fe4104d..6908a299e 100644 --- a/src/wx/christie_certificate_panel.cc +++ b/src/wx/christie_certificate_panel.cc @@ -18,12 +18,15 @@ */ + #include "christie_certificate_panel.h" #include "download_certificate_dialog.h" #include "wx_util.h" +#include "lib/download_certificate.h" #include "lib/internet.h" #include "lib/config.h" + using std::string; using boost::optional; using boost::bind; @@ -31,6 +34,7 @@ using boost::bind; using namespace boost::placeholders; #endif + ChristieCertificatePanel::ChristieCertificatePanel (DownloadCertificateDialog* dialog) : CredentialsDownloadCertificatePanel ( dialog, @@ -46,6 +50,7 @@ ChristieCertificatePanel::ChristieCertificatePanel (DownloadCertificateDialog* d } + void ChristieCertificatePanel::do_download () { @@ -55,39 +60,18 @@ ChristieCertificatePanel::do_download () Config::instance()->christie_password().get() ); - string serial = wx_to_std (_serial->GetValue()); - serial.insert (0, 12 - serial.length(), '0'); - - - optional<string> all_errors; - bool ok = true; - + string serial = wx_to_std(_serial->GetValue()); try { - string const url = fmt::format("{}F-IMB/F-IMB_{}_sha256.pem", prefix, serial); - auto data = get_from_url(url, true, false); - load_certificate_from_chain(data, url); + std::tie(_certificate, _url) = download_certificate(Manufacturer::CHRISTIE, serial, []() { wxYield(); }); + _dialog->message()->SetLabel(_("Certificate downloaded")); + _dialog->setup_sensitivity(); } catch (std::exception& e) { - all_errors = e.what(); - - try { - auto const url = fmt::format("{}IMB-S2/IMB-S2_{}_sha256.pem", prefix, serial); - auto data = get_from_url(url, true, false); - load_certificate_from_chain(data, url); - } catch (std::exception& e) { - *all_errors += "\n" + string(e.what()); - ok = false; - } - } - - if (ok) { - _dialog->message()->SetLabel (_("Certificate downloaded")); - _dialog->setup_sensitivity (); - } else { _dialog->message()->SetLabel({}); - error_dialog (this, std_to_wx(*all_errors)); + error_dialog(this, std_to_wx(e.what())); } } + wxString ChristieCertificatePanel::name () const { |
