diff options
| author | Remko Tronçon <git@el-tramo.be> | 2012-05-12 18:09:25 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2012-05-12 18:09:25 (GMT) | 
| commit | 159e773b156f531575d0d7e241e2d20c85ee6d7c (patch) | |
| tree | 9116f69b5f20ec07060b73308427ab524305344f /Swift/QtUI | |
| parent | 0f91f88ac69644fb7e7bdbf601b7e098194490fa (diff) | |
| download | swift-contrib-159e773b156f531575d0d7e241e2d20c85ee6d7c.zip swift-contrib-159e773b156f531575d0d7e241e2d20c85ee6d7c.tar.bz2 | |
Show Certificate dialog from certificate error window.
Diffstat (limited to 'Swift/QtUI')
| -rw-r--r-- | Swift/QtUI/QtLoginWindow.cpp | 21 | ||||
| -rw-r--r-- | Swift/QtUI/QtLoginWindow.h | 2 | ||||
| -rw-r--r-- | Swift/QtUI/QtMainWindow.cpp | 8 | ||||
| -rw-r--r-- | Swift/QtUI/QtMainWindow.h | 1 | 
4 files changed, 21 insertions, 11 deletions
| diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index 094f96c..42ebe39 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -506,20 +506,25 @@ void QtLoginWindow::moveEvent(QMoveEvent*) {  	emit geometryChanged();  } -bool QtLoginWindow::askUserToTrustCertificatePermanently(const std::string& message, Certificate::ref certificate) { +bool QtLoginWindow::askUserToTrustCertificatePermanently(const std::string& message, const std::vector<Certificate::ref>& certificates) {  	QMessageBox dialog(this);  	dialog.setText(tr("The certificate presented by the server is not valid."));  	dialog.setInformativeText(P2QSTRING(message) + "\n\n" + tr("Would you like to permanently trust this certificate? This must only be done if you know it is correct.")); -	QString detailedText = tr("Subject: %1").arg(P2QSTRING(certificate->getSubjectName())) + "\n"; -	detailedText += tr("SHA-1 Fingerprint: %1").arg(P2QSTRING(certificate->getSHA1Fingerprint())); -	dialog.setDetailedText(detailedText); - -	dialog.setStandardButtons(QMessageBox::Yes | QMessageBox::No); +	dialog.addButton("Show Certificate", QMessageBox::HelpRole); +	dialog.addButton(QMessageBox::Yes); +	dialog.addButton(QMessageBox::No);  	dialog.setDefaultButton(QMessageBox::No); - -	return dialog.exec() == QMessageBox::Yes; +	while (true) { +		int result = dialog.exec(); +		if (result == QMessageBox::Yes || result == QMessageBox::No) { +			return result == QMessageBox::Yes; +		} +		// FIXME: This isn't very nice, because the dialog disappears every time. We actually need a real +		// dialog with a custom button. +		QtMainWindow::openCertificateDialog(certificates, &dialog); +	}  }  } diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index 8f50a35..572902e 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -48,7 +48,7 @@ namespace Swift {  			virtual void setLoginAutomatically(bool loginAutomatically);  			virtual void setIsLoggingIn(bool loggingIn);  			void selectUser(const std::string& user); -			bool askUserToTrustCertificatePermanently(const std::string& message, Certificate::ref certificate); +			bool askUserToTrustCertificatePermanently(const std::string& message, const std::vector<Certificate::ref>& certificate);  			void hide();  			QtMenus getMenus() const;  			virtual void quit(); diff --git a/Swift/QtUI/QtMainWindow.cpp b/Swift/QtUI/QtMainWindow.cpp index 547f22b..ec05684 100644 --- a/Swift/QtUI/QtMainWindow.cpp +++ b/Swift/QtUI/QtMainWindow.cpp @@ -273,10 +273,14 @@ void QtMainWindow::setStreamEncryptionStatus(bool tlsInPlaceAndValid) {  }  void QtMainWindow::openCertificateDialog(const std::vector<Certificate::ref>& chain) { +	openCertificateDialog(chain, this); +} + +void QtMainWindow::openCertificateDialog(const std::vector<Certificate::ref>& chain, QWidget* parent) {  #if defined(SWIFTEN_PLATFORM_MACOSX) -	CocoaUIHelpers::displayCertificateChainAsSheet(this, chain); +	CocoaUIHelpers::displayCertificateChainAsSheet(parent, chain);  #elif defined(SWIFTEN_PLATFORM_WINDOWS) -	WinUIHelpers::displayCertificateChainAsSheet(this,chain); +	WinUIHelpers::displayCertificateChainAsSheet(parent, chain);  #else  #pragma message ("No certificate dialog available on this platform.")  #endif diff --git a/Swift/QtUI/QtMainWindow.h b/Swift/QtUI/QtMainWindow.h index c725d08..25d9ace 100644 --- a/Swift/QtUI/QtMainWindow.h +++ b/Swift/QtUI/QtMainWindow.h @@ -47,6 +47,7 @@ namespace Swift {  			void setConnecting();  			void setStreamEncryptionStatus(bool tlsInPlaceAndValid);  			void openCertificateDialog(const std::vector<Certificate::ref>& chain); +			static void openCertificateDialog(const std::vector<Certificate::ref>& chain, QWidget* parent);  			QtEventWindow* getEventWindow();  			QtChatListWindow* getChatListWindow();  			void setRosterModel(Roster* roster); | 
 Swift
 Swift