X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=9b369a81f22442c98d7baa0cfcf27e63d9fc55cb;hb=20d041aec481740d1e3495a763c2ef0368ea4147;hp=37168296611746e713d1d6bb99b8089c127d5109;hpb=3e6b2d886961177c8d89b3f9168393d33c13bff2;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index 371682966..9b369a81f 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -33,9 +33,10 @@ #include "compose.hpp" #include "crypto.h" #include "dkdm_recipient.h" -#include -#include +#include "zipper.h" #include +#include +#include #include #include #include @@ -450,25 +451,7 @@ try } } - optional bad; - - for (auto const& i: _signer_chain->unordered()) { - if (i.has_utf8_strings()) { - bad = BAD_SIGNER_UTF8_STRINGS; - } - if ((i.not_after().year() - i.not_before().year()) > 15) { - bad = BAD_SIGNER_VALIDITY_TOO_LONG; - } - } - - if (!_signer_chain->chain_valid() || !_signer_chain->private_key_valid()) { - bad = BAD_SIGNER_INCONSISTENT; - } - - if (!_decryption_chain->chain_valid() || !_decryption_chain->private_key_valid()) { - bad = BAD_DECRYPTION_INCONSISTENT; - } - + auto bad = check_certificates (); if (bad) { auto const remake = Bad(*bad); if (remake && *remake) { @@ -1470,3 +1453,47 @@ Config::add_custom_language (dcp::LanguageTag tag) } } + +optional +Config::check_certificates () const +{ + optional bad; + + for (auto const& i: _signer_chain->unordered()) { + if (i.has_utf8_strings()) { + bad = BAD_SIGNER_UTF8_STRINGS; + } + if ((i.not_after().year() - i.not_before().year()) > 15) { + bad = BAD_SIGNER_VALIDITY_TOO_LONG; + } + } + + if (!_signer_chain->chain_valid() || !_signer_chain->private_key_valid()) { + bad = BAD_SIGNER_INCONSISTENT; + } + + if (!_decryption_chain->chain_valid() || !_decryption_chain->private_key_valid()) { + bad = BAD_DECRYPTION_INCONSISTENT; + } + + return bad; +} + + +void +save_all_config_as_zip (boost::filesystem::path zip_file) +{ + Zipper zipper (zip_file); + + auto config = Config::instance(); + zipper.add ("config.xml", dcp::file_to_string(config->config_read_file())); + if (boost::filesystem::exists(config->cinemas_file())) { + zipper.add ("cinemas.xml", dcp::file_to_string(config->cinemas_file())); + } + if (boost::filesystem::exists(config->dkdm_recipients_file())) { + zipper.add ("dkdm_recipients.xml", dcp::file_to_string(config->dkdm_recipients_file())); + } + + zipper.close (); +} +