LeechCraft 0.6.70-17335-ge406ffdcaf
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
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
17namespace 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}
void SetCertificate(const QSslCertificate &)
QDialog * MakeCertificateViewerDialog(const QSslCertificate &cert, QWidget *parent)