diff options
Diffstat (limited to 'kcontrol/crypto/certexport.cpp')
-rw-r--r-- | kcontrol/crypto/certexport.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/kcontrol/crypto/certexport.cpp b/kcontrol/crypto/certexport.cpp new file mode 100644 index 000000000..034d69897 --- /dev/null +++ b/kcontrol/crypto/certexport.cpp @@ -0,0 +1,148 @@ +/** + * certexport.cpp + * + * Copyright (c) 2001 George Staikos <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "certexport.h" +#include <tqpushbutton.h> +#include <klineedit.h> +#include <tdefiledialog.h> +#include <tqradiobutton.h> +#include <tqvbuttongroup.h> +#include <tqlayout.h> +#include <tqlabel.h> +#include <tdelocale.h> +#include <kdebug.h> +#include <tdemessagebox.h> +#include <ksslall.h> + + +KCertExport::KCertExport(TQWidget *parent, const char *name) + : KDialog(parent, name, true) { +TQGridLayout *grid = new TQGridLayout(this, 9, 6, marginHint(), spacingHint()); + + setCaption(i18n("X509 Certificate Export")); + + TQVButtonGroup *bg = new TQVButtonGroup(i18n("Format"), this); + _pem = new TQRadioButton(i18n("&PEM"), bg); + _netscape = new TQRadioButton(i18n("&Netscape"), bg); + _der = new TQRadioButton(i18n("&DER/ASN1"), bg); + _text = new TQRadioButton(i18n("&Text"), bg); + grid->addMultiCellWidget(bg, 0, 4, 0, 3); + _pem->setChecked(true); + + grid->addMultiCellWidget(new TQLabel(i18n("Filename:"), this), 5, 5, 0, 3); + + _filename = new KLineEdit(this); + grid->addMultiCellWidget(_filename, 6, 6, 0, 4); + connect(_filename, TQT_SIGNAL(textChanged(const TQString &)), this, TQT_SLOT(slotTextChanged(const TQString &))); + connect(_filename, TQT_SIGNAL(returnPressed()), this, TQT_SLOT(slotExport())); + + _choose = new TQPushButton("...", this); + grid->addWidget(_choose, 6, 5); + connect(_choose, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotChoose())); + + _export = new TQPushButton(i18n("&Export"), this); + grid->addWidget(_export, 8, 4); + connect(_export, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotExport())); + _export->setEnabled(false); + + _cancel = new TQPushButton(i18n("&Cancel"), this); + grid->addWidget(_cancel, 8, 5); + connect(_cancel, TQT_SIGNAL(clicked()), this, TQT_SLOT(reject())); +} + + +KCertExport::~KCertExport() { + +} + + +void KCertExport::setCertificate(KSSLCertificate *c) { + _c = c; +} + + +void KCertExport::slotExport() { +TQByteArray cert; +TQString certt; + + if (_filename->text().isEmpty()) return; + + if (!_c) { + KMessageBox::sorry(this, i18n("Internal error. Please report to [email protected]."), i18n("SSL")); + return; + } + + if (_der->isChecked()) { + cert = _c->toDer(); + } else if (_pem->isChecked()) { + cert = _c->toPem(); + } else if (_text->isChecked()) { + certt = _c->toText(); + } else { // netscape + cert = _c->toNetscape(); + } + + if ((!_text->isChecked() && cert.size() <= 0) && certt.isEmpty()) { + KMessageBox::error(this, i18n("Error converting the certificate into the requested format."), i18n("SSL")); + reject(); + return; + } + + TQFile outFile(_filename->text()); + + if (!outFile.open(IO_WriteOnly)) { + KMessageBox::error(this, i18n("Error opening file for output."), i18n("SSL")); + reject(); + return; + } + + if (_text->isChecked()) + outFile.writeBlock(certt.local8Bit(), certt.length()); + else outFile.writeBlock(cert); + + outFile.close(); + +accept(); +} + + +void KCertExport::slotChoose() { + //TQString newFile = KFileDialog::getSaveFileName("::x509save", i18n("*.pem|Privacy Enhanced Mail Format\n*.der|DER/ASN1 Format")); + TQString newFile = KFileDialog::getSaveFileName(TQString::null, "application/x-x509-ca-cert"); + + // Dunno about this one yet + // \n*.ncert|Netscape certificate files"); + + if (!newFile.isEmpty()) _filename->setText(newFile); +} + + +void KCertExport::slotTextChanged(const TQString& x) { + _export->setEnabled(!x.isEmpty()); +} + + +#include "certexport.moc" + |