diff --git a/src/plugins/android/androidcreatekeystorecertificate.cpp b/src/plugins/android/androidcreatekeystorecertificate.cpp index 6f006a2d816..5fc5dc02858 100644 --- a/src/plugins/android/androidcreatekeystorecertificate.cpp +++ b/src/plugins/android/androidcreatekeystorecertificate.cpp @@ -46,6 +46,8 @@ AndroidCreateKeystoreCertificate::AndroidCreateKeystoreCertificate(QWidget *pare connect(ui->keystoreRetypePassLineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkKeystorePassword())); connect(ui->certificatePassLineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkCertificatePassword())); connect(ui->certificateRetypePassLineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkCertificatePassword())); + connect(ui->certificateAliasLineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkCertificateAlias())); + connect(ui->countryLineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkCountryCode())); } AndroidCreateKeystoreCertificate::~AndroidCreateKeystoreCertificate() @@ -65,42 +67,71 @@ QString AndroidCreateKeystoreCertificate::keystorePassword() QString AndroidCreateKeystoreCertificate::certificateAlias() { - return ui->aliasNameLineEdit->text(); + return ui->certificateAliasLineEdit->text(); } QString AndroidCreateKeystoreCertificate::certificatePassword() { - return ui->certificatePassLineEdit->text(); + return (ui->samePasswordCheckBox->checkState() == Qt::Checked) + ? keystorePassword() + : ui->certificatePassLineEdit->text(); } AndroidCreateKeystoreCertificate::PasswordStatus AndroidCreateKeystoreCertificate::checkKeystorePassword() { if (ui->keystorePassLineEdit->text().length() < 6) { - ui->keystorePassInfoLabel->setText(tr("Password is too short")); + ui->infoLabel->setText(tr("Keystore password is too short")); return Invalid; } if (ui->keystorePassLineEdit->text() != ui->keystoreRetypePassLineEdit->text()) { - ui->keystorePassInfoLabel->setText(tr("Passwords don't match")); + ui->infoLabel->setText(tr("Keystore passwords do not match")); return NoMatch; } - ui->keystorePassInfoLabel->setText(tr("Password is ok")); + + ui->infoLabel->clear(); return Match; } AndroidCreateKeystoreCertificate::PasswordStatus AndroidCreateKeystoreCertificate::checkCertificatePassword() { + if (ui->samePasswordCheckBox->checkState() == Qt::Checked) + return Match; + if (ui->certificatePassLineEdit->text().length() < 6) { - ui->certificatePassInfoLabel->setText(tr("Password is too short")); + ui->infoLabel->setText(tr("Certificate password is too short")); return Invalid; } if (ui->certificatePassLineEdit->text() != ui->certificateRetypePassLineEdit->text()) { - ui->certificatePassInfoLabel->setText(tr("Passwords don't match")); + ui->infoLabel->setText(tr("Certificate passwords do not match")); return NoMatch; } - ui->certificatePassInfoLabel->setText(tr("Password is ok")); + + ui->infoLabel->clear(); return Match; } +bool AndroidCreateKeystoreCertificate::checkCertificateAlias() +{ + if (ui->certificateAliasLineEdit->text().length() == 0) { + ui->infoLabel->setText(tr("Certificate alias is missing")); + return false; + } + + ui->infoLabel->clear(); + return true; +} + +bool AndroidCreateKeystoreCertificate::checkCountryCode() +{ + if (!ui->countryLineEdit->text().contains(QRegExp(QLatin1String("[A-Z]{2}")))) { + ui->infoLabel->setText(tr("Invalid country code")); + return false; + } + + ui->infoLabel->clear(); + return true; +} + void AndroidCreateKeystoreCertificate::on_keystoreShowPassCheckBox_stateChanged(int state) { ui->keystorePassLineEdit->setEchoMode(state == Qt::Checked ? QLineEdit::Normal : QLineEdit::Password); @@ -115,44 +146,8 @@ void AndroidCreateKeystoreCertificate::on_certificateShowPassCheckBox_stateChang void AndroidCreateKeystoreCertificate::on_buttonBox_accepted() { - switch (checkKeystorePassword()) { - case Invalid: - ui->keystorePassLineEdit->setFocus(); + if (!validateUserInput()) return; - case NoMatch: - ui->keystoreRetypePassLineEdit->setFocus(); - return; - default: - break; - } - - switch (checkCertificatePassword()) { - case Invalid: - ui->certificatePassLineEdit->setFocus(); - return; - case NoMatch: - ui->certificateRetypePassLineEdit->setFocus(); - return; - default: - break; - } - - if (!ui->aliasNameLineEdit->text().length()) { - ui->aliasNameLineEdit->setFocus(); - return; - } - - if (!ui->commonNameLineEdit->text().length()) - ui->commonNameLineEdit->setFocus(); - - if (!ui->organizationNameLineEdit->text().length()) - ui->organizationNameLineEdit->setFocus(); - - if (!ui->localityNameLineEdit->text().length()) - ui->localityNameLineEdit->setFocus(); - - if (!ui->countryLineEdit->text().length()) - ui->countryLineEdit->setFocus(); m_keystoreFilePath = Utils::FileName::fromString(QFileDialog::getSaveFileName(this, tr("Keystore file name"), QDir::homePath() + QLatin1String("/android_release.keystore"), @@ -174,11 +169,11 @@ void AndroidCreateKeystoreCertificate::on_buttonBox_accepted() QStringList params; params << QLatin1String("-genkey") << QLatin1String("-keyalg") << QLatin1String("RSA") << QLatin1String("-keystore") << m_keystoreFilePath.toString() - << QLatin1String("-storepass") << ui->keystorePassLineEdit->text() - << QLatin1String("-alias") << ui->aliasNameLineEdit->text() + << QLatin1String("-storepass") << keystorePassword() + << QLatin1String("-alias") << certificateAlias() << QLatin1String("-keysize") << ui->keySizeSpinBox->text() << QLatin1String("-validity") << ui->validitySpinBox->text() - << QLatin1String("-keypass") << ui->certificatePassLineEdit->text() + << QLatin1String("-keypass") << certificatePassword() << QLatin1String("-dname") << distinguishedNames; QProcess genKeyCertProc; @@ -195,3 +190,57 @@ void AndroidCreateKeystoreCertificate::on_buttonBox_accepted() } accept(); } + +void AndroidCreateKeystoreCertificate::on_samePasswordCheckBox_stateChanged(int state) +{ + if (state == Qt::Checked) { + ui->certificatePassLineEdit->setDisabled(true); + ui->certificateRetypePassLineEdit->setDisabled(true); + ui->certificateShowPassCheckBox->setDisabled(true); + } + + if (state == Qt::Unchecked) { + ui->certificatePassLineEdit->setEnabled(true); + ui->certificateRetypePassLineEdit->setEnabled(true); + ui->certificateShowPassCheckBox->setEnabled(true); + } + + validateUserInput(); +} + +bool AndroidCreateKeystoreCertificate::validateUserInput() +{ + switch (checkKeystorePassword()) { + case Invalid: + ui->keystorePassLineEdit->setFocus(); + return false; + case NoMatch: + ui->keystoreRetypePassLineEdit->setFocus(); + return false; + default: + break; + } + + if (!checkCertificateAlias()) { + ui->certificateAliasLineEdit->setFocus(); + return false; + } + + switch (checkCertificatePassword()) { + case Invalid: + ui->certificatePassLineEdit->setFocus(); + return false; + case NoMatch: + ui->certificateRetypePassLineEdit->setFocus(); + return false; + default: + break; + } + + if (!checkCountryCode()) { + ui->countryLineEdit->setFocus(); + return false; + } + + return true; +} diff --git a/src/plugins/android/androidcreatekeystorecertificate.h b/src/plugins/android/androidcreatekeystorecertificate.h index 5df88bef8b7..021a52b188f 100644 --- a/src/plugins/android/androidcreatekeystorecertificate.h +++ b/src/plugins/android/androidcreatekeystorecertificate.h @@ -62,11 +62,15 @@ public: private slots: PasswordStatus checkKeystorePassword(); PasswordStatus checkCertificatePassword(); + bool checkCertificateAlias(); + bool checkCountryCode(); void on_keystoreShowPassCheckBox_stateChanged(int state); void on_certificateShowPassCheckBox_stateChanged(int state); void on_buttonBox_accepted(); + void on_samePasswordCheckBox_stateChanged(int state); private: + bool validateUserInput(); Ui::AndroidCreateKeystoreCertificate *ui; Utils::FileName m_keystoreFilePath; }; diff --git a/src/plugins/android/androidcreatekeystorecertificate.ui b/src/plugins/android/androidcreatekeystorecertificate.ui index ed0d4ecf8b7..51c66939f5d 100644 --- a/src/plugins/android/androidcreatekeystorecertificate.ui +++ b/src/plugins/android/androidcreatekeystorecertificate.ui @@ -7,200 +7,14 @@ 0 0 638 - 429 + 473 Create a keystore and a certificate - - - - Keystore - - - - - - Password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - QLineEdit::Password - - - - - - - Retype password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - QLineEdit::Password - - - - - - - Show password - - - - - - - <span style=" color:#ff0000;">Password is too short</span> - - - Qt::RichText - - - Qt::AlignCenter - - - - - - - - - - Certificate - - - - - - Alias name: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Aaaaaaaa; - - - 8 - - - - - - - Keysize: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 2048 - - - 2097152 - - - - - - - Validity (days): - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 10000 - - - 100000 - - - - - - - Password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - QLineEdit::Password - - - - - - - Retype password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - QLineEdit::Password - - - - - - - Show password - - - - - - - <span style=" color:#ff0000;">Password is too short</span> - - - Qt::RichText - - - Qt::AlignCenter - - - - - - - + Certificate Distinguished Names @@ -284,7 +98,7 @@ - >AA; + 2 @@ -294,7 +108,187 @@ - + + + + Certificate + + + + + + QLineEdit::Password + + + + + + + Show password + + + + + + + 10000 + + + 100000 + + + + + + + Validity (days): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Alias name: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + 8 + + + + + + + Keysize: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + QLineEdit::Password + + + + + + + 2048 + + + 2097152 + + + + + + + Retype password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Use Keystore password + + + + + + + + + + Keystore + + + + + + QLineEdit::Password + + + + + + + QLineEdit::Password + + + + + + + Show password + + + + + + + Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Retype password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal @@ -304,12 +298,22 @@ + + + + + + + Qt::AlignCenter + + + keystorePassLineEdit keystoreRetypePassLineEdit - aliasNameLineEdit + certificateAliasLineEdit keySizeSpinBox validitySpinBox certificatePassLineEdit @@ -321,7 +325,6 @@ stateNameLineEdit countryLineEdit keystoreShowPassCheckBox - certificateShowPassCheckBox buttonBox