7#include "vdvcertificate_p.h"
9#include <QCoreApplication>
14#include <QRegularExpression>
20static std::vector<QString> listCerts()
24 proc.
setArguments({QStringLiteral(
"ls"), QStringLiteral(
"ldap://ldap-vdv-ion.telesec.de:389/ou=VDV%20KA,o=VDV%20Kernapplikations%20GmbH,c=de")});
28 qFatal(
"Failed to list certificates from LDAP server.");
31 std::vector<QString> certs;
32 for (
const auto &line : proc.readAllStandardOutput().split(
'\n')) {
33 if (line.size() <= 5) {
41static void downloadCert(
const QString &certName)
45 proc.
setArguments({QStringLiteral(
"cat"), QStringLiteral(
"ldap://ldap-vdv-ion.telesec.de:389/cn=") + certName + QStringLiteral(
",ou=VDV%20KA,o=VDV%20Kernapplikations%20GmbH,c=de")});
49 qFatal(
"Failed to download certificate %s from LDAP server.", qPrintable(certName));
55 const auto match = regExp.match(certLdif);
63static void writeQrc(
const std::vector<QString> &certNames)
65 QFile qrc(QStringLiteral(
"vdv-certs.qrc"));
67 qFatal(
"Failed to open file %s: %s", qPrintable(qrc.fileName()), qPrintable(qrc.errorString()));
70 SPDX-FileCopyrightText: none
71 SPDX-License-Identifier: CC0-1.0
74 <qresource prefix="/org.kde.pim/kitinerary/vdv/certs">
76 for (
const auto &certName : certNames) {
78 qrc.write(certName.
toUtf8());
79 qrc.write(
".vdv-cert</file>\n");
81 qrc.write(
" </qresource>\n</RCC>\n");
84static VdvCertificate loadCert(
const QString &certName)
88 qFatal(
"Failed to open file %s: %s", qPrintable(f.fileName()),
89 qPrintable(f.errorString()));
91 return VdvCertificate(f.readAll());
94static void decodeCert(
const QString &certName)
96 auto cert = loadCert(certName);
97 if (cert.needsCaKey()) {
98 qDebug() << certName <<
"needs decoding";
99 const auto rootCa = loadCert(QStringLiteral(
"4555564456100106"));
100 cert.setCaCertificate(rootCa);
101 if (cert.isValid()) {
104 qFatal(
"Failed to open file %s: %s", qPrintable(f.fileName()),
105 qPrintable(f.errorString()));
109 qFatal(
"Decoding failed for %s", qPrintable(certName));;
111 }
else if (cert.isValid()) {
115 qFatal(
"Failed to open file %s: %s", qPrintable(f.fileName()), qPrintable(f.errorString()));
119 qWarning(
"%s is invalid", qPrintable(certName));
123int main(
int argc,
char **argv)
128 auto certNames = listCerts();
131 for (
auto it = certNames.begin(); it != certNames.end();) {
135 it = certNames.erase(it);
138 qDebug() <<
"checking certificate" << (*it);
146 for (
const auto &certName : certNames) {
147 decodeCert(certName);
151 for (
auto it = certNames.begin(); it != certNames.end();) {
152 const auto cert = loadCert(*it);
153 if (!cert.isValid()) {
154 qWarning(
"Invalid certificate: %s", qPrintable(*it));
155 it = certNames.erase(it);
158 if (!cert.isSelfSigned() && cert.endOfValidity().year() < 2019) {
159 qDebug() <<
"discarding" << (*it) <<
"due to being expired" << cert.endOfValidity();
163 it = certNames.erase(it);
170 std::sort(certNames.begin(), certNames.end());
KCOREADDONS_EXPORT Result match(QStringView pattern, QStringView str)
Classes for reservation/travel data models, data extraction and data augmentation.
QByteArray fromBase64(const QByteArray &base64, Base64Options options)
bool exists() const const
bool rename(const QString &newName)
QProcess::ExitStatus exitStatus() const const
QByteArray readAllStandardOutput()
void setArguments(const QStringList &arguments)
void setProcessChannelMode(ProcessChannelMode mode)
void setProgram(const QString &program)
void start(OpenMode mode)
bool waitForFinished(int msecs)
QString fromUtf8(QByteArrayView str)
QByteArray toUtf8() const const