summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2026-01-04 19:56:58 +0100
committerCarl Hetherington <cth@carlh.net>2026-01-04 20:35:11 +0100
commit7fbe131beac98615530926edccf145c968ce89d7 (patch)
tree1cf2b6cc25014581687f125906e859b688b9c276
parent3c5e6c2b8e865d55f5d8d8fae824f26ec196c6b1 (diff)
Extract Christie certificate download code to lib/
-rw-r--r--src/lib/download_certificate.cc35
-rw-r--r--src/lib/download_certificate.h1
-rw-r--r--src/wx/christie_certificate_panel.cc38
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
{