LeechCraft  0.6.70-15082-g543737046d
Modular cross-platform feature rich live environment.
sslcertificateinfowidget.cpp
Go to the documentation of this file.
1 /**********************************************************************
2  * LeechCraft - modular cross-platform feature rich internet client.
3  * Copyright (C) 2006-2014 Georg Rudoy
4  *
5  * Distributed under the Boost Software License, Version 1.0.
6  * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7  **********************************************************************/
8 
10 #include <QSslCertificate>
11 #include <QVBoxLayout>
12 #include <QDialog>
13 #include <QDialogButtonBox>
14 #include <util/sll/qtutil.h>
15 #include "ui_sslcertificateinfowidget.h"
16 
17 namespace LC::Util
18 {
20  : QWidget { parent }
21  , Ui_ { std::make_shared<Ui::SslCertificateInfoWidget> () }
22  {
23  Ui_->setupUi (this);
24  }
25 
26  namespace
27  {
28  QByteArray FormatHash (QByteArray hash)
29  {
30  hash = hash.toUpper ();
31  for (int i = 2; i < hash.size (); i += 3)
32  hash.insert (i, ':');
33  return hash;
34  }
35  }
36 
37  void SslCertificateInfoWidget::SetCertificate (const QSslCertificate& cert)
38  {
39  auto setSubjectInfo = [&cert] (QLabel *label, QSslCertificate::SubjectInfo key)
40  {
41  label->setText (cert.subjectInfo (key).join ("; "_ql));
42  };
43  auto setIssuerInfo = [&cert] (QLabel *label, QSslCertificate::SubjectInfo key)
44  {
45  label->setText (cert.issuerInfo (key).join ("; "_ql));
46  };
47 
48  setSubjectInfo (Ui_->SubjectCommonName_, QSslCertificate::CommonName);
49  setSubjectInfo (Ui_->SubjectOrganization_, QSslCertificate::Organization);
50  setSubjectInfo (Ui_->SubjectUnit_, QSslCertificate::OrganizationalUnitName);
51  setSubjectInfo (Ui_->SubjectCountry_, QSslCertificate::CountryName);
52  setSubjectInfo (Ui_->SubjectState_, QSslCertificate::StateOrProvinceName);
53  setSubjectInfo (Ui_->SubjectCity_, QSslCertificate::LocalityName);
54  setIssuerInfo (Ui_->IssuerCommonName_, QSslCertificate::CommonName);
55  setIssuerInfo (Ui_->IssuerOrganization_, QSslCertificate::Organization);
56  setIssuerInfo (Ui_->IssuerUnit_, QSslCertificate::OrganizationalUnitName);
57  setIssuerInfo (Ui_->IssuerCountry_, QSslCertificate::CountryName);
58  setIssuerInfo (Ui_->IssuerState_, QSslCertificate::StateOrProvinceName);
59  setIssuerInfo (Ui_->IssuerCity_, QSslCertificate::LocalityName);
60 
61  Ui_->SerialNumber_->setText (cert.serialNumber ());
62  Ui_->Md5_->setText (cert.digest (QCryptographicHash::Md5).toHex ());
63  Ui_->Sha1_->setText (FormatHash (cert.digest (QCryptographicHash::Sha1).toHex ()));
64  Ui_->Sha256_->setText (FormatHash (cert.digest (QCryptographicHash::Sha256).toHex ()));
65  Ui_->Sha512_->setText (FormatHash (cert.digest (QCryptographicHash::Sha512).toHex ()));
66 
67  Ui_->StartDate_->setText (QLocale {}.toString (cert.effectiveDate ()));
68  Ui_->EndDate_->setText (QLocale {}.toString (cert.expiryDate ()));
69  }
70 
71  QDialog* MakeCertificateViewerDialog (const QSslCertificate& cert, QWidget *parent)
72  {
73  const auto dia = new QDialog { parent };
74  dia->setLayout (new QVBoxLayout);
75 
76  const auto certWidget = new Util::SslCertificateInfoWidget;
77  dia->layout ()->addWidget (certWidget);
78 
79  const auto buttons = new QDialogButtonBox { QDialogButtonBox::Close };
80  QObject::connect (buttons,
81  &QDialogButtonBox::accepted,
82  dia,
83  &QDialog::accept);
84  QObject::connect (buttons,
85  &QDialogButtonBox::rejected,
86  dia,
87  &QDialog::reject);
88  dia->layout ()->addWidget (buttons);
89 
90  certWidget->SetCertificate (cert);
91  return dia;
92  }
93 }
LC::Util
Definition: icoreproxy.h:33
LC::Util::SslCertificateInfoWidget::SetCertificate
void SetCertificate(const QSslCertificate &)
Definition: sslcertificateinfowidget.cpp:43
LC::Util::MakeCertificateViewerDialog
QDialog * MakeCertificateViewerDialog(const QSslCertificate &cert, QWidget *parent)
Definition: sslcertificateinfowidget.cpp:77
sslcertificateinfowidget.h
qtutil.h
LC::Util::SslCertificateInfoWidget::SslCertificateInfoWidget
SslCertificateInfoWidget(QWidget *=nullptr)
Definition: sslcertificateinfowidget.cpp:25
LC::Util::Close
@ Close
Definition: winflags.h:52