#include "lib/colour_conversion.h"
#include "lib/log.h"
#include "lib/util.h"
+#include "lib/cross.h"
+#include "lib/exceptions.h"
#include "config_dialog.h"
#include "wx_util.h"
#include "editable_list.h"
s->Add (_load_decryption_private_key, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP);
table->Add (s, 0);
}
+
+ _export_decryption_certificate = new wxButton (_panel, wxID_ANY, _("Export DCP decryption certificate..."));
+ table->Add (_export_decryption_certificate);
+ table->AddSpacer (0);
_add_certificate->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KeysPage::add_certificate, this));
_remove_certificate->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KeysPage::remove_certificate, this));
_load_signer_private_key->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KeysPage::load_signer_private_key, this));
_load_decryption_certificate->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KeysPage::load_decryption_certificate, this));
_load_decryption_private_key->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KeysPage::load_decryption_private_key, this));
+ _export_decryption_certificate->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KeysPage::export_decryption_certificate, this));
_signer.reset (new dcp::Signer (*Config::instance()->signer().get ()));
if (d->ShowModal() == wxID_OK) {
try {
- shared_ptr<dcp::Certificate> c (new dcp::Certificate (dcp::file_to_string (wx_to_std (d->GetPath ()))));
+ dcp::Certificate c (dcp::file_to_string (wx_to_std (d->GetPath ())));
_signer->certificates().add (c);
Config::instance()->set_signer (_signer);
update_certificate_list ();
wxListItem item;
item.SetId (n);
_certificates->InsertItem (item);
- _certificates->SetItem (n, 1, std_to_wx ((*i)->thumbprint ()));
+ _certificates->SetItem (n, 1, std_to_wx (i->thumbprint ()));
if (n == 0) {
_certificates->SetItem (n, 0, _("Root"));
_decryption_private_key->SetLabel (std_to_wx (dcp::private_key_fingerprint (Config::instance()->decryption_private_key())));
}
+ void export_decryption_certificate ()
+ {
+ wxFileDialog* d = new wxFileDialog (
+ _panel, _("Select Certificate File"), wxEmptyString, wxEmptyString, wxT ("PEM files (*.pem)|*.pem"),
+ wxFD_SAVE | wxFD_OVERWRITE_PROMPT
+ );
+
+ if (d->ShowModal () == wxID_OK) {
+ FILE* f = fopen_boost (wx_to_std (d->GetPath ()), "w");
+ if (!f) {
+ throw OpenFileError (wx_to_std (d->GetPath ()));
+ }
+
+ string const s = Config::instance()->decryption_certificate().certificate (true);
+ fwrite (s.c_str(), 1, s.length(), f);
+ fclose (f);
+ }
+ d->Destroy ();
+ }
+
wxPanel* _panel;
wxListCtrl* _certificates;
wxButton* _add_certificate;
wxButton* _load_decryption_certificate;
wxStaticText* _decryption_private_key;
wxButton* _load_decryption_private_key;
+ wxButton* _export_decryption_certificate;
shared_ptr<dcp::Signer> _signer;
};
add_label_to_sizer (table, panel, _("CC address"), true);
_kdm_cc = new wxTextCtrl (panel, wxID_ANY);
table->Add (_kdm_cc, 1, wxEXPAND | wxALL);
+
+ add_label_to_sizer (table, panel, _("BCC address"), true);
+ _kdm_bcc = new wxTextCtrl (panel, wxID_ANY);
+ table->Add (_kdm_bcc, 1, wxEXPAND | wxALL);
_kdm_email = new wxTextCtrl (panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (480, 128), wxTE_MULTILINE);
- s->Add (_kdm_email, 1.5, wxEXPAND | wxALL, _border);
+ s->Add (_kdm_email, 1, wxEXPAND | wxALL, _border);
_reset_kdm_email = new wxButton (panel, wxID_ANY, _("Reset to default text"));
s->Add (_reset_kdm_email, 0, wxEXPAND | wxALL, _border);
_kdm_from->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_from_changed, this));
_kdm_cc->SetValue (std_to_wx (config->kdm_cc ()));
_kdm_cc->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_cc_changed, this));
+ _kdm_bcc->SetValue (std_to_wx (config->kdm_bcc ()));
+ _kdm_bcc->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_bcc_changed, this));
_kdm_email->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&KDMEmailPage::kdm_email_changed, this));
_kdm_email->SetValue (std_to_wx (Config::instance()->kdm_email ()));
_reset_kdm_email->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMEmailPage::reset_kdm_email, this));
{
Config::instance()->set_kdm_cc (wx_to_std (_kdm_cc->GetValue ()));
}
+
+ void kdm_bcc_changed ()
+ {
+ Config::instance()->set_kdm_bcc (wx_to_std (_kdm_bcc->GetValue ()));
+ }
void kdm_email_changed ()
{
wxTextCtrl* _kdm_subject;
wxTextCtrl* _kdm_from;
wxTextCtrl* _kdm_cc;
+ wxTextCtrl* _kdm_bcc;
wxTextCtrl* _kdm_email;
wxButton* _reset_kdm_email;
};