Move some logic from the caller into MakeChainDialog.
authorCarl Hetherington <cth@carlh.net>
Mon, 14 Feb 2022 09:12:04 +0000 (10:12 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 14 Feb 2022 09:12:04 +0000 (10:12 +0100)
src/wx/config_dialog.cc
src/wx/make_chain_dialog.cc
src/wx/make_chain_dialog.h

index c5879d3bbd3d31da6af802ffa631b484b436218b..7c37ac8f4cd55b8c50c66426e01975fc234282bf 100644 (file)
@@ -536,62 +536,15 @@ CertificateChainEditor::update_certificate_list ()
 void
 CertificateChainEditor::remake_certificates ()
 {
-       auto chain = _get();
-
-       string subject_organization_name;
-       string subject_organizational_unit_name;
-       string root_common_name;
-       string intermediate_common_name;
-       string leaf_common_name;
-
-       auto all = chain->root_to_leaf ();
-
-       if (all.size() >= 1) {
-               /* Have a root */
-               subject_organization_name = chain->root().subject_organization_name ();
-               subject_organizational_unit_name = chain->root().subject_organizational_unit_name ();
-               root_common_name = chain->root().subject_common_name ();
-       }
-
-       if (all.size() >= 2) {
-               /* Have a leaf */
-               leaf_common_name = chain->leaf().subject_common_name ();
-       }
-
-       if (all.size() >= 3) {
-               /* Have an intermediate */
-               dcp::CertificateChain::List::iterator i = all.begin ();
-               ++i;
-               intermediate_common_name = i->subject_common_name ();
-       }
-
        if (_nag_alter()) {
                /* Cancel was clicked */
                return;
        }
 
-       auto d = new MakeChainDialog (
-               this,
-               subject_organization_name,
-               subject_organizational_unit_name,
-               root_common_name,
-               intermediate_common_name,
-               leaf_common_name
-               );
+       auto d = new MakeChainDialog (this, _get());
 
        if (d->ShowModal () == wxID_OK) {
-               _set (
-                       make_shared<dcp::CertificateChain> (
-                               openssl_path (),
-                               CERTIFICATE_VALIDITY_PERIOD,
-                               d->organisation (),
-                               d->organisational_unit (),
-                               d->root_common_name (),
-                               d->intermediate_common_name (),
-                               d->leaf_common_name ()
-                               )
-                       );
-
+               _set (d->get());
                update_certificate_list ();
                update_private_key ();
        }
index 10433de034f71ad2592cd7907137a663ce89f425..4255fb307881dcba3a98930b87db7f377f8793dd 100644 (file)
 
 #include "make_chain_dialog.h"
 #include "static_text.h"
+#include "lib/cross.h"
+#include "lib/util.h"
+#include <dcp/certificate_chain.h>
 #include <boost/algorithm/string.hpp>
 
 
+using std::make_shared;
+using std::shared_ptr;
 using std::string;
 
 
 MakeChainDialog::MakeChainDialog (
        wxWindow* parent,
-       string organisation,
-       string organisational_unit_name,
-       string root_common_name,
-       string intermediate_common_name,
-       string leaf_common_name
+       shared_ptr<const dcp::CertificateChain> chain
        )
        : TableDialog (parent, _("Make certificate chain"), 2, 1, true)
 {
+       string subject_organization_name;
+       string subject_organizational_unit_name;
+       string root_common_name;
+       string intermediate_common_name;
+       string leaf_common_name;
+
+       auto all = chain->root_to_leaf ();
+
+       if (all.size() >= 1) {
+               /* Have a root */
+               subject_organization_name = chain->root().subject_organization_name ();
+               subject_organizational_unit_name = chain->root().subject_organizational_unit_name ();
+               root_common_name = chain->root().subject_common_name ();
+       }
+
+       if (all.size() >= 2) {
+               /* Have a leaf */
+               leaf_common_name = chain->leaf().subject_common_name ();
+       }
+
+       if (all.size() >= 3) {
+               /* Have an intermediate */
+               dcp::CertificateChain::List::iterator i = all.begin ();
+               ++i;
+               intermediate_common_name = i->subject_common_name ();
+       }
+
        wxTextValidator validator (wxFILTER_EXCLUDE_CHAR_LIST);
        validator.SetCharExcludes (wxT ("/"));
 
@@ -53,9 +81,9 @@ MakeChainDialog::MakeChainDialog (
        }
 
        add (_("Organisation"), true);
-       add (_organisation = new wxTextCtrl (this, wxID_ANY, std_to_wx (organisation), wxDefaultPosition, wxSize (480, -1), 0, validator));
+       add (_organisation = new wxTextCtrl (this, wxID_ANY, std_to_wx(subject_organization_name), wxDefaultPosition, wxSize (480, -1), 0, validator));
        add (_("Organisational unit"), true);
-       add (_organisational_unit = new wxTextCtrl (this, wxID_ANY, std_to_wx (organisational_unit_name), wxDefaultPosition, wxDefaultSize, 0, validator));
+       add (_organisational_unit = new wxTextCtrl (this, wxID_ANY, std_to_wx(subject_organizational_unit_name), wxDefaultPosition, wxDefaultSize, 0, validator));
 
        add (_("Root common name"), true);
 
@@ -94,3 +122,18 @@ MakeChainDialog::MakeChainDialog (
 
        _organisation->SetFocus ();
 }
+
+
+shared_ptr<dcp::CertificateChain>
+MakeChainDialog::get () const
+{
+       return make_shared<dcp::CertificateChain>(
+               openssl_path(),
+               CERTIFICATE_VALIDITY_PERIOD,
+               wx_to_std(_organisation->GetValue()),
+               wx_to_std(_organisational_unit->GetValue()),
+               "." + wx_to_std(_root_common_name->GetValue()),
+               "." + wx_to_std(_intermediate_common_name->GetValue()),
+               "CS." + wx_to_std(_leaf_common_name->GetValue())
+               );
+}
index 5ad62430e25f2f1efbd51931ee095d98dd2a7de6..018db99a202c2e2ce7d42ef3c0db60c870ea789b 100644 (file)
 class MakeChainDialog : public TableDialog
 {
 public:
-       MakeChainDialog (
-               wxWindow* parent,
-               std::string organisation,
-               std::string organisational_unit_name,
-               std::string root_common_name,
-               std::string intermediate_common_name,
-               std::string leaf_common_name
-               );
-
-       std::string organisation () const {
-               return wx_to_std (_organisation->GetValue ());
-       }
-
-       std::string organisational_unit () const {
-               return wx_to_std (_organisational_unit->GetValue ());
-       }
-
-       std::string root_common_name () const {
-               return "." + wx_to_std (_root_common_name->GetValue ());
-       }
-
-       std::string intermediate_common_name () const {
-               return "." + wx_to_std (_intermediate_common_name->GetValue ());
-       }
-
-       std::string leaf_common_name () const {
-               return "CS." + wx_to_std (_leaf_common_name->GetValue ());
-       }
+       MakeChainDialog (wxWindow* parent, std::shared_ptr<const dcp::CertificateChain> chain);
 
+       std::shared_ptr<dcp::CertificateChain> get () const;
 
 private:
        wxTextCtrl* _organisation;