mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-23 18:32:53 +00:00
250 lines
6.5 KiB
C++
250 lines
6.5 KiB
C++
/*
|
|
* Copyright (C) 2002 Jean-Baptiste Mardelle <bj@altern.org>
|
|
* Copyright (C) 2007,2009,2010,2012,2013,2014 Rolf Eike Beer <kde@opensource.sf-tec.de>
|
|
*/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "kgpgkeygenerate.h"
|
|
|
|
#include "core/convert.h"
|
|
#include "core/emailvalidator.h"
|
|
|
|
#include <KComboBox>
|
|
#include <KDebug>
|
|
#include <KHBox>
|
|
#include <KLineEdit>
|
|
#include <KLocale>
|
|
#include <KMessageBox>
|
|
#include <QGroupBox>
|
|
#include <QIntValidator>
|
|
#include <QLabel>
|
|
#include <QVBoxLayout>
|
|
#include <QWhatsThis>
|
|
#include <QWidget>
|
|
|
|
using namespace KgpgCore;
|
|
|
|
KgpgKeyGenerate::KgpgKeyGenerate(QWidget *parent)
|
|
: KDialog(parent),
|
|
m_expert(false)
|
|
{
|
|
setupUi(this);
|
|
|
|
setButtons(User1 | Ok | Cancel);
|
|
|
|
setButtonText(User1, i18n("&Expert Mode"));
|
|
setButtonToolTip(User1, i18n("Go to Expert Mode"));
|
|
setButtonWhatsThis(User1, i18n( "If you go to expert mode, you will use the command line to create your key." ));
|
|
|
|
connect(m_kname, SIGNAL(textChanged(QString)), this, SLOT(slotEnableOk()));
|
|
|
|
KHBox *hgroup = new KHBox(vgroup);
|
|
hgroup->setFrameShape(QFrame::StyledPanel);
|
|
hgroup->setMargin(marginHint());
|
|
hgroup->setSpacing(spacingHint());
|
|
m_days->setParent(hgroup);
|
|
QIntValidator *validator = new QIntValidator(m_days);
|
|
validator->setBottom(0);
|
|
m_days->setValidator(validator);
|
|
m_days->setMaxLength(4);
|
|
m_days->setDisabled(true);
|
|
|
|
m_keyexp = new KComboBox(hgroup);
|
|
m_keyexp->addItem(i18nc("Key will not expire", "Never"), 0);
|
|
m_keyexp->addItem(i18n("Days"), 1);
|
|
m_keyexp->addItem(i18n("Weeks"), 2);
|
|
m_keyexp->addItem(i18n("Months"), 3);
|
|
m_keyexp->addItem(i18n("Years"), 4);
|
|
m_keyexp->setMinimumSize(m_keyexp->sizeHint());
|
|
connect(m_keyexp, SIGNAL(activated(int)), this, SLOT(slotEnableDays(int)));
|
|
|
|
qobject_cast<QVBoxLayout *>(vgroup->layout())->insertWidget(7, hgroup);
|
|
|
|
m_keysize->addItem(i18n("1024"));
|
|
m_keysize->addItem(i18n("2048"));
|
|
m_keysize->addItem(i18n("4096"));
|
|
m_keysize->setCurrentIndex(1); // 2048
|
|
m_keysize->setMinimumSize(m_keysize->sizeHint());
|
|
|
|
m_keykind->addItem(KgpgCore::Convert::toString(KgpgCore::ALGO_DSA_ELGAMAL));
|
|
m_keykind->addItem(KgpgCore::Convert::toString(KgpgCore::ALGO_RSA_RSA));
|
|
m_keykind->addItem(KgpgCore::Convert::toString(KgpgCore::ALGO_RSA));
|
|
m_keykind->setCurrentIndex(1); // RSA+RSA
|
|
slotEnableCaps(m_keykind->currentIndex());
|
|
m_keykind->setMinimumSize(m_keykind->sizeHint());
|
|
|
|
setMainWidget(vgroup);
|
|
|
|
slotEnableOk();
|
|
updateGeometry();
|
|
show();
|
|
|
|
connect(this, SIGNAL(okClicked()), this, SLOT(slotOk()));
|
|
connect(this, SIGNAL(user1Clicked()), this, SLOT(slotUser1()));
|
|
connect(m_keykind, SIGNAL(activated(int)), SLOT(slotEnableCaps(int)));
|
|
}
|
|
|
|
void KgpgKeyGenerate::slotButtonClicked(int button)
|
|
{
|
|
if (button == Ok)
|
|
slotOk();
|
|
else
|
|
if (button == User1)
|
|
slotUser1();
|
|
else
|
|
if (button == Cancel)
|
|
reject();
|
|
}
|
|
|
|
void KgpgKeyGenerate::slotOk()
|
|
{
|
|
if (m_kname->text().simplified().isEmpty())
|
|
{
|
|
KMessageBox::sorry(this, i18n("You must give a name."));
|
|
return;
|
|
}
|
|
|
|
if (m_kname->text().simplified().length() < 5)
|
|
{
|
|
KMessageBox::sorry(this, i18n("The name must have at least 5 characters"));
|
|
return;
|
|
}
|
|
|
|
if (m_kname->text().simplified().at(0).isDigit())
|
|
{
|
|
KMessageBox::sorry(this, i18n("The name must not start with a digit"));
|
|
return;
|
|
}
|
|
|
|
QString vmail = m_mail->text();
|
|
if (vmail.isEmpty())
|
|
{
|
|
int result = KMessageBox::warningContinueCancel(this, i18n("You are about to create a key with no email address"));
|
|
if (result != KMessageBox::Continue)
|
|
return;
|
|
} else {
|
|
int pos = 0;
|
|
if (EmailValidator().validate(vmail, pos) == QValidator::Invalid)
|
|
{
|
|
KMessageBox::sorry(this, i18n("Email address not valid"));
|
|
return;
|
|
}
|
|
}
|
|
|
|
accept();
|
|
}
|
|
|
|
void KgpgKeyGenerate::slotUser1()
|
|
{
|
|
m_expert = true;
|
|
accept();
|
|
}
|
|
|
|
void KgpgKeyGenerate::slotEnableDays(const int state)
|
|
{
|
|
m_days->setDisabled(state == 0);
|
|
}
|
|
|
|
void KgpgKeyGenerate::slotEnableCaps(const int state)
|
|
{
|
|
// currently only supported for standalone RSA keys
|
|
capabilities->setDisabled(state != 2);
|
|
}
|
|
|
|
void KgpgKeyGenerate::slotEnableOk()
|
|
{
|
|
enableButtonOk((m_kname->text().simplified().length() >= 5) &&
|
|
!m_kname->text().simplified().at(0).isDigit());
|
|
}
|
|
|
|
bool KgpgKeyGenerate::isExpertMode() const
|
|
{
|
|
return m_expert;
|
|
}
|
|
|
|
KgpgCore::KgpgKeyAlgo KgpgKeyGenerate::algo() const
|
|
{
|
|
if (m_keykind->currentText() == KgpgCore::Convert::toString(KgpgCore::ALGO_RSA))
|
|
return KgpgCore::ALGO_RSA;
|
|
else if (m_keykind->currentText() == KgpgCore::Convert::toString(KgpgCore::ALGO_RSA_RSA))
|
|
return KgpgCore::ALGO_RSA_RSA;
|
|
else
|
|
return KgpgCore::ALGO_DSA_ELGAMAL;
|
|
}
|
|
|
|
KgpgCore::KgpgSubKeyType KgpgKeyGenerate::caps() const
|
|
{
|
|
KgpgCore::KgpgSubKeyType ret;
|
|
|
|
if (!capabilities->isEnabled())
|
|
return ret;
|
|
|
|
if (capAuth->isChecked())
|
|
ret |= KgpgCore::SKT_AUTHENTICATION;
|
|
if (capCert->isChecked())
|
|
ret |= KgpgCore::SKT_CERTIFICATION;
|
|
if (capEncrypt->isChecked())
|
|
ret |= KgpgCore::SKT_ENCRYPTION;
|
|
if (capSign->isChecked())
|
|
ret |= KgpgCore::SKT_SIGNATURE;
|
|
|
|
return ret;
|
|
}
|
|
|
|
uint KgpgKeyGenerate::size() const
|
|
{
|
|
return m_keysize->currentText().toUInt();
|
|
}
|
|
|
|
char KgpgKeyGenerate::expiration() const
|
|
{
|
|
switch (m_keyexp->currentIndex()) {
|
|
case 1:
|
|
return 'd';
|
|
case 2:
|
|
return 'w';
|
|
case 3:
|
|
return 'm';
|
|
case 4:
|
|
default:
|
|
return 'y';
|
|
}
|
|
}
|
|
|
|
uint KgpgKeyGenerate::days() const
|
|
{
|
|
if (m_days->text().isEmpty())
|
|
return 0;
|
|
return m_days->text().toUInt();
|
|
}
|
|
|
|
QString KgpgKeyGenerate::name() const
|
|
{
|
|
if (m_kname->text().isEmpty())
|
|
return QString();
|
|
return m_kname->text();
|
|
}
|
|
|
|
QString KgpgKeyGenerate::email() const
|
|
{
|
|
if (m_mail->text().isEmpty())
|
|
return QString();
|
|
return m_mail->text();
|
|
}
|
|
|
|
QString KgpgKeyGenerate::comment() const
|
|
{
|
|
if (m_comment->text().isEmpty())
|
|
return QString();
|
|
return m_comment->text();
|
|
}
|
|
|
|
#include "kgpgkeygenerate.moc"
|